From be44a8cbc57c5c98e675917c4d840167b21379cb Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sat, 1 Aug 2020 21:59:07 +0200 Subject: [PATCH 1/2] Small fixes - Fixed PlayerData error - Fixed ArrayIndexOutOfBoundsException in MI command --- src/main/java/net/Indyuce/mmoitems/MMOItems.java | 9 +++++++-- .../net/Indyuce/mmoitems/command/MMOItemsCommand.java | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/Indyuce/mmoitems/MMOItems.java b/src/main/java/net/Indyuce/mmoitems/MMOItems.java index 01abc6a5..7c977c1d 100644 --- a/src/main/java/net/Indyuce/mmoitems/MMOItems.java +++ b/src/main/java/net/Indyuce/mmoitems/MMOItems.java @@ -188,8 +188,13 @@ public class MMOItems extends JavaPlugin { * allows now to use a glitchy itemEquipEvent. must be called after * loading the config since it checks for a config option */ - Bukkit.getScheduler().runTaskTimer(this, () -> Bukkit.getOnlinePlayers().forEach(player -> PlayerData.get(player).checkForInventoryUpdate()), - 100, getConfig().getInt("inventory-update-delay")); + Bukkit.getScheduler().runTaskTimer(this, new Runnable() { + @Override + public void run() { + for(Player player : Bukkit.getOnlinePlayers()) + PlayerData.get(player).checkForInventoryUpdate(); + } + }, 100, getConfig().getInt("inventory-update-delay")); if (Bukkit.getPluginManager().getPlugin("Residence") != null) { flagPlugin = new ResidenceFlags(); diff --git a/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java b/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java index ccfa7164..68525d06 100644 --- a/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java +++ b/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java @@ -1099,8 +1099,13 @@ public class MMOItemsCommand implements CommandExecutor { "Usage: /mi (player) (min-max) (unident-chance) (drop-chance)"); // target - Player target = args.length > 2 ? Bukkit.getPlayer(args[2]) : (Player) sender; - Validate.notNull(target, "Could not find player called '" + args[2] + "'."); + Player target; + if(args.length > 2) { + target = Bukkit.getPlayer(args[2]); + Validate.notNull(target, "Could not find player called '" + args[2] + "'."); + } + else + target = (Player) sender; // item Type type = MMOItems.plugin.getTypes().getOrThrow(args[0]); From 78b885cb3a144ba8002989cef75b9c413c9f0c7f Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sat, 1 Aug 2020 23:04:54 +0200 Subject: [PATCH 2/2] Custom tags can now be booleans, ints, strings or string lists. --- .../net/Indyuce/mmoitems/stat/NBTTags.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/Indyuce/mmoitems/stat/NBTTags.java b/src/main/java/net/Indyuce/mmoitems/stat/NBTTags.java index 6067dc97..13c278fc 100644 --- a/src/main/java/net/Indyuce/mmoitems/stat/NBTTags.java +++ b/src/main/java/net/Indyuce/mmoitems/stat/NBTTags.java @@ -110,7 +110,7 @@ public class NBTTags extends ItemStat { ((StringListData) data).getList().forEach(tag -> { array.add(tag); - item.addItemTag(new ItemTag(tag.substring(0, tag.indexOf(' ')), tag.substring(tag.indexOf(' ') + 1))); + item.addItemTag(new ItemTag(tag.substring(0, tag.indexOf(' ')), calculateObjectType(tag.substring(tag.indexOf(' ') + 1)))); }); item.addItemTag(new ItemTag("MMOITEMS_NBTTAGS", array.toString())); } @@ -121,4 +121,20 @@ public class NBTTags extends ItemStat { mmoitem.setData(ItemStat.NBT_TAGS, new StringListData(new JsonParser().parse(mmoitem.getNBT().getString("MMOITEMS_NBTTAGS")).getAsJsonArray())); } + + public Object calculateObjectType(String input) { + if(input.equalsIgnoreCase("true")) return (Boolean) true; + if(input.equalsIgnoreCase("false")) return (Boolean) false; + try { + int value = Integer.parseInt(input); + return (Integer) value; + } catch(NumberFormatException e) {} + if(input.contains("[") && input.contains("]")) { + List entries = new ArrayList<>(); + for(String s : input.replace("[", "").replace("]", "").split("\\,")) + entries.add(s.replace("\"", "")); + return (List) entries; + } + return (String) input; + } }