From f630b180fbb2e890ab18ad690b902f089727ddc7 Mon Sep 17 00:00:00 2001 From: rockyhawk64 Date: Tue, 29 Dec 2020 19:13:54 +1100 Subject: [PATCH] v3.14.4.3 --- resource/plugin.yml | 2 +- src/me/rockyhawk/commandpanels/Utils.java | 3 +- .../classresources/CommandTags.java | 16 +++++ .../datamanager/PanelDataLoader.java | 68 +++++++++++++++++++ 4 files changed, 87 insertions(+), 2 deletions(-) diff --git a/resource/plugin.yml b/resource/plugin.yml index 406680d..0fa57fc 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.14.4.2 +version: 3.14.4.3 main: me.rockyhawk.commandpanels.CommandPanels name: CommandPanels author: RockyHawk diff --git a/src/me/rockyhawk/commandpanels/Utils.java b/src/me/rockyhawk/commandpanels/Utils.java index 69f85e6..141fe7f 100644 --- a/src/me/rockyhawk/commandpanels/Utils.java +++ b/src/me/rockyhawk/commandpanels/Utils.java @@ -4,6 +4,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; @@ -20,7 +21,7 @@ public class Utils implements Listener { //when clicked on a panel Player p = (Player)e.getWhoClicked(); ItemStack clicked = e.getCurrentItem(); - if(!plugin.openPanels.hasPanelOpen(p.getName()) || e.getSlotType() == InventoryType.SlotType.OUTSIDE){ + if(!plugin.openPanels.hasPanelOpen(p.getName()) || e.getSlotType() == InventoryType.SlotType.OUTSIDE || e.getClick() == ClickType.DOUBLE_CLICK){ return; } ConfigurationSection cf = plugin.openPanels.getOpenPanel(p.getName()); //this is the panel cf section diff --git a/src/me/rockyhawk/commandpanels/classresources/CommandTags.java b/src/me/rockyhawk/commandpanels/classresources/CommandTags.java index 521b53e..0edd32b 100644 --- a/src/me/rockyhawk/commandpanels/classresources/CommandTags.java +++ b/src/me/rockyhawk/commandpanels/classresources/CommandTags.java @@ -51,11 +51,27 @@ public class CommandTags { plugin.panelData.setUserData(p.getUniqueId(),command.split("\\s")[1],command.split("\\s")[2],false); break; } + case "math-data=":{ + //only works if data is number, goes math-data= [data point] [operator:number] eg, math-data= -1 OR /3 + plugin.panelData.doDataMath(p.getUniqueId(),command.split("\\s")[1],command.split("\\s")[2]); + break; + } + case "clear-data=":{ + //will clear all data for player clear-data= [playerName] + plugin.panelData.clearData(p.getUniqueId()); + break; + } case "del-data=":{ //this will remove data. del-data= [data point] plugin.panelData.delUserData(p.getUniqueId(),command.split("\\s")[1]); break; } + case "give-item=":{ + //this will remove data. give-item= [custom item] + ItemStack itm = plugin.itemCreate.makeItemFromConfig(plugin.openPanels.getOpenPanel(p.getName()).getConfigurationSection("custom-item." + command.split("\\s")[1]), p, true, true, false); + p.getInventory().addItem(itm); + break; + } case "open=":{ //if player uses open= it will open the panel, with the option to add custom placeholders String panelName = commandRAW.split("\\s")[1]; diff --git a/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java b/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java index 9175c08..506aed2 100644 --- a/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java +++ b/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java @@ -5,7 +5,10 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.*; +import java.util.regex.Pattern; public class PanelDataLoader { CommandPanels plugin; @@ -19,9 +22,18 @@ public class PanelDataLoader { } public void setUserData(UUID playerUUID, String dataPoint, String dataValue, boolean overwrite){ + //if it exists no overwriting if(!overwrite && dataConfig.isSet("playerData." + playerUUID + "." + dataPoint)){ return; } + + //check if string is numeric + Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + if(pattern.matcher(dataValue).matches()){ + doDataMath(playerUUID, dataPoint, dataValue); + return; + } + dataConfig.set("playerData." + playerUUID + "." + dataPoint, dataValue); } @@ -29,6 +41,10 @@ public class PanelDataLoader { dataConfig.set("playerData." + playerUUID + "." + dataPoint, null); } + public void clearData(UUID playerUUID){ + dataConfig.set("playerData." + playerUUID, null); + } + public void saveDataFile(){ try { dataConfig.save(plugin.getDataFolder() + File.separator + "data.yml"); @@ -37,4 +53,56 @@ public class PanelDataLoader { plugin.debug(s); } } + + public void doDataMath(UUID playerUUID, String dataPoint, String dataValue){ + BigDecimal originalValue; + BigDecimal newValue; + try { + originalValue = new BigDecimal(dataConfig.getString("playerData." + playerUUID + "." + dataPoint)); + }catch(Exception ex){ + plugin.debug(ex); + originalValue = BigDecimal.ONE; + } + + BigDecimal output; + switch(dataValue.charAt(0)){ + case '+':{ + newValue = new BigDecimal(dataValue.substring(1)); + output = originalValue.add(newValue); + break; + } + case '-':{ + newValue = new BigDecimal(dataValue.substring(1)); + output = originalValue.subtract(newValue); + break; + } + case '*':{ + newValue = new BigDecimal(dataValue.substring(1)); + output = originalValue.multiply(newValue); + break; + } + case '/':{ + newValue = new BigDecimal(dataValue.substring(1)); + try { + output = originalValue.divide(newValue); + }catch (ArithmeticException ex){ + plugin.debug(ex); + output = originalValue; + } + break; + } + default:{ + newValue = new BigDecimal(dataValue); + output = newValue; + } + } + + //if number is integer + if(output.stripTrailingZeros().scale() <= 0){ + dataConfig.set("playerData." + playerUUID + "." + dataPoint, output.stripTrailingZeros().toPlainString()); + return; + } + + dataConfig.set("playerData." + playerUUID + "." + dataPoint, output.toPlainString()); + } }