From ca5ac7151c18334a14d34d765dbc1f865c7e79cc Mon Sep 17 00:00:00 2001 From: rockyhawk64 Date: Tue, 10 Aug 2021 16:32:00 +1000 Subject: [PATCH] 3.16.3.0 --- ...{MMOItems_6_5_1.xml => MMOItems_6_6_0.xml} | 4 +- ...thicLib_1_0_16.xml => MythicLib_1_1_1.xml} | 4 +- Command Panels.iml | 4 +- resource/config.yml | 6 +- resource/plugin.yml | 10 ++- .../commandpanels/CommandPanels.java | 26 ++++++- src/me/rockyhawk/commandpanels/Utils.java | 1 + src/me/rockyhawk/commandpanels/api/Panel.java | 1 - .../classresources/ExecuteOpenVoids.java | 6 +- .../placeholders/Placeholders.java | 3 +- .../expansion/CpPlaceholderExpansion.java | 47 +++++++++++ .../commandpanels/commands/Commandpanel.java | 6 +- .../commands/Commandpanelsdata.java | 78 +++++++++++++++++++ .../commands/Commandpanelsdebug.java | 38 ++++----- .../commandtags/CommandTags.java | 69 +++++++++++++++- .../commandtags/tags/other/DataTags.java | 14 +--- .../completetabs/CpTabComplete.java | 3 +- .../completetabs/DataTabComplete.java | 49 ++++++++++++ .../completetabs/ImportTabComplete.java | 31 ++++++++ .../datamanager/PanelDataLoader.java | 7 ++ .../InventorySaver.java | 14 +--- .../commandpanels/updater/Updater.java | 10 +-- 22 files changed, 354 insertions(+), 77 deletions(-) rename .idea/libraries/{MMOItems_6_5_1.xml => MMOItems_6_6_0.xml} (72%) rename .idea/libraries/{MythicLib_1_0_16.xml => MythicLib_1_1_1.xml} (71%) create mode 100644 src/me/rockyhawk/commandpanels/classresources/placeholders/expansion/CpPlaceholderExpansion.java create mode 100644 src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java create mode 100644 src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java create mode 100644 src/me/rockyhawk/commandpanels/completetabs/ImportTabComplete.java diff --git a/.idea/libraries/MMOItems_6_5_1.xml b/.idea/libraries/MMOItems_6_6_0.xml similarity index 72% rename from .idea/libraries/MMOItems_6_5_1.xml rename to .idea/libraries/MMOItems_6_6_0.xml index 3b00529..192dd6a 100644 --- a/.idea/libraries/MMOItems_6_5_1.xml +++ b/.idea/libraries/MMOItems_6_6_0.xml @@ -1,7 +1,7 @@ - + - + diff --git a/.idea/libraries/MythicLib_1_0_16.xml b/.idea/libraries/MythicLib_1_1_1.xml similarity index 71% rename from .idea/libraries/MythicLib_1_0_16.xml rename to .idea/libraries/MythicLib_1_1_1.xml index f50a43c..8baa9a2 100644 --- a/.idea/libraries/MythicLib_1_0_16.xml +++ b/.idea/libraries/MythicLib_1_1_1.xml @@ -1,7 +1,7 @@ - + - + diff --git a/Command Panels.iml b/Command Panels.iml index c45f53a..a35a8bf 100644 --- a/Command Panels.iml +++ b/Command Panels.iml @@ -12,12 +12,12 @@ - - + + \ No newline at end of file diff --git a/resource/config.yml b/resource/config.yml index db5a65d..47e8c8e 100644 --- a/resource/config.yml +++ b/resource/config.yml @@ -1,6 +1,6 @@ # |------------------------------------------------------------------------ # | CommandPanels Config File -# | By RockyHawk v5.1 +# | By RockyHawk v5.2 # | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/ # | # | auto-update and minor-updates-only is HEAVILY RECOMMENDED @@ -60,5 +60,5 @@ purchase: success: '&aSuccessfully Sold %cp-args%.' failure: '&cInsufficient Items!' xp: - success: '&aSuccessfully Bought For %cp-args% xp level.' - failure: '&cInsufficient xp levels!' + success: '&aSuccessfully Bought For %cp-args% Experience.' + failure: '&cInsufficient Experience!' diff --git a/resource/plugin.yml b/resource/plugin.yml index acabcaf..fb2e3d0 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.16.2.5 +version: 3.16.3.0 main: me.rockyhawk.commandpanels.CommandPanels name: CommandPanels author: RockyHawk @@ -14,6 +14,10 @@ commands: description: Reloads plugin config. usage: /commandpanelreload aliases: [cpr, cpanelr] + commandpaneldata: + description: Change data values for players + usage: /commandpaneldata + aliases: [cpdata] commandpaneldebug: description: Enable and Disable debug mode globally usage: /commandpaneldebug @@ -67,8 +71,8 @@ permissions: default: true commandpanel.update: default: op - commandpanel.editor: - default: true + commandpanel.data: + default: op commandpanel.edit: default: op commandpanel.list: diff --git a/src/me/rockyhawk/commandpanels/CommandPanels.java b/src/me/rockyhawk/commandpanels/CommandPanels.java index b2b63ca..7338540 100644 --- a/src/me/rockyhawk/commandpanels/CommandPanels.java +++ b/src/me/rockyhawk/commandpanels/CommandPanels.java @@ -6,6 +6,9 @@ import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.classresources.ExecuteOpenVoids; import me.rockyhawk.commandpanels.classresources.GetCustomHeads; 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.classresources.item_fall.ItemFallManager; import me.rockyhawk.commandpanels.classresources.placeholders.CreateText; @@ -147,13 +150,20 @@ public class CommandPanels extends JavaPlugin{ new Metrics(this); Objects.requireNonNull(this.getCommand("commandpanel")).setExecutor(new Commandpanel(this)); Objects.requireNonNull(this.getCommand("commandpanel")).setTabCompleter(new CpTabComplete(this)); + Objects.requireNonNull(this.getCommand("commandpanelgenerate")).setTabCompleter(new TabCompleteGenerate(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("commandpaneldebug")).setExecutor(new Commandpanelsdebug(this)); Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(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(updater, 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 OpenOnJoin(this), this); + //load in PlaceholderAPI Expansion + if (this.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { + new CpPlaceholderExpansion(this).register(); + } + //load in all built in command tags commandTags.registerBuiltInTags(); @@ -432,12 +447,12 @@ public class CommandPanels extends JavaPlugin{ if (p.hasPermission("commandpanel.import")) { 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")) { 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")) { 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")) { 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 colourCodes = new HashMap() {{ diff --git a/src/me/rockyhawk/commandpanels/Utils.java b/src/me/rockyhawk/commandpanels/Utils.java index 919cd9a..c4ad32a 100644 --- a/src/me/rockyhawk/commandpanels/Utils.java +++ b/src/me/rockyhawk/commandpanels/Utils.java @@ -43,6 +43,7 @@ public class Utils implements Listener { if(e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY){ e.setCancelled(true); + return; } if(e.getSlotType() == InventoryType.SlotType.OUTSIDE){ diff --git a/src/me/rockyhawk/commandpanels/api/Panel.java b/src/me/rockyhawk/commandpanels/api/Panel.java index e6aedcf..49e0bb4 100644 --- a/src/me/rockyhawk/commandpanels/api/Panel.java +++ b/src/me/rockyhawk/commandpanels/api/Panel.java @@ -4,7 +4,6 @@ import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.classresources.placeholders.PanelPlaceholders; import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType; import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition; -import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; diff --git a/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java b/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java index 0e7d106..cdf125d 100644 --- a/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java +++ b/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java @@ -3,7 +3,6 @@ package me.rockyhawk.commandpanels.classresources; import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.PanelOpenedEvent; -import me.rockyhawk.commandpanels.commandtags.PaywallOutput; import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType; import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition; import org.bukkit.Bukkit; @@ -14,7 +13,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; -import java.util.List; import java.util.Objects; public class ExecuteOpenVoids { @@ -25,6 +23,10 @@ public class ExecuteOpenVoids { //this is the main method to open a panel 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()){ //avoid plugin glitches when sleeping return; diff --git a/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java b/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java index 4ed3f1f..b0bf753 100644 --- a/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java +++ b/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java @@ -68,8 +68,9 @@ public class Placeholders { } } + //this requires the placeholder to already be identified @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 switch(identifier){ diff --git a/src/me/rockyhawk/commandpanels/classresources/placeholders/expansion/CpPlaceholderExpansion.java b/src/me/rockyhawk/commandpanels/classresources/placeholders/expansion/CpPlaceholderExpansion.java new file mode 100644 index 0000000..c908e44 --- /dev/null +++ b/src/me/rockyhawk/commandpanels/classresources/placeholders/expansion/CpPlaceholderExpansion.java @@ -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_% + 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); + } +} diff --git a/src/me/rockyhawk/commandpanels/commands/Commandpanel.java b/src/me/rockyhawk/commandpanels/commands/Commandpanel.java index 4289234..db4426b 100644 --- a/src/me/rockyhawk/commandpanels/commands/Commandpanel.java +++ b/src/me/rockyhawk/commandpanels/commands/Commandpanel.java @@ -39,7 +39,7 @@ public class Commandpanel implements CommandExecutor { boolean disableCommand = false; if(panel.getConfig().contains("panelType")) { 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; } } @@ -49,9 +49,7 @@ public class Commandpanel implements CommandExecutor { //do console command command if(args.length == 2){ 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{ sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cp [item] [player]")); } diff --git a/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java b/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java new file mode 100644 index 0000000..c231499 --- /dev/null +++ b/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java @@ -0,0 +1,78 @@ +package me.rockyhawk.commandpanels.commands; + +import me.rockyhawk.commandpanels.CommandPanels; +import me.rockyhawk.commandpanels.commandtags.CommandTagEvent; +import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import java.util.UUID; + +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 [value]")); + }else{ + sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms"))); + } + return true; + } +} \ No newline at end of file diff --git a/src/me/rockyhawk/commandpanels/commands/Commandpanelsdebug.java b/src/me/rockyhawk/commandpanels/commands/Commandpanelsdebug.java index a4cdb90..a22887a 100644 --- a/src/me/rockyhawk/commandpanels/commands/Commandpanelsdebug.java +++ b/src/me/rockyhawk/commandpanels/commands/Commandpanelsdebug.java @@ -14,33 +14,29 @@ public class Commandpanelsdebug implements CommandExecutor { @EventHandler 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 (args.length == 0) { - //command /cpd - if(!(sender instanceof Player)) { - plugin.debug.consoleDebug = !plugin.debug.consoleDebug; - sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.GREEN + "Global Debug Mode: " + plugin.debug.consoleDebug)); - return true; - } + if (sender.hasPermission("commandpanel.debug")) { + if (args.length == 0) { + //command /cpd + if(!(sender instanceof Player)) { + plugin.debug.consoleDebug = !plugin.debug.consoleDebug; + sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.GREEN + "Global Debug Mode: " + plugin.debug.consoleDebug)); + return true; + } - Player p = (Player)sender; - if(plugin.debug.isEnabled(p)){ - plugin.debug.debugSet.remove(p); - sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.GREEN + "Personal Debug Mode Disabled!")); - }else{ - plugin.debug.debugSet.add(p); - sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.GREEN + "Personal Debug Mode Enabled!")); - } + Player p = (Player)sender; + if(plugin.debug.isEnabled(p)){ + plugin.debug.debugSet.remove(p); + sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.GREEN + "Personal Debug Mode Disabled!")); }else{ - sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cpd")); + plugin.debug.debugSet.add(p); + sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.GREEN + "Personal Debug Mode Enabled!")); } }else{ - sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms"))); + sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cpd")); } - return true; + }else{ + sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms"))); } - sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cpd")); return true; } } \ No newline at end of file diff --git a/src/me/rockyhawk/commandpanels/commandtags/CommandTags.java b/src/me/rockyhawk/commandpanels/commandtags/CommandTags.java index c702485..70eae23 100644 --- a/src/me/rockyhawk/commandpanels/commandtags/CommandTags.java +++ b/src/me/rockyhawk/commandpanels/commandtags/CommandTags.java @@ -286,11 +286,20 @@ public class CommandTags { } } case "xp-paywall=": { - //if player uses xp-paywall= [price] + //if player uses xp-paywall= 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])) { - p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1])); + if(command.split("\\s")[2].startsWith("level")){ + 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 plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.xp.success")).replaceAll("%cp-args%", command.split("\\s")[1])); return PaywallOutput.Passed; @@ -307,4 +316,58 @@ public class CommandTags { } 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; + } } diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java index 78edda6..d7549c1 100644 --- a/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java +++ b/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java @@ -19,7 +19,7 @@ public class DataTags implements Listener { if(e.name.equalsIgnoreCase("set-data=")){ e.commandTagUsed(); 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; } //this will overwrite data. set-data= [data point] [data value] [optional player] @@ -29,7 +29,7 @@ public class DataTags implements Listener { if(e.name.equalsIgnoreCase("add-data=")){ e.commandTagUsed(); 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; } //this will not overwrite existing data. add-data= [data point] [data value] [optional player] @@ -39,7 +39,7 @@ public class DataTags implements Listener { if(e.name.equalsIgnoreCase("math-data=")){ e.commandTagUsed(); 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; } //only works if data is number, goes math-data= [data point] [operator:number] [optional player] eg, math-data= -1 OR /3 @@ -55,17 +55,11 @@ public class DataTags implements Listener { if(e.name.equalsIgnoreCase("del-data=")){ e.commandTagUsed(); 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; } //this will remove data. del-data= [data point] [optional player] 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(); - } } diff --git a/src/me/rockyhawk/commandpanels/completetabs/CpTabComplete.java b/src/me/rockyhawk/commandpanels/completetabs/CpTabComplete.java index 21aaef0..2025f1e 100644 --- a/src/me/rockyhawk/commandpanels/completetabs/CpTabComplete.java +++ b/src/me/rockyhawk/commandpanels/completetabs/CpTabComplete.java @@ -29,11 +29,10 @@ public class CpTabComplete implements TabCompleter { if (sender.hasPermission("commandpanel.panel." + panel.getConfig().getString("perm"))) { if(panel.getConfig().contains("panelType")) { if (panel.getConfig().getStringList("panelType").contains("nocommand")) { - //do not allow command with noCommand + //do not allow command with nocommand continue; } } - if(plugin.panelPerms.isPanelWorldEnabled(p,panel.getConfig())){ apanels.add(panel.getName()); } diff --git a/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java b/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java new file mode 100644 index 0000000..bb16a56 --- /dev/null +++ b/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java @@ -0,0 +1,49 @@ +package me.rockyhawk.commandpanels.completetabs; + +import me.rockyhawk.commandpanels.CommandPanels; +import me.rockyhawk.commandpanels.api.Panel; +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; +import java.util.stream.Collectors; + + +public class DataTabComplete implements TabCompleter { + CommandPanels plugin; + public DataTabComplete(CommandPanels pl) { this.plugin = pl; } + @Override + public List onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { + if(sender.hasPermission("commandpanel.data")) { + ArrayList 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){ + if(!args[0].equals("clear")) { + 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; + } +} \ No newline at end of file diff --git a/src/me/rockyhawk/commandpanels/completetabs/ImportTabComplete.java b/src/me/rockyhawk/commandpanels/completetabs/ImportTabComplete.java new file mode 100644 index 0000000..33a7120 --- /dev/null +++ b/src/me/rockyhawk/commandpanels/completetabs/ImportTabComplete.java @@ -0,0 +1,31 @@ +package me.rockyhawk.commandpanels.completetabs; + +import me.rockyhawk.commandpanels.CommandPanels; +import me.rockyhawk.commandpanels.api.Panel; +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 ImportTabComplete implements TabCompleter { + CommandPanels plugin; + public ImportTabComplete(CommandPanels pl) { this.plugin = pl; } + @Override + public List onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { + if(sender.hasPermission("commandpanel.import")) { + ArrayList output = new ArrayList<>(); + if(args.length == 1){ + for(Panel panel : plugin.panelList){ + output.add(panel.getFile().getName()); + } + } + return output; + } + return null; + } +} \ No newline at end of file diff --git a/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java b/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java index 9038b8c..eace18d 100644 --- a/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java +++ b/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java @@ -1,6 +1,7 @@ package me.rockyhawk.commandpanels.datamanager; import me.rockyhawk.commandpanels.CommandPanels; +import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; @@ -104,4 +105,10 @@ public class PanelDataLoader { 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(); + } } diff --git a/src/me/rockyhawk/commandpanels/playerinventoryhandler/InventorySaver.java b/src/me/rockyhawk/commandpanels/playerinventoryhandler/InventorySaver.java index 0b58646..82a741f 100644 --- a/src/me/rockyhawk/commandpanels/playerinventoryhandler/InventorySaver.java +++ b/src/me/rockyhawk/commandpanels/playerinventoryhandler/InventorySaver.java @@ -1,39 +1,29 @@ package me.rockyhawk.commandpanels.playerinventoryhandler; 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.ioclasses.legacy.MinecraftVersions; 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.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.inventory.meta.PotionMeta; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Objects; public class InventorySaver implements Listener { + public YamlConfiguration inventoryConfig; + CommandPanels plugin; public InventorySaver(CommandPanels pl) { this.plugin = pl; } - public YamlConfiguration inventoryConfig; - public void saveInventoryFile(){ try { inventoryConfig.save(plugin.getDataFolder() + File.separator + "inventories.yml"); diff --git a/src/me/rockyhawk/commandpanels/updater/Updater.java b/src/me/rockyhawk/commandpanels/updater/Updater.java index faf1424..aa3576a 100644 --- a/src/me/rockyhawk/commandpanels/updater/Updater.java +++ b/src/me/rockyhawk/commandpanels/updater/Updater.java @@ -15,16 +15,16 @@ import java.util.Objects; import java.util.logging.Level; 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 //can be a version number, 'latest' or 'cancel' public String downloadVersionManually = 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 @EventHandler public void joinGame(PlayerJoinEvent e){