forked from Upstream/CommandPanels
Merge branch 'master' into master
This commit is contained in:
commit
9857a2d4fb
@ -1,7 +1,7 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="MMOItems-6.5.1">
|
<library name="MMOItems-6.6.0">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$PROJECT_DIR$/../../Tools/Build Tools/Jar Libraries/MMOItems-6.5.1.jar!/" />
|
<root url="jar://$PROJECT_DIR$/../../Tools/Build Tools/Jar Libraries/MMOItems-6.6.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES />
|
<SOURCES />
|
@ -1,7 +1,7 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="MythicLib-1.0.16">
|
<library name="MythicLib-1.1.1">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$PROJECT_DIR$/../../Tools/Build Tools/Jar Libraries/MythicLib-1.0.16.jar!/" />
|
<root url="jar://$PROJECT_DIR$/../../Tools/Build Tools/Jar Libraries/MythicLib-1.1.1.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES />
|
<SOURCES />
|
@ -12,12 +12,12 @@
|
|||||||
<orderEntry type="library" name="TokenManager-3.2.4" level="project" />
|
<orderEntry type="library" name="TokenManager-3.2.4" level="project" />
|
||||||
<orderEntry type="library" name="Vault" level="project" />
|
<orderEntry type="library" name="Vault" level="project" />
|
||||||
<orderEntry type="library" name="VotingPlugin" level="project" />
|
<orderEntry type="library" name="VotingPlugin" level="project" />
|
||||||
<orderEntry type="library" name="MMOItems-6.5.1" level="project" />
|
|
||||||
<orderEntry type="library" name="spigot-1.16.4" level="project" />
|
<orderEntry type="library" name="spigot-1.16.4" level="project" />
|
||||||
<orderEntry type="library" name="spigot-1.13.2" level="project" />
|
<orderEntry type="library" name="spigot-1.13.2" level="project" />
|
||||||
<orderEntry type="library" name="CustomItemsAPI_PLACEHOLDER" level="project" />
|
<orderEntry type="library" name="CustomItemsAPI_PLACEHOLDER" level="project" />
|
||||||
<orderEntry type="library" name="ChestSort" level="project" />
|
<orderEntry type="library" name="ChestSort" level="project" />
|
||||||
<orderEntry type="library" name="MythicLib-1.0.16" level="project" />
|
|
||||||
<orderEntry type="library" name="PlaceholderAPI-2.10.9" level="project" />
|
<orderEntry type="library" name="PlaceholderAPI-2.10.9" level="project" />
|
||||||
|
<orderEntry type="library" name="MMOItems-6.6.0" level="project" />
|
||||||
|
<orderEntry type="library" name="MythicLib-1.1.1" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Config File
|
# | CommandPanels Config File
|
||||||
# | By RockyHawk v5.1
|
# | By RockyHawk v5.2
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |
|
# |
|
||||||
# | auto-update and minor-updates-only is HEAVILY RECOMMENDED
|
# | auto-update and minor-updates-only is HEAVILY RECOMMENDED
|
||||||
@ -60,8 +60,5 @@ purchase:
|
|||||||
success: '&aSuccessfully Sold %cp-args%.'
|
success: '&aSuccessfully Sold %cp-args%.'
|
||||||
failure: '&cInsufficient Items!'
|
failure: '&cInsufficient Items!'
|
||||||
xp:
|
xp:
|
||||||
success: '&aSuccessfully Bought For %cp-args% xp level.'
|
success: '&aSuccessfully Bought For %cp-args% Experience.'
|
||||||
failure: '&cInsufficient xp levels!'
|
failure: '&cInsufficient Experience!'
|
||||||
xppoints:
|
|
||||||
success: '&aSuccessfully Bought For %cp-args% xp points.'
|
|
||||||
failure: '&cInsufficient xp points!'
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
version: 3.16.2.5
|
version: 3.16.3.0
|
||||||
main: me.rockyhawk.commandpanels.CommandPanels
|
main: me.rockyhawk.commandpanels.CommandPanels
|
||||||
name: CommandPanels
|
name: CommandPanels
|
||||||
author: RockyHawk
|
author: RockyHawk
|
||||||
@ -14,6 +14,10 @@ commands:
|
|||||||
description: Reloads plugin config.
|
description: Reloads plugin config.
|
||||||
usage: /commandpanelreload
|
usage: /commandpanelreload
|
||||||
aliases: [cpr, cpanelr]
|
aliases: [cpr, cpanelr]
|
||||||
|
commandpaneldata:
|
||||||
|
description: Change data values for players
|
||||||
|
usage: /commandpaneldata
|
||||||
|
aliases: [cpdata]
|
||||||
commandpaneldebug:
|
commandpaneldebug:
|
||||||
description: Enable and Disable debug mode globally
|
description: Enable and Disable debug mode globally
|
||||||
usage: /commandpaneldebug
|
usage: /commandpaneldebug
|
||||||
@ -67,8 +71,8 @@ permissions:
|
|||||||
default: true
|
default: true
|
||||||
commandpanel.update:
|
commandpanel.update:
|
||||||
default: op
|
default: op
|
||||||
commandpanel.editor:
|
commandpanel.data:
|
||||||
default: true
|
default: op
|
||||||
commandpanel.edit:
|
commandpanel.edit:
|
||||||
default: op
|
default: op
|
||||||
commandpanel.list:
|
commandpanel.list:
|
||||||
|
@ -6,6 +6,9 @@ import me.rockyhawk.commandpanels.api.Panel;
|
|||||||
import me.rockyhawk.commandpanels.classresources.ExecuteOpenVoids;
|
import me.rockyhawk.commandpanels.classresources.ExecuteOpenVoids;
|
||||||
import me.rockyhawk.commandpanels.classresources.GetCustomHeads;
|
import me.rockyhawk.commandpanels.classresources.GetCustomHeads;
|
||||||
import me.rockyhawk.commandpanels.classresources.ItemCreation;
|
import me.rockyhawk.commandpanels.classresources.ItemCreation;
|
||||||
|
import me.rockyhawk.commandpanels.classresources.placeholders.expansion.CpPlaceholderExpansion;
|
||||||
|
import me.rockyhawk.commandpanels.completetabs.DataTabComplete;
|
||||||
|
import me.rockyhawk.commandpanels.completetabs.ImportTabComplete;
|
||||||
import me.rockyhawk.commandpanels.ingameeditor.OpenEditorGuis;
|
import me.rockyhawk.commandpanels.ingameeditor.OpenEditorGuis;
|
||||||
import me.rockyhawk.commandpanels.classresources.item_fall.ItemFallManager;
|
import me.rockyhawk.commandpanels.classresources.item_fall.ItemFallManager;
|
||||||
import me.rockyhawk.commandpanels.classresources.placeholders.CreateText;
|
import me.rockyhawk.commandpanels.classresources.placeholders.CreateText;
|
||||||
@ -147,13 +150,20 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
new Metrics(this);
|
new Metrics(this);
|
||||||
Objects.requireNonNull(this.getCommand("commandpanel")).setExecutor(new Commandpanel(this));
|
Objects.requireNonNull(this.getCommand("commandpanel")).setExecutor(new Commandpanel(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanel")).setTabCompleter(new CpTabComplete(this));
|
Objects.requireNonNull(this.getCommand("commandpanel")).setTabCompleter(new CpTabComplete(this));
|
||||||
|
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelgenerate")).setTabCompleter(new TabCompleteGenerate(this));
|
Objects.requireNonNull(this.getCommand("commandpanelgenerate")).setTabCompleter(new TabCompleteGenerate(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelgenerate")).setExecutor(new Commandpanelsgenerate(this));
|
Objects.requireNonNull(this.getCommand("commandpanelgenerate")).setExecutor(new Commandpanelsgenerate(this));
|
||||||
|
|
||||||
|
Objects.requireNonNull(this.getCommand("commandpaneldata")).setTabCompleter(new DataTabComplete(this));
|
||||||
|
Objects.requireNonNull(this.getCommand("commandpaneldata")).setExecutor(new Commandpanelsdata(this));
|
||||||
|
|
||||||
|
Objects.requireNonNull(this.getCommand("commandpanelimport")).setExecutor(new CommandPanelImport(this));
|
||||||
|
Objects.requireNonNull(this.getCommand("commandpanelimport")).setTabCompleter(new ImportTabComplete(this));
|
||||||
|
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelreload")).setExecutor(new Commandpanelsreload(this));
|
Objects.requireNonNull(this.getCommand("commandpanelreload")).setExecutor(new Commandpanelsreload(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpaneldebug")).setExecutor(new Commandpanelsdebug(this));
|
Objects.requireNonNull(this.getCommand("commandpaneldebug")).setExecutor(new Commandpanelsdebug(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(this));
|
Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanellist")).setExecutor(new Commandpanelslist(this));
|
Objects.requireNonNull(this.getCommand("commandpanellist")).setExecutor(new Commandpanelslist(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelimport")).setExecutor(new CommandPanelImport(this));
|
|
||||||
this.getServer().getPluginManager().registerEvents(new Utils(this), this);
|
this.getServer().getPluginManager().registerEvents(new Utils(this), this);
|
||||||
this.getServer().getPluginManager().registerEvents(updater, this);
|
this.getServer().getPluginManager().registerEvents(updater, this);
|
||||||
this.getServer().getPluginManager().registerEvents(inventorySaver, this);
|
this.getServer().getPluginManager().registerEvents(inventorySaver, this);
|
||||||
@ -163,6 +173,11 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
this.getServer().getPluginManager().registerEvents(new ItemFallManager(this), this);
|
this.getServer().getPluginManager().registerEvents(new ItemFallManager(this), this);
|
||||||
this.getServer().getPluginManager().registerEvents(new OpenOnJoin(this), this);
|
this.getServer().getPluginManager().registerEvents(new OpenOnJoin(this), this);
|
||||||
|
|
||||||
|
//load in PlaceholderAPI Expansion
|
||||||
|
if (this.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
|
new CpPlaceholderExpansion(this).register();
|
||||||
|
}
|
||||||
|
|
||||||
//load in all built in command tags
|
//load in all built in command tags
|
||||||
commandTags.registerBuiltInTags();
|
commandTags.registerBuiltInTags();
|
||||||
|
|
||||||
@ -432,12 +447,12 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
if (p.hasPermission("commandpanel.import")) {
|
if (p.hasPermission("commandpanel.import")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpi [file name] [URL] " + ChatColor.WHITE + "Downloads a panel from a raw link online.");
|
p.sendMessage(ChatColor.GOLD + "/cpi [file name] [URL] " + ChatColor.WHITE + "Downloads a panel from a raw link online.");
|
||||||
}
|
}
|
||||||
if (p.hasPermission("commandpanel.edit")) {
|
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpe [panel] " + ChatColor.WHITE + "Edit a panel with the Panel Editor.");
|
|
||||||
}
|
|
||||||
if (p.hasPermission("commandpanel.list")) {
|
if (p.hasPermission("commandpanel.list")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpl " + ChatColor.WHITE + "Lists the currently loaded panels.");
|
p.sendMessage(ChatColor.GOLD + "/cpl " + ChatColor.WHITE + "Lists the currently loaded panels.");
|
||||||
}
|
}
|
||||||
|
if (p.hasPermission("commandpanel.data")) {
|
||||||
|
p.sendMessage(ChatColor.GOLD + "/cpdata " + ChatColor.WHITE + "Change panel data for a user.");
|
||||||
|
}
|
||||||
if (p.hasPermission("commandpanel.debug")) {
|
if (p.hasPermission("commandpanel.debug")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpd " + ChatColor.WHITE + "Enable and Disable debug mode globally.");
|
p.sendMessage(ChatColor.GOLD + "/cpd " + ChatColor.WHITE + "Enable and Disable debug mode globally.");
|
||||||
}
|
}
|
||||||
@ -450,6 +465,9 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
if (p.hasPermission("commandpanel.block.list")) {
|
if (p.hasPermission("commandpanel.block.list")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpb list " + ChatColor.WHITE + "List blocks that will open panels.");
|
p.sendMessage(ChatColor.GOLD + "/cpb list " + ChatColor.WHITE + "List blocks that will open panels.");
|
||||||
}
|
}
|
||||||
|
if (p.hasPermission("commandpanel.edit")) {
|
||||||
|
p.sendMessage(ChatColor.GOLD + "/cpe [panel] " + ChatColor.WHITE + "Edit a panel with the Panel Editor.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Map<String, Color> colourCodes = new HashMap<String, Color>() {{
|
public final Map<String, Color> colourCodes = new HashMap<String, Color>() {{
|
||||||
|
@ -43,6 +43,7 @@ public class Utils implements Listener {
|
|||||||
|
|
||||||
if(e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY){
|
if(e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY){
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(e.getSlotType() == InventoryType.SlotType.OUTSIDE){
|
if(e.getSlotType() == InventoryType.SlotType.OUTSIDE){
|
||||||
|
@ -4,7 +4,6 @@ import me.rockyhawk.commandpanels.CommandPanels;
|
|||||||
import me.rockyhawk.commandpanels.classresources.placeholders.PanelPlaceholders;
|
import me.rockyhawk.commandpanels.classresources.placeholders.PanelPlaceholders;
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -3,7 +3,6 @@ package me.rockyhawk.commandpanels.classresources;
|
|||||||
import me.rockyhawk.commandpanels.CommandPanels;
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
import me.rockyhawk.commandpanels.api.Panel;
|
import me.rockyhawk.commandpanels.api.Panel;
|
||||||
import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
|
import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
|
||||||
import me.rockyhawk.commandpanels.commandtags.PaywallOutput;
|
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -14,7 +13,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class ExecuteOpenVoids {
|
public class ExecuteOpenVoids {
|
||||||
@ -25,6 +23,10 @@ public class ExecuteOpenVoids {
|
|||||||
|
|
||||||
//this is the main method to open a panel
|
//this is the main method to open a panel
|
||||||
public void openCommandPanel(CommandSender sender, Player p, Panel panel, PanelPosition position, boolean openForOtherUser){
|
public void openCommandPanel(CommandSender sender, Player p, Panel panel, PanelPosition position, boolean openForOtherUser){
|
||||||
|
if(p == null){
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Player not found."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(p.isSleeping()){
|
if(p.isSleeping()){
|
||||||
//avoid plugin glitches when sleeping
|
//avoid plugin glitches when sleeping
|
||||||
return;
|
return;
|
||||||
|
@ -68,8 +68,9 @@ public class Placeholders {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//this requires the placeholder to already be identified
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private String cpPlaceholders(Panel panel, PanelPosition position, Player p, String identifier){
|
public String cpPlaceholders(Panel panel, PanelPosition position, Player p, String identifier){
|
||||||
|
|
||||||
//replace nodes with PlaceHolders
|
//replace nodes with PlaceHolders
|
||||||
switch(identifier){
|
switch(identifier){
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package me.rockyhawk.commandpanels.classresources.placeholders.expansion;
|
||||||
|
|
||||||
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class CpPlaceholderExpansion extends PlaceholderExpansion {
|
||||||
|
|
||||||
|
private final CommandPanels plugin;
|
||||||
|
|
||||||
|
public CpPlaceholderExpansion(CommandPanels plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAuthor() {
|
||||||
|
return "RockyHawk";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIdentifier() {
|
||||||
|
return "commandpanels";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getVersion() {
|
||||||
|
return "1.0.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean persist() {
|
||||||
|
return true; // This is required or else PlaceholderAPI will unregister the Expansion on reload
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
external use only, not to be used for example inside a panel
|
||||||
|
usage: %commandpanels_<placeholder>%
|
||||||
|
so for example %cp-data-test% instead you would do %commandpanels_data-test%
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String onRequest(OfflinePlayer player, @NotNull String identifier) {
|
||||||
|
return plugin.placeholders.cpPlaceholders(null, PanelPosition.Top, (Player)player, identifier);
|
||||||
|
}
|
||||||
|
}
|
@ -39,7 +39,7 @@ public class Commandpanel implements CommandExecutor {
|
|||||||
boolean disableCommand = false;
|
boolean disableCommand = false;
|
||||||
if(panel.getConfig().contains("panelType")) {
|
if(panel.getConfig().contains("panelType")) {
|
||||||
if (panel.getConfig().getStringList("panelType").contains("nocommand")) {
|
if (panel.getConfig().getStringList("panelType").contains("nocommand")) {
|
||||||
//do not allow command with noCommand
|
//do not allow command with noCommand, console is an exception
|
||||||
disableCommand = true;
|
disableCommand = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,9 +49,7 @@ public class Commandpanel implements CommandExecutor {
|
|||||||
//do console command command
|
//do console command command
|
||||||
if(args.length == 2){
|
if(args.length == 2){
|
||||||
if(!args[1].equals("item")){
|
if(!args[1].equals("item")){
|
||||||
if(!disableCommand) {
|
|
||||||
plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panel.copy(), PanelPosition.Top, true);
|
plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panel.copy(), PanelPosition.Top, true);
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cp <panel> [item] [player]"));
|
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cp <panel> [item] [player]"));
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
package me.rockyhawk.commandpanels.commands;
|
||||||
|
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
|
public class Commandpanelsdata implements CommandExecutor {
|
||||||
|
CommandPanels plugin;
|
||||||
|
public Commandpanelsdata(CommandPanels pl) { this.plugin = pl; }
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
|
if (sender.hasPermission("commandpanel.data")) {
|
||||||
|
if(args.length == 2){
|
||||||
|
//for the clear command
|
||||||
|
if(args[0].equals("clear")){
|
||||||
|
plugin.panelData.clearData(plugin.panelData.getOffline(args[1]));
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag
|
||||||
|
+ ChatColor.GREEN + "Cleared all data for "
|
||||||
|
+ ChatColor.WHITE + args[1]));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}else if (args.length == 3){
|
||||||
|
//for the remove command
|
||||||
|
if(args[0].equals("remove")) {
|
||||||
|
plugin.panelData.delUserData(plugin.panelData.getOffline(args[1]), args[2]);
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag
|
||||||
|
+ ChatColor.GREEN + "Removed "
|
||||||
|
+ ChatColor.WHITE + args[2]
|
||||||
|
+ ChatColor.GREEN + " from "
|
||||||
|
+ ChatColor.WHITE + args[1]));
|
||||||
|
return true;
|
||||||
|
}else if(args[0].equals("get")){
|
||||||
|
//for the get command
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag
|
||||||
|
+ ChatColor.GREEN + "Value of data is "
|
||||||
|
+ ChatColor.WHITE + plugin.panelData.getUserData(plugin.panelData.getOffline(args[1]), args[2])));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}else if (args.length == 4){
|
||||||
|
if(args[0].equals("set")){
|
||||||
|
//for set command
|
||||||
|
plugin.panelData.setUserData(plugin.panelData.getOffline(args[1]), args[2],args[3],true);
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag
|
||||||
|
+ ChatColor.GREEN + "Set "
|
||||||
|
+ ChatColor.WHITE + args[2]
|
||||||
|
+ ChatColor.GREEN + " to "
|
||||||
|
+ ChatColor.WHITE + args[3]));
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
//for add command
|
||||||
|
plugin.panelData.setUserData(plugin.panelData.getOffline(args[1]), args[2],args[3],false);
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag
|
||||||
|
+ ChatColor.GREEN + "Set "
|
||||||
|
+ ChatColor.WHITE + args[2]
|
||||||
|
+ ChatColor.GREEN + " to "
|
||||||
|
+ ChatColor.WHITE + args[3])
|
||||||
|
+ ChatColor.GREEN + " if it did not exist already");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cpdata <set:add:get:remove:clear> <player> <data> [value]"));
|
||||||
|
}else{
|
||||||
|
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms")));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -14,7 +14,6 @@ public class Commandpanelsdebug implements CommandExecutor {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
if (label.equalsIgnoreCase("cpd") || label.equalsIgnoreCase("commandpaneldebug") || label.equalsIgnoreCase("cpaneld")) {
|
|
||||||
if (sender.hasPermission("commandpanel.debug")) {
|
if (sender.hasPermission("commandpanel.debug")) {
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
//command /cpd
|
//command /cpd
|
||||||
@ -40,7 +39,4 @@ public class Commandpanelsdebug implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cpd"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -286,11 +286,20 @@ public class CommandTags {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "xp-paywall=": {
|
case "xp-paywall=": {
|
||||||
//if player uses xp-paywall= [price]
|
//if player uses xp-paywall= <price> <levels:points>
|
||||||
try {
|
try {
|
||||||
int balance = p.getLevel();
|
int balance;
|
||||||
|
if(command.split("\\s")[2].startsWith("level")){
|
||||||
|
balance = p.getLevel();
|
||||||
|
}else{
|
||||||
|
balance = getPlayerExp(p);
|
||||||
|
}
|
||||||
if (balance >= Integer.parseInt(command.split("\\s")[1])) {
|
if (balance >= Integer.parseInt(command.split("\\s")[1])) {
|
||||||
|
if(command.split("\\s")[2].startsWith("level")){
|
||||||
p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1]));
|
p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1]));
|
||||||
|
}else{
|
||||||
|
removePlayerExp(p,Integer.parseInt(command.split("\\s")[1]));
|
||||||
|
}
|
||||||
//if the message is empty don't send
|
//if the message is empty don't send
|
||||||
plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.xp.success")).replaceAll("%cp-args%", command.split("\\s")[1]));
|
plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.xp.success")).replaceAll("%cp-args%", command.split("\\s")[1]));
|
||||||
return PaywallOutput.Passed;
|
return PaywallOutput.Passed;
|
||||||
@ -328,4 +337,58 @@ public class CommandTags {
|
|||||||
}
|
}
|
||||||
return PaywallOutput.NotApplicable;
|
return PaywallOutput.NotApplicable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Experience math is a bit doggy doo doo so these will help to calculate values
|
||||||
|
// Calculate total experience up to a level
|
||||||
|
private int getExpAtLevel(int level){
|
||||||
|
if(level <= 16){
|
||||||
|
return (int) (Math.pow(level,2) + 6*level);
|
||||||
|
} else if(level <= 31){
|
||||||
|
return (int) (2.5*Math.pow(level,2) - 40.5*level + 360.0);
|
||||||
|
} else {
|
||||||
|
return (int) (4.5*Math.pow(level,2) - 162.5*level + 2220.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate amount of EXP needed to level up
|
||||||
|
private int getExpToLevelUp(int level){
|
||||||
|
if(level <= 15){
|
||||||
|
return 2*level+7;
|
||||||
|
} else if(level <= 30){
|
||||||
|
return 5*level-38;
|
||||||
|
} else {
|
||||||
|
return 9*level-158;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate player's current EXP amount
|
||||||
|
private int getPlayerExp(Player player){
|
||||||
|
int exp = 0;
|
||||||
|
int level = player.getLevel();
|
||||||
|
|
||||||
|
// Get the amount of XP in past levels
|
||||||
|
exp += getExpAtLevel(level);
|
||||||
|
|
||||||
|
// Get amount of XP towards next level
|
||||||
|
exp += Math.round(getExpToLevelUp(level) * player.getExp());
|
||||||
|
|
||||||
|
return exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Take EXP
|
||||||
|
private int removePlayerExp(Player player, int exp){
|
||||||
|
// Get player's current exp
|
||||||
|
int currentExp = getPlayerExp(player);
|
||||||
|
|
||||||
|
// Reset player's current exp to 0
|
||||||
|
player.setExp(0);
|
||||||
|
player.setLevel(0);
|
||||||
|
|
||||||
|
// Give the player their exp back, with the difference
|
||||||
|
int newExp = currentExp - exp;
|
||||||
|
player.giveExp(newExp);
|
||||||
|
|
||||||
|
// Return the player's new exp amount
|
||||||
|
return newExp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,9 @@ package me.rockyhawk.commandpanels.commandtags.tags.other;
|
|||||||
|
|
||||||
import me.rockyhawk.commandpanels.CommandPanels;
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
|
import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class DataTags implements Listener {
|
public class DataTags implements Listener {
|
||||||
CommandPanels plugin;
|
CommandPanels plugin;
|
||||||
public DataTags(CommandPanels pl) {
|
public DataTags(CommandPanels pl) {
|
||||||
@ -19,7 +16,7 @@ public class DataTags implements Listener {
|
|||||||
if(e.name.equalsIgnoreCase("set-data=")){
|
if(e.name.equalsIgnoreCase("set-data=")){
|
||||||
e.commandTagUsed();
|
e.commandTagUsed();
|
||||||
if(e.args.length == 3){
|
if(e.args.length == 3){
|
||||||
plugin.panelData.setUserData(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),true);
|
plugin.panelData.setUserData(plugin.panelData.getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//this will overwrite data. set-data= [data point] [data value] [optional player]
|
//this will overwrite data. set-data= [data point] [data value] [optional player]
|
||||||
@ -29,7 +26,7 @@ public class DataTags implements Listener {
|
|||||||
if(e.name.equalsIgnoreCase("add-data=")){
|
if(e.name.equalsIgnoreCase("add-data=")){
|
||||||
e.commandTagUsed();
|
e.commandTagUsed();
|
||||||
if(e.args.length == 3){
|
if(e.args.length == 3){
|
||||||
plugin.panelData.setUserData(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),false);
|
plugin.panelData.setUserData(plugin.panelData.getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//this will not overwrite existing data. add-data= [data point] [data value] [optional player]
|
//this will not overwrite existing data. add-data= [data point] [data value] [optional player]
|
||||||
@ -39,7 +36,7 @@ public class DataTags implements Listener {
|
|||||||
if(e.name.equalsIgnoreCase("math-data=")){
|
if(e.name.equalsIgnoreCase("math-data=")){
|
||||||
e.commandTagUsed();
|
e.commandTagUsed();
|
||||||
if(e.args.length == 3){
|
if(e.args.length == 3){
|
||||||
plugin.panelData.doDataMath(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]));
|
plugin.panelData.doDataMath(plugin.panelData.getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//only works if data is number, goes math-data= [data point] [operator:number] [optional player] eg, math-data= -1 OR /3
|
//only works if data is number, goes math-data= [data point] [operator:number] [optional player] eg, math-data= -1 OR /3
|
||||||
@ -55,17 +52,11 @@ public class DataTags implements Listener {
|
|||||||
if(e.name.equalsIgnoreCase("del-data=")){
|
if(e.name.equalsIgnoreCase("del-data=")){
|
||||||
e.commandTagUsed();
|
e.commandTagUsed();
|
||||||
if(e.args.length == 3){
|
if(e.args.length == 3){
|
||||||
plugin.panelData.delUserData(getOffline(e.args[1]),e.args[0]);
|
plugin.panelData.delUserData(plugin.panelData.getOffline(e.args[1]),e.args[0]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//this will remove data. del-data= [data point] [optional player]
|
//this will remove data. del-data= [data point] [optional player]
|
||||||
plugin.panelData.delUserData(e.p.getUniqueId(),e.args[0]);
|
plugin.panelData.delUserData(e.p.getUniqueId(),e.args[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private UUID getOffline(String playerName){
|
|
||||||
//making this a separate function as it is long and deprecated
|
|
||||||
return Bukkit.getOfflinePlayer(playerName).getUniqueId();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -29,11 +29,10 @@ public class CpTabComplete implements TabCompleter {
|
|||||||
if (sender.hasPermission("commandpanel.panel." + panel.getConfig().getString("perm"))) {
|
if (sender.hasPermission("commandpanel.panel." + panel.getConfig().getString("perm"))) {
|
||||||
if(panel.getConfig().contains("panelType")) {
|
if(panel.getConfig().contains("panelType")) {
|
||||||
if (panel.getConfig().getStringList("panelType").contains("nocommand")) {
|
if (panel.getConfig().getStringList("panelType").contains("nocommand")) {
|
||||||
//do not allow command with noCommand
|
//do not allow command with nocommand
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plugin.panelPerms.isPanelWorldEnabled(p,panel.getConfig())){
|
if(plugin.panelPerms.isPanelWorldEnabled(p,panel.getConfig())){
|
||||||
apanels.add(panel.getName());
|
apanels.add(panel.getName());
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
package me.rockyhawk.commandpanels.completetabs;
|
||||||
|
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class DataTabComplete implements TabCompleter {
|
||||||
|
CommandPanels plugin;
|
||||||
|
public DataTabComplete(CommandPanels pl) { this.plugin = pl; }
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
|
if(sender.hasPermission("commandpanel.data")) {
|
||||||
|
ArrayList<String> output = new ArrayList<>();
|
||||||
|
if(args.length == 1){
|
||||||
|
output.add("set");
|
||||||
|
output.add("add");
|
||||||
|
output.add("get");
|
||||||
|
output.add("remove");
|
||||||
|
output.add("clear");
|
||||||
|
}else if(args.length == 2){
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!p.getName().startsWith(args[1])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
output.add(p.getName());
|
||||||
|
}
|
||||||
|
}else if(args.length == 3){
|
||||||
|
//the clear function is here as it is the only subcommand with 3 args
|
||||||
|
try {
|
||||||
|
return new ArrayList<>(plugin.panelData.dataConfig.getConfigurationSection("playerData." + plugin.panelData.getOffline(args[1])).getKeys(false));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package me.rockyhawk.commandpanels.completetabs;
|
||||||
|
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import me.rockyhawk.commandpanels.api.Panel;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ImportTabComplete implements TabCompleter {
|
||||||
|
CommandPanels plugin;
|
||||||
|
public ImportTabComplete(CommandPanels pl) { this.plugin = pl; }
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
|
if(sender.hasPermission("commandpanel.import")) {
|
||||||
|
ArrayList<String> output = new ArrayList<>();
|
||||||
|
if(args.length == 1){
|
||||||
|
for(Panel panel : plugin.panelList){
|
||||||
|
output.add(panel.getFile().getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package me.rockyhawk.commandpanels.datamanager;
|
package me.rockyhawk.commandpanels.datamanager;
|
||||||
|
|
||||||
import me.rockyhawk.commandpanels.CommandPanels;
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -104,4 +105,10 @@ public class PanelDataLoader {
|
|||||||
|
|
||||||
dataConfig.set("playerData." + playerUUID + "." + dataPoint, output.toPlainString());
|
dataConfig.set("playerData." + playerUUID + "." + dataPoint, output.toPlainString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public UUID getOffline(String playerName){
|
||||||
|
//making this a separate function as it is long and deprecated
|
||||||
|
return Bukkit.getOfflinePlayer(playerName).getUniqueId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,29 @@
|
|||||||
package me.rockyhawk.commandpanels.playerinventoryhandler;
|
package me.rockyhawk.commandpanels.playerinventoryhandler;
|
||||||
|
|
||||||
import me.rockyhawk.commandpanels.CommandPanels;
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
import me.rockyhawk.commandpanels.api.Panel;
|
|
||||||
import me.rockyhawk.commandpanels.api.PanelClosedEvent;
|
|
||||||
import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
|
import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
|
||||||
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class InventorySaver implements Listener {
|
public class InventorySaver implements Listener {
|
||||||
|
public YamlConfiguration inventoryConfig;
|
||||||
|
|
||||||
CommandPanels plugin;
|
CommandPanels plugin;
|
||||||
public InventorySaver(CommandPanels pl) {
|
public InventorySaver(CommandPanels pl) {
|
||||||
this.plugin = pl;
|
this.plugin = pl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public YamlConfiguration inventoryConfig;
|
|
||||||
|
|
||||||
public void saveInventoryFile(){
|
public void saveInventoryFile(){
|
||||||
try {
|
try {
|
||||||
inventoryConfig.save(plugin.getDataFolder() + File.separator + "inventories.yml");
|
inventoryConfig.save(plugin.getDataFolder() + File.separator + "inventories.yml");
|
||||||
|
@ -15,16 +15,16 @@ import java.util.Objects;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class Updater implements Listener {
|
public class Updater implements Listener {
|
||||||
CommandPanels plugin;
|
|
||||||
public Updater(CommandPanels pl) {
|
|
||||||
this.plugin = pl;
|
|
||||||
}
|
|
||||||
|
|
||||||
//if this is set to something, it will download that version on restart
|
//if this is set to something, it will download that version on restart
|
||||||
//can be a version number, 'latest' or 'cancel'
|
//can be a version number, 'latest' or 'cancel'
|
||||||
public String downloadVersionManually = null;
|
public String downloadVersionManually = null;
|
||||||
public String catchedLatestVersion = "null";
|
public String catchedLatestVersion = "null";
|
||||||
|
|
||||||
|
CommandPanels plugin;
|
||||||
|
public Updater(CommandPanels pl) {
|
||||||
|
this.plugin = pl;
|
||||||
|
}
|
||||||
|
|
||||||
//send update message when the player joins the game with the permission
|
//send update message when the player joins the game with the permission
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void joinGame(PlayerJoinEvent e){
|
public void joinGame(PlayerJoinEvent e){
|
||||||
|
Loading…
Reference in New Issue
Block a user