From 9488cb02ce90c9847f2237a4a33ff149c1a5d16a Mon Sep 17 00:00:00 2001 From: Distemi Date: Sun, 12 May 2024 12:41:29 +0400 Subject: [PATCH] Fixing the creation of items from MMOItems --- .../commands/subcommands/ItemsSubCommand.java | 2 +- .../randomlootchest/hooks/MMOItemsHook.java | 8 +++++--- .../randomlootchest/hooks/MythicMobsHook.java | 6 ++++-- .../randomlootchest/managers/ChestsManager.java | 8 +++++++- .../randomlootchest/managers/ItemsManager.java | 2 +- .../randomlootchest/objects/RandomItem.java | 13 ++++++++++--- 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/plugin/src/main/java/me/dreamdevs/randomlootchest/commands/subcommands/ItemsSubCommand.java b/plugin/src/main/java/me/dreamdevs/randomlootchest/commands/subcommands/ItemsSubCommand.java index 2bfae6b..978dd83 100644 --- a/plugin/src/main/java/me/dreamdevs/randomlootchest/commands/subcommands/ItemsSubCommand.java +++ b/plugin/src/main/java/me/dreamdevs/randomlootchest/commands/subcommands/ItemsSubCommand.java @@ -57,7 +57,7 @@ public boolean execute(CommandSender commandSender, String[] args) { return true; } - RandomItem randomItem = new RandomItem(player.getInventory().getItemInMainHand(), chance, false); + RandomItem randomItem = new RandomItem(() -> player.getInventory().getItemInMainHand().clone(), chance, false); RandomLootChestMain.getInstance().getItemsManager().getItems().put(id, randomItem); RandomLootChestMain.getInstance().getItemsManager().save(); player.sendMessage(Language.ITEMS_ADDED_ITEM.toString()); diff --git a/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MMOItemsHook.java b/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MMOItemsHook.java index 0d6f884..6cb4e41 100644 --- a/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MMOItemsHook.java +++ b/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MMOItemsHook.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Optional; +import java.util.concurrent.Callable; public class MMOItemsHook { @@ -18,9 +19,10 @@ public MMOItemsHook() { Util.sendPluginMessage("&aHooked into MMOItems!"); } - public ItemStack getItemStack(@NotNull String type, @NotNull String itemId) { + public Callable getItemStack(@NotNull String type, @NotNull String itemId) { MMOItem mmoItem = MMOItems.plugin.getMMOItem(Type.get(type), itemId); - return Optional.ofNullable(mmoItem).map(mmoItem1 -> mmoItem1.newBuilder().build()).orElse(null); + if (mmoItem == null) + return () -> null; + return () -> mmoItem.newBuilder().build(); } - } \ No newline at end of file diff --git a/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MythicMobsHook.java b/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MythicMobsHook.java index 58013f9..e3878af 100644 --- a/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MythicMobsHook.java +++ b/plugin/src/main/java/me/dreamdevs/randomlootchest/hooks/MythicMobsHook.java @@ -4,6 +4,8 @@ import me.dreamdevs.randomlootchest.api.util.Util; import org.bukkit.inventory.ItemStack; +import java.util.concurrent.Callable; + public class MythicMobsHook { public static MythicMobsHook INSTANCE; @@ -16,8 +18,8 @@ public MythicMobsHook() { Util.sendPluginMessage("&aHooked into MythicMobs!"); } - public ItemStack getItemStack(String id) { - return mythicBukkit.getItemManager().getItemStack(id); + public Callable getItemStack(String id) { + return () -> mythicBukkit.getItemManager().getItemStack(id); } } \ No newline at end of file diff --git a/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ChestsManager.java b/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ChestsManager.java index 544f129..78623b7 100644 --- a/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ChestsManager.java +++ b/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ChestsManager.java @@ -29,6 +29,7 @@ import java.io.File; import java.util.*; +import java.util.concurrent.Callable; @Getter public class ChestsManager { @@ -135,7 +136,12 @@ public void load(RandomLootChestMain plugin) { itemStack.setItemMeta(copiedMeta); } - RandomItem randomItem = new RandomItem(itemStack, config.getDouble(CONTENTS + "." + content + ".Chance"), config.getBoolean(CONTENTS + "." + content + ".RandomAmount", false)); + ItemStack finalItemStack = itemStack; + Callable callable = () -> null; + if (finalItemStack != null) { + callable = finalItemStack::clone; + } + RandomItem randomItem = new RandomItem(callable, config.getDouble(CONTENTS + "." + content + ".Chance"), config.getBoolean(CONTENTS + "." + content + ".RandomAmount", false)); chestGame.getItemStacks().add(randomItem); } catch (NullPointerException e) { diff --git a/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ItemsManager.java b/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ItemsManager.java index 8cb25ce..17063ef 100644 --- a/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ItemsManager.java +++ b/plugin/src/main/java/me/dreamdevs/randomlootchest/managers/ItemsManager.java @@ -48,7 +48,7 @@ public void load(RandomLootChestMain plugin) { itemsSection.getInt(string+".Amount",1), itemsSection.getString(string+".DisplayName"), itemsSection.getStringList(string+".DisplayLore"), enchantments, itemsSection.getBoolean(string+".Unbreakable", false), itemsSection.getBoolean(string+".Glowing",false)); - items.put(string, new RandomItem(itemStack, section.get().getDouble(string+".Chance"), section.get().getBoolean(string+".RandomAmount", false))); + items.put(string, new RandomItem(() -> itemStack.clone(), section.get().getDouble(string+".Chance"), section.get().getBoolean(string+".RandomAmount", false))); })); } diff --git a/plugin/src/main/java/me/dreamdevs/randomlootchest/objects/RandomItem.java b/plugin/src/main/java/me/dreamdevs/randomlootchest/objects/RandomItem.java index 2b56074..ad11026 100644 --- a/plugin/src/main/java/me/dreamdevs/randomlootchest/objects/RandomItem.java +++ b/plugin/src/main/java/me/dreamdevs/randomlootchest/objects/RandomItem.java @@ -6,15 +6,16 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Callable; @AllArgsConstructor public class RandomItem implements IRandomItem { - private ItemStack itemStack; + private Callable itemStack; private double chance; private boolean randomDropAmount; - public RandomItem(ItemStack itemStack, double chance) { + public RandomItem(Callable itemStack, double chance) { this.itemStack = itemStack; this.chance = chance; this.randomDropAmount = false; @@ -22,7 +23,11 @@ public RandomItem(ItemStack itemStack, double chance) { @Override public ItemStack getItemStack() { - return this.itemStack; + try { + return this.itemStack.call(); + } catch (Exception e) { + throw new RuntimeException(e); + } } @Override @@ -40,11 +45,13 @@ public void setRandomDropAmount(boolean randomDropAmount) { } public String getDisplayName() { + var itemStack = getItemStack(); return (itemStack.hasItemMeta() && itemStack.getItemMeta() != null && itemStack.getItemMeta().hasDisplayName()) ? itemStack.getItemMeta().getDisplayName() : itemStack.getType().name(); } public List getLore() { + var itemStack = getItemStack(); return (itemStack.hasItemMeta() && itemStack.getItemMeta() != null && itemStack.getItemMeta().hasLore()) ? itemStack.getItemMeta().getLore() : new ArrayList<>(); }