From 7b8f01b5602801dacc20cffba8280f053edb025e Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 11 Mar 2024 14:02:49 -0500 Subject: [PATCH 1/6] Updated to use the craftaro repo. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 42d1fcc..f8af189 100644 --- a/pom.xml +++ b/pom.xml @@ -118,7 +118,7 @@ public - https://repo.songoda.com/repository/public/ + https://repo.craftaro.com/repository/public/ From 00edbe4b01d35833bf9de35beb81a2c92d80fd9a Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 11 Mar 2024 14:42:50 -0500 Subject: [PATCH 2/6] Support 1.16+ with default kits. --- .../conversion/hooks/DefaultHook.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java index d97eae6..6d19a12 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java @@ -1,6 +1,7 @@ package com.craftaro.ultimatekits.conversion.hooks; import com.craftaro.core.compatibility.ServerVersion; +import com.craftaro.core.utils.TextUtils; import com.craftaro.ultimatekits.conversion.Hook; import com.craftaro.ultimatekits.utils.ItemSerializer; import org.bukkit.inventory.ItemStack; @@ -9,6 +10,7 @@ import java.util.HashSet; import java.util.Set; public class DefaultHook implements Hook { + public Set getItems(String kitName) { Set items = new HashSet<>(); @@ -29,11 +31,14 @@ public class DefaultHook implements Hook { Set kits = new HashSet<>(); for (Kits kit : Kits.values()) { - if (kit == Kits.BRIANNA_1_12 && ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) - || kit == Kits.BRIANNA_1_13 && !ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (kit == Kits.BRIANNA_1_12 && ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) continue; - } - kits.add(kit.name().toLowerCase().replace("_1_12", "").replace("_1_13", "")); + if (kit == Kits.BRIANNA_1_13 && (ServerVersion.isServerVersionBelow(ServerVersion.V1_13) || ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16))) + continue; + if (kit == Kits.BRIANNA_1_16 && ServerVersion.isServerVersionBelow(ServerVersion.V1_16)) + continue; + + kits.add(kit.getName()); } return kits; @@ -62,7 +67,9 @@ public class DefaultHook implements Hook { BRIANNA_1_12(0, "{id:\"minecraft:skull\",Count:1b,tag:{SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[0:{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]},Name:\"Brianna\"}},Damage:3s}}"), - BRIANNA_1_13(0, "{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]},Name:\"Brianna\"},Damage:3}}"); + BRIANNA_1_13(0, "{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]},Name:\"Brianna\"},Damage:3}}"), + + BRIANNA_1_16(0, "{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;656807503,1481976518,-1694340157,-169243065],Properties:{textures:[{Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]}}}}"); public final String[] items; public final int delay; @@ -71,5 +78,19 @@ public class DefaultHook implements Hook { this.items = items; this.delay = delay; } + + public String getName() { + switch (this) { + case BRIANNA_1_12: + case BRIANNA_1_13: + case BRIANNA_1_16: + return "Brianna"; + case TOOLS: + return "Tools"; + case BETTER_TOOLS: + return "Better Tools"; + } + return ""; + } } } From a7665044cb15e847b1459cdbc72e293a08e3e14f Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 11 Mar 2024 15:20:27 -0500 Subject: [PATCH 3/6] Kit conversion overhaul. --- .../conversion/ConversionKit.java | 25 ++++++++ .../ultimatekits/conversion/Convert.java | 61 +++++++++---------- .../ultimatekits/conversion/Hook.java | 6 +- .../conversion/hooks/CMIHook.java | 44 +++++++------ .../conversion/hooks/DefaultHook.java | 60 +++++++----------- .../conversion/hooks/EssentialsHook.java | 61 ++++++++----------- .../conversion/hooks/UltimateCoreHook.java | 23 ++----- 7 files changed, 128 insertions(+), 152 deletions(-) create mode 100644 src/main/java/com/craftaro/ultimatekits/conversion/ConversionKit.java diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/ConversionKit.java b/src/main/java/com/craftaro/ultimatekits/conversion/ConversionKit.java new file mode 100644 index 0000000..f5af181 --- /dev/null +++ b/src/main/java/com/craftaro/ultimatekits/conversion/ConversionKit.java @@ -0,0 +1,25 @@ +package com.craftaro.ultimatekits.conversion; + +import org.bukkit.inventory.ItemStack; + +import java.util.LinkedHashSet; +import java.util.Set; + +public class ConversionKit { + + private final Set itemStack = new LinkedHashSet<>(); + private final long delay; + + public ConversionKit(Set itemStack, long delay) { + this.itemStack.addAll(itemStack); + this.delay = delay; + } + + public Set getItemStacks() { + return this.itemStack; + } + + public long getDelay() { + return this.delay; + } +} diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/Convert.java b/src/main/java/com/craftaro/ultimatekits/conversion/Convert.java index f78d775..3045269 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/Convert.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/Convert.java @@ -12,67 +12,62 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import java.util.List; -import java.util.Set; +import java.util.Map; public class Convert { + public static void runKitConversions(UltimateKits plugin) { if (!plugin.getKitConfig().contains("Kits")) { if (Bukkit.getPluginManager().isPluginEnabled("Essentials")) { try { Class.forName("com.earth2me.essentials.metrics.MetricsListener"); } catch (ClassNotFoundException ex) { - convertKits(new EssentialsHook()); + convertKits(plugin, new EssentialsHook()); } } - if (Bukkit.getPluginManager().isPluginEnabled("UltimateCore")) { - convertKits(new UltimateCoreHook()); - } - if (Bukkit.getPluginManager().isPluginEnabled("CMI")) { - convertKits(new CMIHook()); - } - } - if (!isInJsonFormat()) { - convertKits(new DefaultHook()); + if (Bukkit.getPluginManager().isPluginEnabled("UltimateCore")) + convertKits(plugin, new UltimateCoreHook()); + if (Bukkit.getPluginManager().isPluginEnabled("CMI")) + convertKits(plugin, new CMIHook()); } + if (!isInJsonFormat(plugin)) + convertKits(plugin, new DefaultHook()); } - private static void convertKits(Hook hook) { + private static void convertKits(UltimateKits plugin, Hook hook) { try { - Set kits = hook.getKits(); - for (String kit : kits) { - Kit kitObj = UltimateKits.getInstance().getKitManager().addKit(new Kit(kit)); - if (kitObj == null) { + Map kits = hook.getKits(); + for (Map.Entry entry : kits.entrySet()) { + Kit kitObj = plugin.getKitManager().addKit(new Kit(entry.getKey())); + if (kitObj == null) continue; - } - for (ItemStack item : hook.getItems(kit)) { - if (item == null || item.getType() == Material.AIR) { + + ConversionKit cvt = entry.getValue(); + + for (ItemStack item : cvt.getItemStacks()) { + if (item == null || item.getType() == Material.AIR) continue; - } kitObj.getContents().add(new KitItem(item)); } - kitObj.setDelay(hook.getDelay(kit)); + kitObj.setDelay(cvt.getDelay()); } - UltimateKits.getInstance().saveKits(true); + plugin.saveKits(true); } catch (NoSuchMethodError | NoClassDefFoundError e) { System.out.println("UltimateKits conversion failed."); } } - private static boolean isInJsonFormat() { - if (!UltimateKits.getInstance().getKitConfig().contains("Kits")) { + private static boolean isInJsonFormat(UltimateKits plugin) { + if (!plugin.getKitConfig().contains("Kits")) return false; - } - for (String kit : UltimateKits.getInstance().getKitConfig().getConfigurationSection("Kits").getKeys(false)) { - if (UltimateKits.getInstance().getKitConfig().contains("Kits." + kit + ".items")) { - List itemList = UltimateKits.getInstance().getKitConfig().getStringList("Kits." + kit + ".items"); - if (!itemList.isEmpty()) { - if (itemList.get(0).startsWith("{")) { + for (String kit : plugin.getKitConfig().getConfigurationSection("Kits").getKeys(false)) + if (plugin.getKitConfig().contains("Kits." + kit + ".items")) { + List itemList = plugin.getKitConfig().getStringList("Kits." + kit + ".items"); + if (!itemList.isEmpty()) + if (itemList.get(0).startsWith("{")) return true; - } - } } - } return false; } diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/Hook.java b/src/main/java/com/craftaro/ultimatekits/conversion/Hook.java index 38623aa..5dcec93 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/Hook.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/Hook.java @@ -2,12 +2,10 @@ package com.craftaro.ultimatekits.conversion; import org.bukkit.inventory.ItemStack; +import java.util.Map; import java.util.Set; public interface Hook { - Set getKits(); - Set getItems(String kitName); - - long getDelay(String kitName); + Map getKits(); } diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/CMIHook.java b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/CMIHook.java index b5dc445..b44ea60 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/CMIHook.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/CMIHook.java @@ -2,46 +2,44 @@ package com.craftaro.ultimatekits.conversion.hooks; import com.Zrips.CMI.CMI; import com.Zrips.CMI.Modules.Kits.Kit; +import com.craftaro.ultimatekits.conversion.ConversionKit; import com.craftaro.ultimatekits.conversion.Hook; import com.craftaro.ultimatekits.kit.type.KitContentCommand; import org.bukkit.Bukkit; import org.bukkit.inventory.ItemStack; -import java.util.HashSet; -import java.util.Set; +import java.util.*; public class CMIHook implements Hook { + private final CMI cmi; public CMIHook() { this.cmi = (CMI) Bukkit.getPluginManager().getPlugin("CMI"); } - public Set getItems(String kitName) { - Set stacks = new HashSet<>(); - try { - Kit kit = this.cmi.getKitsManager().getKit(kitName, true); + @Override + public Map getKits() { + Map kits = new LinkedHashMap<>(); + for (String kitName : this.cmi.getKitsManager().getKitMap().keySet()) { + Set stacks = new HashSet<>(); + try { + Kit kit = this.cmi.getKitsManager().getKit(kitName, true); - for (ItemStack item : kit.getItems()) { - if (item != null) { - stacks.add(item); + for (ItemStack item : kit.getItems()) { + if (item != null) { + stacks.add(item); + } } - } - for (String command : kit.getCommands()) { - stacks.add(new KitContentCommand(command).getItemForDisplay()); + for (String command : kit.getCommands()) { + stacks.add(new KitContentCommand(command).getItemForDisplay()); + } + } catch (Exception ex) { + ex.printStackTrace(); } - } catch (Exception ex) { - ex.printStackTrace(); + kits.put(kitName, new ConversionKit(stacks, this.cmi.getKitsManager().getKit(kitName, true).getDelay())); } - return stacks; - } - - public Set getKits() { - return this.cmi.getKitsManager().getKitMap().keySet(); - } - - public long getDelay(String kitName) { - return this.cmi.getKitsManager().getKit(kitName, true).getDelay(); + return kits; } } diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java index 6d19a12..81071c0 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/DefaultHook.java @@ -1,35 +1,18 @@ package com.craftaro.ultimatekits.conversion.hooks; import com.craftaro.core.compatibility.ServerVersion; -import com.craftaro.core.utils.TextUtils; +import com.craftaro.ultimatekits.conversion.ConversionKit; import com.craftaro.ultimatekits.conversion.Hook; import com.craftaro.ultimatekits.utils.ItemSerializer; import org.bukkit.inventory.ItemStack; -import java.util.HashSet; -import java.util.Set; +import java.util.*; public class DefaultHook implements Hook { - public Set getItems(String kitName) { - Set items = new HashSet<>(); - - for (Kits kit : Kits.values()) { - if (!kit.name().equalsIgnoreCase(kitName)) { - continue; - } - - for (String string : kit.items) { - items.add(ItemSerializer.deserializeItemStackFromJson(string)); - } - } - - return items; - } - - public Set getKits() { - Set kits = new HashSet<>(); - + @Override + public Map getKits() { + Map kits = new LinkedHashMap<>(); for (Kits kit : Kits.values()) { if (kit == Kits.BRIANNA_1_12 && ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) continue; @@ -38,22 +21,15 @@ public class DefaultHook implements Hook { if (kit == Kits.BRIANNA_1_16 && ServerVersion.isServerVersionBelow(ServerVersion.V1_16)) continue; - kits.add(kit.getName()); + Set items = new LinkedHashSet<>(); + for (String string : kit.items) + items.add(ItemSerializer.deserializeItemStackFromJson(string)); + kits.put(kit.getName(), new ConversionKit(items, kit.getDelay())); } return kits; } - public long getDelay(String kitName) { - for (Kits kit : Kits.values()) { - if (!kit.name().equalsIgnoreCase(kitName)) { - continue; - } - return kit.delay; - } - return 0; - } - public enum Kits { TOOLS(10, "{id:\"minecraft:stone_pickaxe\",Count:1b}", "{id:\"minecraft:stone_axe\",Count:1b}", @@ -65,14 +41,14 @@ public class DefaultHook implements Hook { "{id:\"minecraft:diamond_shovel\",Count:1b,tag:{Enchantments:[{lvl:1s,id:\"minecraft:efficiency\"}]}}", "{id:\"minecraft:diamond_hoe\",Count:1b,tag:{Enchantments:[{lvl:3s,id:\"minecraft:unbreaking\"}]}}"), - BRIANNA_1_12(0, "{id:\"minecraft:skull\",Count:1b,tag:{SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[0:{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]},Name:\"Brianna\"}},Damage:3s}}"), + BRIANNA_1_12(0, "{id:\"minecraft:skull\",Count:1b,tag:{display:{Name:'{\"text\":\"Brianna\"}'},SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[0:{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]}},Damage:3s}}"), - BRIANNA_1_13(0, "{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]},Name:\"Brianna\"},Damage:3}}"), + BRIANNA_1_13(0, "{id:\"minecraft:player_head\",Count:1b,tag:{display:{Name:'{\"text\":\"Brianna\"}'},SkullOwner:{Id:\"2626974f-5838-44c6-994d-f6c723d40b79\",Properties:{textures:[{Signature:\"tQRjs3H+5H5A8Id/Hb2a3E+VDQY8sUKQYacc9ZYDsBncagNO6imX6h6qsDmtTDtliTh8ZzHRIAw/6gQeiODJnOm4PAB2vPnUv0VFAP2awbikJeOSuK3WZsvcUN78+hXLFFtvBUt/oGKpsTj5P//2+qH7QLqmrxFD72jGpmyS8Fp6AHuQqzeHn40isvKT2+oTItFb3wQ3H2QgudGxEhOX6Onz0M2xmH61+HF5ajPS+/2hUl5kjRk8uRLc2AJD162dECdYOUJ8/j47Fl9pJXG1dcG6cGMuRlDAim3AqfdJFTW0CI78YEpTTGZcLL+O+/yUMQD9hOQqjP7y63YIOZ9kAZ7DRzu5hQaHLevhUcTwZnkqs+F9eUuQR00y8PoVoSEOMrV4LIWAJFutdziNZX9I7MI9tJ0x96imA18yYC9Skwx7JHurC1wpdtSqS/F7gCeU3+2QiFufxX9ft9BPHSBX7z08nqQkwxYh0O/06OX+H0NJTLwYrK+hoTXT1A5dNrJIHzGuK9/qUaitH4yz0zv5aGd3vVytdKCULFqOTiqur1QYPvF9sI2fhvfcHqUc30yU1di0Ws5SOQzCAFLOypjUH1ezQMOK+Xy3ixB0a8HXI9RL8ewOvKaVepbWS1vomNNWfiCgpudbLW8x6bPvQLmZn8YWPjCAL0WFycnw8lm6JDg=\",Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]}},Damage:3}}"), - BRIANNA_1_16(0, "{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;656807503,1481976518,-1694340157,-169243065],Properties:{textures:[{Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]}}}}"); + BRIANNA_1_16(0, "{id:\"minecraft:player_head\",Count:1b,tag:{display:{Name:'{\"text\":\"Brianna\"}'},SkullOwner:{Id:[I;656807503,1481976518,-1694340157,-169243065],Properties:{textures:[{Value:\"eyJ0aW1lc3RhbXAiOjE1NzA5MDI0MDg4ODEsInByb2ZpbGVJZCI6IjA2Y2NiMGU0MWM3NjQ0YjE5OGZiYzk5OTBhODcwNjAwIiwicHJvZmlsZU5hbWUiOiJCcmlhbm5hIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yN2I3MjM5Yzk2OWNhNzY0NWJmMTQzODc4M2Y1Y2FiZjdlMDhhYTViODY4OGFkODg3NWJhNzNlNTVhNDBlMjIiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==\"}]}}}}"); - public final String[] items; - public final int delay; + private final String[] items; + private final int delay; Kits(int delay, String... items) { this.items = items; @@ -92,5 +68,13 @@ public class DefaultHook implements Hook { } return ""; } + + public String[] getItems() { + return items; + } + + public int getDelay() { + return delay; + } } } diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/EssentialsHook.java b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/EssentialsHook.java index 971665b..6188cdd 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/EssentialsHook.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/EssentialsHook.java @@ -1,5 +1,6 @@ package com.craftaro.ultimatekits.conversion.hooks; +import com.craftaro.ultimatekits.conversion.ConversionKit; import com.craftaro.ultimatekits.conversion.Hook; import com.earth2me.essentials.Essentials; import com.earth2me.essentials.Kit; @@ -9,6 +10,8 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Set; public class EssentialsHook implements Hook { @@ -18,48 +21,32 @@ public class EssentialsHook implements Hook { this.essentials = (Essentials) Bukkit.getServer().getPluginManager().getPlugin("Essentials"); } - public Set getItems(String kitName) { - Set stacks = new HashSet<>(); - try { - Kit kit = new Kit(kitName, this.essentials); - - for (String nonParse : kit.getItems()) { - String[] parts = nonParse.split(" +"); - ItemStack item = this.essentials.getItemDb().get(parts[0], parts.length > 1 ? Integer.parseInt(parts[1]) : 1); - MetaItemStack metaStack = new MetaItemStack(item); - if (parts.length > 2 != nonParse.startsWith("/")) { - try { - metaStack.parseStringMeta(null, true, parts, 2, this.essentials); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - stacks.add(metaStack.getItemStack()); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - return stacks; - } - - public Set getKits() { + @Override + public Map getKits() { ConfigurationSection cs = this.essentials.getSettings().getKits(); - Set kits = new HashSet<>(); + Map kits = new LinkedHashMap<>(); try { - cs.getKeys(false); + for (String name : cs.getKeys(false)) { + Set stacks = new HashSet<>(); + Kit kitObj = new Kit(name, this.essentials); + for (String nonParse : kitObj.getItems()) { + String[] parts = nonParse.split(" +"); + ItemStack item = this.essentials.getItemDb().get(parts[0], parts.length > 1 ? Integer.parseInt(parts[1]) : 1); + MetaItemStack metaStack = new MetaItemStack(item); + if (parts.length > 2 != nonParse.startsWith("/")) { + try { + metaStack.parseStringMeta(null, true, parts, 2, this.essentials); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + stacks.add(metaStack.getItemStack()); + } + kits.put(name, new ConversionKit(stacks, Integer.toUnsignedLong((int) this.essentials.getSettings().getKit(name).getOrDefault("delay", 0)))); + } } catch (Exception e) { return kits; } - kits.addAll(cs.getKeys(false)); return kits; } - - public long getDelay(String kitName) { - Object object = this.essentials.getSettings().getKit(kitName).getOrDefault("delay", 0); - try { - return Integer.toUnsignedLong((int) object); - } catch (Exception ex) { - return (long) object; - } - } } diff --git a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/UltimateCoreHook.java b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/UltimateCoreHook.java index 38d0c34..f8090da 100644 --- a/src/main/java/com/craftaro/ultimatekits/conversion/hooks/UltimateCoreHook.java +++ b/src/main/java/com/craftaro/ultimatekits/conversion/hooks/UltimateCoreHook.java @@ -2,32 +2,21 @@ package com.craftaro.ultimatekits.conversion.hooks; import bammerbom.ultimatecore.bukkit.api.UC; import bammerbom.ultimatecore.bukkit.api.UKit; +import com.craftaro.ultimatekits.conversion.ConversionKit; import com.craftaro.ultimatekits.conversion.Hook; import org.bukkit.inventory.ItemStack; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; public class UltimateCoreHook implements Hook { + @Override - public Set getKits() { - Set list = new HashSet<>(); + public Map getKits() { + Map list = new LinkedHashMap<>(); List kits = UC.getServer().getKits(); for (UKit kit : kits) { - list.add(kit.getName()); + list.put(kit.getName(), new ConversionKit(new HashSet<>(kit.getItems()), 0)); } return list; } - - @Override - public Set getItems(String kitName) { - UKit uKit = new UKit(kitName); - return new HashSet<>(uKit.getItems()); - } - - @Override - public long getDelay(String kitName) { - return 0; - } } From e95baae80a9b201790a80440d55990255c13f182 Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 11 Mar 2024 17:35:40 -0500 Subject: [PATCH 4/6] Overhauled kit claiming logic. --- .../craftaro/ultimatekits/UltimateKits.java | 25 +- .../ultimatekits/commands/CommandKit.java | 15 +- .../commands/CommandPreviewKit.java | 13 +- .../ultimatekits/gui/AnimatedKitGui.java | 9 +- .../ultimatekits/gui/ConfirmBuyGui.java | 2 +- .../ultimatekits/gui/KitSelectorGui.java | 4 +- .../ultimatekits/gui/PreviewKitGui.java | 2 +- .../com/craftaro/ultimatekits/kit/Kit.java | 251 +------------- .../craftaro/ultimatekits/kit/KitHandler.java | 322 ++++++++++++++++++ .../listeners/InteractListeners.java | 51 +-- .../listeners/PlayerListeners.java | 7 +- 11 files changed, 391 insertions(+), 310 deletions(-) create mode 100644 src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java diff --git a/src/main/java/com/craftaro/ultimatekits/UltimateKits.java b/src/main/java/com/craftaro/ultimatekits/UltimateKits.java index d03efe0..7bad85e 100644 --- a/src/main/java/com/craftaro/ultimatekits/UltimateKits.java +++ b/src/main/java/com/craftaro/ultimatekits/UltimateKits.java @@ -34,12 +34,7 @@ import com.craftaro.ultimatekits.handlers.DisplayItemHandler; import com.craftaro.ultimatekits.handlers.ParticleHandler; import com.craftaro.ultimatekits.key.Key; import com.craftaro.ultimatekits.key.KeyManager; -import com.craftaro.ultimatekits.kit.Kit; -import com.craftaro.ultimatekits.kit.KitAnimation; -import com.craftaro.ultimatekits.kit.KitBlockData; -import com.craftaro.ultimatekits.kit.KitItem; -import com.craftaro.ultimatekits.kit.KitManager; -import com.craftaro.ultimatekits.kit.KitType; +import com.craftaro.ultimatekits.kit.*; import com.craftaro.ultimatekits.listeners.BlockListeners; import com.craftaro.ultimatekits.listeners.ChatListeners; import com.craftaro.ultimatekits.listeners.ChunkListeners; @@ -82,6 +77,8 @@ public class UltimateKits extends SongodaPlugin { private CategoryManager categoryManager; private DataManager dataManager; + private KitHandler kitHandler; + private boolean loaded = false; /** @@ -133,9 +130,11 @@ public class UltimateKits extends SongodaPlugin { this.keyFile.saveChanges(); this.crateFile.saveChanges(); + kitHandler = new KitHandler(this); + // setup commands this.commandManager = new CommandManager(this); - this.commandManager.addCommand(new CommandKit(this, this.guiManager)); + this.commandManager.addCommand(new CommandKit(this, this.guiManager, this.kitHandler)); this.commandManager.addCommand(new CommandPreviewKit(this, this.guiManager)); this.commandManager.addMainCommand("KitAdmin") .addSubCommand(new CommandReload(this)) @@ -151,17 +150,17 @@ public class UltimateKits extends SongodaPlugin { // Event registration - this.guiManager.init(); + guiManager.init(); PluginManager pluginManager = getServer().getPluginManager(); pluginManager.registerEvents(new BlockListeners(this), this); pluginManager.registerEvents(new ChunkListeners(this), this); pluginManager.registerEvents(new ChatListeners(), this); pluginManager.registerEvents(new EntityListeners(this), this); - pluginManager.registerEvents(new InteractListeners(this, this.guiManager), this); + pluginManager.registerEvents(new InteractListeners(this, guiManager, kitHandler), this); pluginManager.registerEvents(new PlayerListeners(this), this); - this.displayItemHandler.start(); - this.particleHandler.start(); + displayItemHandler.start(); + particleHandler.start(); } @Override @@ -587,4 +586,8 @@ public class UltimateKits extends SongodaPlugin { public CategoryManager getCategoryManager() { return this.categoryManager; } + + public KitHandler getKitHandler() { + return kitHandler; + } } diff --git a/src/main/java/com/craftaro/ultimatekits/commands/CommandKit.java b/src/main/java/com/craftaro/ultimatekits/commands/CommandKit.java index da85b91..33a4748 100644 --- a/src/main/java/com/craftaro/ultimatekits/commands/CommandKit.java +++ b/src/main/java/com/craftaro/ultimatekits/commands/CommandKit.java @@ -6,6 +6,7 @@ import com.craftaro.ultimatekits.UltimateKits; import com.craftaro.ultimatekits.gui.CategorySelectorGui; import com.craftaro.ultimatekits.gui.KitSelectorGui; import com.craftaro.ultimatekits.kit.Kit; +import com.craftaro.ultimatekits.kit.KitHandler; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,11 +17,13 @@ import java.util.List; public class CommandKit extends AbstractCommand { private final UltimateKits plugin; private final GuiManager guiManager; + private final KitHandler kitHandler; - public CommandKit(UltimateKits plugin, GuiManager guiManager) { + public CommandKit(UltimateKits plugin, GuiManager guiManager, KitHandler kitHandler) { super(CommandType.CONSOLE_OK, "kit"); this.plugin = plugin; this.guiManager = guiManager; + this.kitHandler = kitHandler; } @Override @@ -57,7 +60,7 @@ public class CommandKit extends AbstractCommand { return ReturnType.FAILURE; } - kit.processGenericUse((Player) sender, false); + kitHandler.processGenericUse(kit, (Player) sender, false); return ReturnType.SUCCESS; } else { // /kit - Gives kit to another player. @@ -76,14 +79,14 @@ public class CommandKit extends AbstractCommand { String who = player != null ? player.getName() : "everyone"; if (player != null) { - kit.processGenericUse(player, true); - this.plugin.getLocale().getMessage("event.claim.givesuccess") + kitHandler.processGenericUse(kit, player, true); + plugin.getLocale().getMessage("event.claim.givesuccess") .processPlaceholder("kit", kit.getName()) .sendPrefixedMessage(sender); } else { Bukkit.getOnlinePlayers().forEach(onlinePlayer -> { - kit.processGenericUse(onlinePlayer, true); - this.plugin.getLocale().getMessage("event.claim.givesuccess") + kitHandler.processGenericUse(kit, onlinePlayer, true); + plugin.getLocale().getMessage("event.claim.givesuccess") .processPlaceholder("kit", kit.getName()) .sendPrefixedMessage(sender); }); diff --git a/src/main/java/com/craftaro/ultimatekits/commands/CommandPreviewKit.java b/src/main/java/com/craftaro/ultimatekits/commands/CommandPreviewKit.java index e80c54f..f52bcd5 100644 --- a/src/main/java/com/craftaro/ultimatekits/commands/CommandPreviewKit.java +++ b/src/main/java/com/craftaro/ultimatekits/commands/CommandPreviewKit.java @@ -24,29 +24,28 @@ public class CommandPreviewKit extends AbstractCommand { protected ReturnType runCommand(CommandSender sender, String... args) { Player player = (Player) sender; if (args.length != 1) { - this.plugin.getLocale().getMessage("command.kit.nokitsupplied").sendPrefixedMessage(player); + plugin.getLocale().getMessage("command.kit.nokitsupplied").sendPrefixedMessage(player); return ReturnType.FAILURE; } Kit kit = this.plugin.getKitManager().getKit(args[0].toLowerCase().trim()); if (kit == null) { - this.plugin.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player); + plugin.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player); return ReturnType.FAILURE; } - kit.display(player, this.guiManager, null); + plugin.getKitHandler().display(kit, player, guiManager, null); return ReturnType.SUCCESS; } @Override protected List onTab(CommandSender sender, String... args) { - if (!(sender instanceof Player)) { + if (!(sender instanceof Player)) return null; - } if (args.length == 2) { List tab = new ArrayList<>(); - for (Kit kit : this.plugin.getKitManager().getKits()) { + for (Kit kit : plugin.getKitManager().getKits()) tab.add(kit.getKey()); - } + return tab; } return new ArrayList<>(); diff --git a/src/main/java/com/craftaro/ultimatekits/gui/AnimatedKitGui.java b/src/main/java/com/craftaro/ultimatekits/gui/AnimatedKitGui.java index 29c1e9e..b4e4bcd 100644 --- a/src/main/java/com/craftaro/ultimatekits/gui/AnimatedKitGui.java +++ b/src/main/java/com/craftaro/ultimatekits/gui/AnimatedKitGui.java @@ -15,12 +15,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import java.util.ArrayDeque; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; +import java.util.*; public class AnimatedKitGui extends Gui { static final Random rand = new Random(); @@ -46,7 +41,7 @@ public class AnimatedKitGui extends Gui { // ideally, we'd populate the items in such a way that the end item isn't far from the center when the animation is complete // would be something to do if people have large kit loot tables. - List kitItems = kit.getContents(); + List kitItems = new ArrayList<>(kit.getContents()); if (kitItems.isEmpty()) { throw new RuntimeException("Cannot give an empty kit!"); } diff --git a/src/main/java/com/craftaro/ultimatekits/gui/ConfirmBuyGui.java b/src/main/java/com/craftaro/ultimatekits/gui/ConfirmBuyGui.java index b9379bc..c4ab245 100644 --- a/src/main/java/com/craftaro/ultimatekits/gui/ConfirmBuyGui.java +++ b/src/main/java/com/craftaro/ultimatekits/gui/ConfirmBuyGui.java @@ -38,7 +38,7 @@ public class ConfirmBuyGui extends Gui { setButton(1, 2, GuiUtils.createButtonItem(Settings.BUY_ICON.getMaterial(XMaterial.EMERALD), plugin.getLocale().getMessage("interface.yesno.yes").getMessage()), event -> { - kit.processPurchaseUse(event.player); + plugin.getKitHandler().processPurchaseUse(kit, event.player); exit(); }); diff --git a/src/main/java/com/craftaro/ultimatekits/gui/KitSelectorGui.java b/src/main/java/com/craftaro/ultimatekits/gui/KitSelectorGui.java index 94a0f72..2095f60 100644 --- a/src/main/java/com/craftaro/ultimatekits/gui/KitSelectorGui.java +++ b/src/main/java/com/craftaro/ultimatekits/gui/KitSelectorGui.java @@ -165,9 +165,9 @@ public class KitSelectorGui extends Gui { this.plugin.saveKits(false); showPage(); } else if (event.clickType == ClickType.LEFT) { - kit.display(this.player, this.guiManager, this); + plugin.getKitHandler().display(kit, player, guiManager, this); } else if (event.clickType == ClickType.RIGHT) { - kit.buy(event.player, event.manager); + plugin.getKitHandler().buy(kit, event.player, event.manager); } }); } diff --git a/src/main/java/com/craftaro/ultimatekits/gui/PreviewKitGui.java b/src/main/java/com/craftaro/ultimatekits/gui/PreviewKitGui.java index f357aca..0d06369 100644 --- a/src/main/java/com/craftaro/ultimatekits/gui/PreviewKitGui.java +++ b/src/main/java/com/craftaro/ultimatekits/gui/PreviewKitGui.java @@ -102,7 +102,7 @@ public class PreviewKitGui extends Gui { getBuyLore()), event -> { exit(); - kit.buy(event.player, event.manager); + plugin.getKitHandler().buy(kit, event.player, event.manager); }); } diff --git a/src/main/java/com/craftaro/ultimatekits/kit/Kit.java b/src/main/java/com/craftaro/ultimatekits/kit/Kit.java index 1b63a35..57cc71d 100644 --- a/src/main/java/com/craftaro/ultimatekits/kit/Kit.java +++ b/src/main/java/com/craftaro/ultimatekits/kit/Kit.java @@ -60,40 +60,13 @@ public class Kit implements Cloneable { this.name = TextUtils.formatText(key, true); } - public void buy(Player player, GuiManager manager) { - if (hasPermissionToClaim(player)) { - processGenericUse(player, false); - return; - } - if (!hasPermissionToBuy(player)) { - UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") - .sendPrefixedMessage(player); - return; - } - - if (this.link != null) { - player.sendMessage(""); - plugin.getLocale().newMessage("&a" + this.link).sendPrefixedMessage(player); - player.sendMessage(""); - player.closeInventory(); - } else if (this.price != 0) { - manager.showGUI(player, new ConfirmBuyGui(plugin, player, this, null)); - } else { - UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") - .sendPrefixedMessage(player); - } - } - - - private boolean hasRoom(Player player, int itemAmount) { + public boolean hasRoom(Player player, int itemAmount) { int space = 0; - for (ItemStack content : player.getInventory().getContents()) { - if (content == null) { + for (ItemStack content : player.getInventory().getContents()) + if (content == null) space++; - } - } // Since roulette only gives one item, we don't need to check if the user has room for the whole kit. if (this.kitAnimation == KitAnimation.ROULETTE && space >= 1) { @@ -103,125 +76,6 @@ public class Kit implements Cloneable { return space >= itemAmount; } - public void processKeyUse(Player player) { - ItemStack item = player.getItemInHand(); - NBTItem nbtItem = new NBTItem(item); - - if (!nbtItem.hasKey("key") || !nbtItem.hasKey("kit")) { - return; - } - - String keyName = nbtItem.getString("key"); - String kitName = nbtItem.getString("kit"); - - boolean any = kitName.equals("ANY"); - Key key = plugin.getKeyManager().getKey(keyName); - - if (key == null && !any) { - return; - } - - if (!any && !kitName.equals(this.name)) { - plugin.getLocale().getMessage("event.crate.wrongkey").sendPrefixedMessage(player); - return; - } - - if (giveKit(player, key)) { - plugin.getLocale().getMessage("event.key.success") - .processPlaceholder("kit", this.name).sendPrefixedMessage(player); - if (player.getInventory().getItemInHand().getAmount() != 1) { - item.setAmount(item.getAmount() - 1); - player.setItemInHand(item); - } else { - player.setItemInHand(null); - } - } - } - - public void processCrateUse(Player player, ItemStack item, CompatibleHand hand) { - Crate crate = plugin.getCrateManager().getCrate(item); - - if (crate == null || !giveKit(player, crate)) { - return; - } - - ItemUtils.takeActiveItem(player, hand); - - plugin.getLocale().getMessage("event.crate.success") - .processPlaceholder("crate", this.name).sendPrefixedMessage(player); - } - - public void processPurchaseUse(Player player) { - if (!EconomyManager.isEnabled()) { - return; - } - - if (!player.hasPermission("ultimatekits.buy." + this.key)) { - UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") - .sendPrefixedMessage(player); - return; - } else if (!EconomyManager.hasBalance(player, this.price)) { - plugin.getLocale().getMessage("event.claim.cannotafford") - .processPlaceholder("kit", this.name).sendPrefixedMessage(player); - return; - } - if (this.delay > 0) { - if (getNextUse(player) != 0) { - plugin.getLocale().getMessage("event.claim.delay") - .processPlaceholder("time", TimeUtils.makeReadable(this.getNextUse(player))) - .sendPrefixedMessage(player); - return; - } - } else if (getNextUse(player) == -1) { - plugin.getLocale().getMessage("event.claim.nottwice").sendPrefixedMessage(player); - return; - } - if (giveKit(player)) { - EconomyManager.withdrawBalance(player, this.price); - if (this.delay != 0) { - updateDelay(player); //updates delay on buy - } - - plugin.getLocale().getMessage("event.claim.purchasesuccess") - .processPlaceholder("kit", this.name).sendPrefixedMessage(player); - } - } - - public void processGenericUse(Player player, boolean forced) { - if (getNextUse(player) == -1 && !forced) { - plugin.getLocale().getMessage("event.claim.nottwice").sendPrefixedMessage(player); - } else if (getNextUse(player) <= 0 || forced) { - if (giveKit(player)) { - updateDelay(player); - if (this.kitAnimation == KitAnimation.NONE) { - plugin.getLocale().getMessage("event.claim.givesuccess") - .processPlaceholder("kit", this.name).sendPrefixedMessage(player); - } - } - } else { - plugin.getLocale().getMessage("event.claim.delay") - .processPlaceholder("time", TimeUtils.makeReadable(getNextUse(player))) - .sendPrefixedMessage(player); - } - } - - @SuppressWarnings("Duplicates") - public void display(Player player, GuiManager manager, Gui back) { - if (!hasPermissionToPreview(player)) { - UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") - .sendPrefixedMessage(player); - return; - } - if (this.key == null) { - plugin.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player); - return; - } - - plugin.getLocale().getMessage("event.preview.kit") - .processPlaceholder("kit", this.name).sendPrefixedMessage(player); - manager.showGUI(player, new PreviewKitGui(plugin, player, this, back)); - } - public void saveKit(List items) { List list = new ArrayList<>(); for (ItemStack is : items) { @@ -295,103 +149,6 @@ public class Kit implements Cloneable { return stacks; } - public boolean giveKit(Player player) { - return giveKit(player, this.contents.size(), -1); - } - - private boolean giveKit(Player player, Key key) { - if (key == null) { - return giveKit(player); - } - - int amount = key.getAmount(); - if (amount == -1) { - // FIXME: I don't understand how Crates, Keys, etc. actually are supposed to work. - // I think the give-algorithms are generally wrongly implemented and confusing naming is making it hard to understand. - amount = this.contents.size(); - } - return giveKit(player, amount, key.getKitAmount()); - } - - private boolean giveKit(Player player, Crate crate) { - int amount = crate.getAmount(); - if (amount == -1) { - // FIXME: I don't understand how Crates, Keys, etc. actually are supposed to work. - // I think the give-algorithms are generally wrongly implemented and confusing naming is making it hard to understand. - amount = this.contents.size(); - } - return giveKit(player, amount, crate.getKitAmount()); - } - - private boolean giveKit(Player player, int itemAmount, int kitAmount) { - List innerContents = new ArrayList<>(getContents()); - - // Amount of items from the kit to give to the player. - if (this.kitAnimation == KitAnimation.ROULETTE) { - itemAmount = 1; //TODO how about kitAmount > 1? generateRandomItem() will only give 1 random item instead of kitAmount - } - int itemGiveAmount = kitAmount > 0 ? itemAmount * kitAmount : itemAmount; - - if (Settings.NO_REDEEM_WHEN_FULL.getBoolean() && !hasRoom(player, itemGiveAmount)) { - plugin.getLocale().getMessage("event.claim.full").sendPrefixedMessage(player); - return false; - } - - if (Settings.SOUNDS_ENABLED.getBoolean() && this.kitAnimation == KitAnimation.NONE) { - XSound.ENTITY_PLAYER_LEVELUP.play(player, 0.6F, 15.0F); - } - - return generateRandomItem(innerContents, itemGiveAmount, 0, player); - } - - private boolean generateRandomItem(List innerContents, int itemGiveAmount, int itemGivenAmount, Player player) { - if (innerContents.size() != itemGiveAmount || this.kitAnimation != KitAnimation.NONE) { - Collections.shuffle(innerContents); - } - - for (KitItem item : new ArrayList<>(innerContents)) { - if (itemGiveAmount <= 0 && itemGivenAmount != 0) { - break; - } - double ch = item.getChance() == 0 ? 100 : item.getChance(); - double rand = Math.random() * 100; - itemGiveAmount--; - if (rand < ch || ch == 100) { - itemGivenAmount++; - if (this.kitAnimation != KitAnimation.NONE) { - // TODO: this is a very bad way to solve this problem. - // Giving the player kit rewards really should be done outside of the Kit class. - plugin.getGuiManager().showGUI(player, new AnimatedKitGui(plugin, player, this, item.getItem())); - return true; - } else { - ItemStack parseStack = item.getContent().process(player); - if (item.getContent() instanceof KitContentEconomy - || item.getContent() instanceof KitContentCommand) { - continue; - } - - innerContents.remove(item); - - if (Settings.AUTO_EQUIP_ARMOR.getBoolean() && ArmorType.equip(player, parseStack)) { - continue; - } - - Map overfilled = player.getInventory().addItem(parseStack); - for (ItemStack item2 : overfilled.values()) { - player.getWorld().dropItemNaturally(player.getLocation(), item2); - } - } - } - } - - if ((itemGiveAmount > 0 || itemGivenAmount == 0) && !innerContents.isEmpty()) { - return generateRandomItem(innerContents, itemGiveAmount, itemGivenAmount, player); - } - - player.updateInventory(); - return true; - } - public void updateDelay(Player player) { plugin.getDataFile().set("Kits." + this.key + ".delays." + player.getUniqueId(), System.currentTimeMillis()); } @@ -470,7 +227,7 @@ public class Kit implements Cloneable { } public List getContents() { - return this.contents; + return Collections.unmodifiableList(this.contents); } public Kit setContents(List contents) { diff --git a/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java b/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java new file mode 100644 index 0000000..f819623 --- /dev/null +++ b/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java @@ -0,0 +1,322 @@ +package com.craftaro.ultimatekits.kit; + +import com.craftaro.core.compatibility.CompatibleHand; +import com.craftaro.core.gui.Gui; +import com.craftaro.core.gui.GuiManager; +import com.craftaro.core.hooks.EconomyManager; +import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; +import com.craftaro.core.utils.ItemUtils; +import com.craftaro.core.utils.TimeUtils; +import com.craftaro.third_party.com.cryptomorin.xseries.XSound; +import com.craftaro.ultimatekits.UltimateKits; +import com.craftaro.ultimatekits.crate.Crate; +import com.craftaro.ultimatekits.gui.AnimatedKitGui; +import com.craftaro.ultimatekits.gui.ConfirmBuyGui; +import com.craftaro.ultimatekits.gui.PreviewKitGui; +import com.craftaro.ultimatekits.key.Key; +import com.craftaro.ultimatekits.kit.type.KitContentCommand; +import com.craftaro.ultimatekits.kit.type.KitContentEconomy; +import com.craftaro.ultimatekits.settings.Settings; +import com.craftaro.ultimatekits.utils.ArmorType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class KitHandler { + + private final UltimateKits plugin; + + public KitHandler(UltimateKits plugin) { + this.plugin = plugin; + } + + /** + * Process the purchase of a kit. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + * @param manager The GUI manager + */ + public void buy(Kit kit, Player player, GuiManager manager) { + if (kit.hasPermissionToClaim(player)) { + processGenericUse(kit, player, false); + return; + } + + if (!kit.hasPermissionToBuy(player)) { + UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") + .sendPrefixedMessage(player); + return; + } + + if (kit.getLink() != null) { + player.sendMessage(""); + plugin.getLocale().newMessage("&a" + kit.getLink()).sendPrefixedMessage(player); + player.sendMessage(""); + player.closeInventory(); + } else if (kit.getPrice() != 0) { + manager.showGUI(player, new ConfirmBuyGui(plugin, player, kit, null)); + } else { + UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") + .sendPrefixedMessage(player); + } + } + + /** + * Process the use of a key inventory item on a kit block. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + */ + public void processKeyUse(Kit kit, Player player) { + ItemStack item = player.getItemInHand(); + NBTItem nbtItem = new NBTItem(item); + + if (!nbtItem.hasKey("key") || !nbtItem.hasKey("kit")) { + return; + } + + String keyName = nbtItem.getString("key"); + String kitName = nbtItem.getString("kit"); + + boolean any = kitName.equals("ANY"); + Key key = plugin.getKeyManager().getKey(keyName); + + if (key == null && !any) { + return; + } + + String name = kit.getName(); + + if (!any && !kitName.equals(name)) { + plugin.getLocale().getMessage("event.crate.wrongkey").sendPrefixedMessage(player); + return; + } + + int amount = key == null ? -1 : key.getAmount(); + if (amount == -1) { + amount = kit.getContents().size(); + } + + if (key == null ? giveKit(kit, player) : giveKit(kit, player, amount, key.getKitAmount())) { + plugin.getLocale().getMessage("event.key.success") + .processPlaceholder("kit", kit.getName()).sendPrefixedMessage(player); + if (player.getInventory().getItemInHand().getAmount() != 1) { + item.setAmount(item.getAmount() - 1); + player.setItemInHand(item); + } else { + player.setItemInHand(null); + } + } + } + + /** + * Process the use of a crate inventory item. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + * @param item The item that was used + * @param hand The hand that the item was used from + */ + public void processCrateUse(Kit kit, Player player, ItemStack item, CompatibleHand hand) { + Crate crate = plugin.getCrateManager().getCrate(item); + + if (crate == null || !giveKit(kit, player, crate.getKitAmount() != 0 ? crate.getKitAmount() : -1, crate.getKitAmount())) { + return; + } + + ItemUtils.takeActiveItem(player, hand); + + plugin.getLocale().getMessage("event.crate.success") + .processPlaceholder("crate", crate.getName()).sendPrefixedMessage(player); + } + + /** + * Process the purchase of a kit. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + */ + public void processPurchaseUse(Kit kit, Player player) { + if (!EconomyManager.isEnabled()) { + return; + } + + String name = kit.getName(); + + if (!player.hasPermission("ultimatekits.buy." + kit.getKey())) { + UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") + .sendPrefixedMessage(player); + return; + } + + if (!EconomyManager.hasBalance(player, kit.getPrice())) { + plugin.getLocale().getMessage("event.claim.cannotafford") + .processPlaceholder("kit", name).sendPrefixedMessage(player); + return; + } + + if (kit.getDelay() > 0 && kit.getNextUse(player) != 0) { + plugin.getLocale().getMessage("event.claim.delay") + .processPlaceholder("time", TimeUtils.makeReadable(kit.getNextUse(player))) + .sendPrefixedMessage(player); + return; + } + + if (kit.getNextUse(player) == -1) { + plugin.getLocale().getMessage("event.claim.nottwice").sendPrefixedMessage(player); + return; + } + + if (giveKit(kit, player)) { + EconomyManager.withdrawBalance(player, kit.getPrice()); + if (kit.getDelay() != 0) { + kit.updateDelay(player); + } + + plugin.getLocale().getMessage("event.claim.purchasesuccess") + .processPlaceholder("kit", name).sendPrefixedMessage(player); + } + } + + /** + * Process the use of a kit. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + * @param forced Whether the kit should be given regardless of the delay + */ + public void processGenericUse(Kit kit, Player player, boolean forced) { + if (kit.getNextUse(player) == -1 && !forced) { + plugin.getLocale().getMessage("event.claim.nottwice").sendPrefixedMessage(player); + } else if (kit.getNextUse(player) <= 0 || forced) { + if (giveKit(kit, player)) { + kit.updateDelay(player); + if (kit.getKitAnimation() == KitAnimation.NONE) { + plugin.getLocale().getMessage("event.claim.givesuccess") + .processPlaceholder("kit", kit.getName()).sendPrefixedMessage(player); + } + } + } else { + plugin.getLocale().getMessage("event.claim.delay") + .processPlaceholder("time", TimeUtils.makeReadable(kit.getNextUse(player))) + .sendPrefixedMessage(player); + } + } + + /** + * Give a kit to a player. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + * @return True if the kit was given successfully, false otherwise + */ + public boolean giveKit(Kit kit, Player player) { + return giveKit(kit, player, kit.getContents().size(), -1); + } + + /** + * Give a kit to a player with a specified item amount and kit amount. + * + * @param kit The kit to give to the player + * @param player The player to give the kit to + * @param itemAmount The amount of items to give from the kit + * @param kitAmount The amount of times to give the kit + * @return True if the kit was given successfully, false otherwise + */ + private boolean giveKit(Kit kit, Player player, int itemAmount, int kitAmount) { + List kitItems = new ArrayList<>(kit.getContents()); + int itemGiveAmount = (kitAmount > 0) ? itemAmount * kitAmount : itemAmount; + + if (kit.getKitAnimation() == KitAnimation.ROULETTE) { + itemGiveAmount = 1; + } + + if (Settings.NO_REDEEM_WHEN_FULL.getBoolean() && !kit.hasRoom(player, itemGiveAmount)) { + plugin.getLocale().getMessage("event.claim.full").sendPrefixedMessage(player); + return false; + } + + if (Settings.SOUNDS_ENABLED.getBoolean() && kit.getKitAnimation() == KitAnimation.NONE) { + XSound.ENTITY_PLAYER_LEVELUP.play(player, 0.6F, 15.0F); + } + + return giveKitItems(kit, kitItems, itemGiveAmount, player); + } + + /** + * Give kit items to a player. + * + * @param kit The kit to give items from + * @param kitItems The list of kit items to give + * @param itemGiveAmount The amount of items to give + * @param player The player to give the items to + * @return True if the items were given successfully, false otherwise + */ + private boolean giveKitItems(Kit kit, List kitItems, int itemGiveAmount, Player player) { + if (kitItems.size() != itemGiveAmount || kit.getKitAnimation() != KitAnimation.NONE) { + Collections.shuffle(kitItems); + } + + for (KitItem item : kitItems) { + if (itemGiveAmount <= 0) { + break; + } + + double chance = (item.getChance() == 0) ? 100 : item.getChance(); + double random = Math.random() * 100; + itemGiveAmount--; + + if (random < chance) { + if (kit.getKitAnimation() != KitAnimation.NONE) { + plugin.getGuiManager().showGUI(player, new AnimatedKitGui(plugin, player, kit, item.getItem())); + return true; + } else { + ItemStack parseStack = item.getContent().process(player); + if (!(item.getContent() instanceof KitContentEconomy || item.getContent() instanceof KitContentCommand)) { + if (Settings.AUTO_EQUIP_ARMOR.getBoolean() && ArmorType.equip(player, parseStack)) { + continue; + } + + Map overfilled = player.getInventory().addItem(parseStack); + for (ItemStack item2 : overfilled.values()) { + player.getWorld().dropItemNaturally(player.getLocation(), item2); + } + } + } + } + } + + player.updateInventory(); + return true; + } + + /** + * Display a kit preview to a player. + * + * @param kit The kit to display + * @param player The player to display the preview to + * @param manager The GUI manager + * @param back The GUI to go back to + */ + public void display(Kit kit, Player player, GuiManager manager, Gui back) { + if (!kit.hasPermissionToPreview(player)) { + UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") + .sendPrefixedMessage(player); + return; + } + + if (kit.getKey() == null) { + plugin.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player); + return; + } + + plugin.getLocale().getMessage("event.preview.kit") + .processPlaceholder("kit", kit.getName()).sendPrefixedMessage(player); + manager.showGUI(player, new PreviewKitGui(plugin, player, kit, back)); + } +} diff --git a/src/main/java/com/craftaro/ultimatekits/listeners/InteractListeners.java b/src/main/java/com/craftaro/ultimatekits/listeners/InteractListeners.java index 25a85c8..49cc6e8 100644 --- a/src/main/java/com/craftaro/ultimatekits/listeners/InteractListeners.java +++ b/src/main/java/com/craftaro/ultimatekits/listeners/InteractListeners.java @@ -9,6 +9,7 @@ import com.craftaro.ultimatekits.UltimateKits; import com.craftaro.ultimatekits.gui.BlockEditorGui; import com.craftaro.ultimatekits.kit.Kit; import com.craftaro.ultimatekits.kit.KitBlockData; +import com.craftaro.ultimatekits.kit.KitHandler; import com.craftaro.ultimatekits.kit.KitType; import com.craftaro.ultimatekits.settings.Settings; import org.bukkit.ChatColor; @@ -25,29 +26,27 @@ import org.bukkit.inventory.ItemStack; public class InteractListeners implements Listener { private final UltimateKits plugin; private final GuiManager guiManager; + private final KitHandler kitHandler; - public InteractListeners(UltimateKits plugin, GuiManager guiManager) { + public InteractListeners(UltimateKits plugin, GuiManager guiManager, KitHandler kitHandler) { this.plugin = plugin; this.guiManager = guiManager; + this.kitHandler = kitHandler; } @EventHandler public void onBlockInteract(PlayerInteractEvent event) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { - if (event.getHand() == EquipmentSlot.OFF_HAND) { + if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) + if (event.getHand() == EquipmentSlot.OFF_HAND) return; - } - } Block block = event.getClickedBlock(); - if (block == null) { + if (block == null) return; - } KitBlockData kitBlockData = this.plugin.getKitManager().getKit(block.getLocation()); - if (kitBlockData == null) { + if (kitBlockData == null) return; - } Kit kit = kitBlockData.getKit(); @@ -57,38 +56,37 @@ public class InteractListeners implements Listener { Material keyMaterial = Settings.KEY_MATERIAL.getMaterial().parseMaterial(); if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (player.isSneaking()) { + if (player.isSneaking()) return; - } event.setCancelled(true); if (kitBlockData.getType() == KitType.PREVIEW) { - kit.display(player, this.guiManager, null); + kitHandler.display(kit, player, this.guiManager, null); } else if (kitBlockData.getType() == KitType.CRATE) { if (itemInHand == keyMaterial) { - kit.processKeyUse(player); + kitHandler.processKeyUse(kit, player); } else { - this.plugin.getLocale().getMessage("event.crate.needkey").sendPrefixedMessage(player); + plugin.getLocale().getMessage("event.crate.needkey").sendPrefixedMessage(player); return; } } else if (kitBlockData.getType() == KitType.CLAIM) { if (!kit.hasPermissionToClaim(player)) { - this.plugin.getLocale().getMessage("command.general.noperms").sendPrefixedMessage(player); + plugin.getLocale().getMessage("command.general.noperms").sendPrefixedMessage(player); return; } if (kit.getNextUse(player) > 0) { long time = kit.getNextUse(player); - this.plugin.getLocale().getMessage("event.crate.notyet").processPlaceholder("time", TimeUtils.makeReadable(time)).sendPrefixedMessage(player); + plugin.getLocale().getMessage("event.crate.notyet").processPlaceholder("time", TimeUtils.makeReadable(time)).sendPrefixedMessage(player); return; } if (kit.getLink() != null || kit.getPrice() != 0) { - kit.buy(player, this.guiManager); + kitHandler.buy(kit, player, guiManager); } else { - kit.processGenericUse(player, false); + kitHandler.processGenericUse(kit, player, false); } kit.updateDelay(player); @@ -99,14 +97,20 @@ public class InteractListeners implements Listener { event.setCancelled(true); if (player.isSneaking() && player.hasPermission("ultimatekits.admin")) { - this.guiManager.showGUI(player, new BlockEditorGui(this.plugin, kitBlockData)); + guiManager.showGUI(player, new BlockEditorGui(plugin, kitBlockData)); return; } - kit.display(player, this.guiManager, null); + kitHandler.display(kit, player, guiManager, null); } } + /** + * When a crate item is used on any block. + * The crate item and the crate keys are not the same. + * + * @param event PlayerInteractEvent + */ @EventHandler public void onCrateClick(PlayerInteractEvent event) { // Would be better to use NBT to make the item persist over aesthetic changes. @@ -138,10 +142,9 @@ public class InteractListeners implements Listener { // Function if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { // Open the crate - kit.processCrateUse(player, item, CompatibleHand.getHand(event)); - } else // There are only left click actions left - { - kit.display(player, this.guiManager, null); + kitHandler.processCrateUse(kit, player, item, CompatibleHand.getHand(event)); + } else { + kitHandler.display(kit, player, this.guiManager, null); } } } diff --git a/src/main/java/com/craftaro/ultimatekits/listeners/PlayerListeners.java b/src/main/java/com/craftaro/ultimatekits/listeners/PlayerListeners.java index 156a418..725d487 100644 --- a/src/main/java/com/craftaro/ultimatekits/listeners/PlayerListeners.java +++ b/src/main/java/com/craftaro/ultimatekits/listeners/PlayerListeners.java @@ -17,16 +17,15 @@ public class PlayerListeners implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - if (player.hasPlayedBefore()) { + if (player.hasPlayedBefore()) return; - } - if (this.plugin.getKitManager().getKit(Settings.STARTER_KIT.getString()) == null + if (plugin.getKitManager().getKit(Settings.STARTER_KIT.getString()) == null || Settings.STARTER_KIT.getString() == null || Settings.STARTER_KIT.getString().equalsIgnoreCase("none")) { return; } - this.plugin.getKitManager().getKit(Settings.STARTER_KIT.getString()).giveKit(player); + plugin.getKitHandler().giveKit(plugin.getKitManager().getKit(Settings.STARTER_KIT.getString()), player); } } From 350ccac983c2200e0f6893b16d1acc29aa66a689 Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 11 Mar 2024 17:49:17 -0500 Subject: [PATCH 5/6] Clone kit items when given to players so the kit doesn't end up edited. --- src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java b/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java index f819623..5fab3c1 100644 --- a/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java +++ b/src/main/java/com/craftaro/ultimatekits/kit/KitHandler.java @@ -276,7 +276,7 @@ public class KitHandler { plugin.getGuiManager().showGUI(player, new AnimatedKitGui(plugin, player, kit, item.getItem())); return true; } else { - ItemStack parseStack = item.getContent().process(player); + ItemStack parseStack = item.getContent().process(player).clone(); if (!(item.getContent() instanceof KitContentEconomy || item.getContent() instanceof KitContentCommand)) { if (Settings.AUTO_EQUIP_ARMOR.getBoolean() && ArmorType.equip(player, parseStack)) { continue; From 94b9832f3ae701ee88f83e5fd42ff6cecff3a558 Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 11 Mar 2024 17:50:26 -0500 Subject: [PATCH 6/6] version 3.0.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f8af189..e9adae6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.craftaro UltimateKits - 3.0.0 + 3.0.1 UltimateKits Creating and displaying your server's kits has never been easier