From 14c589c3484f4893d233887f6b76a5f55cece064 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Tue, 10 Oct 2023 04:03:32 +0800 Subject: [PATCH] item properties --- .../CustomFishingPluginImpl.java | 16 ++ .../command/sub/GUIEditorCommand.java | 2 +- .../gui/icon/property/item/AmountItem.java | 61 ++++++ .../gui/icon/property/{ => item}/CMDItem.java | 4 +- .../property/{ => item}/DisplayNameItem.java | 2 +- .../icon/property/item/DurabilityItem.java | 60 ++++++ .../gui/icon/property/item/Head64Item.java | 81 ++++++++ .../gui/icon/property/item/ItemFlagItem.java | 65 +++++++ .../icon/property/{ => item}/LoreItem.java | 2 +- .../gui/icon/property/item/MaterialItem.java | 60 ++++++ .../icon/property/item/PreventGrabItem.java | 47 +++++ .../gui/icon/property/item/PriceItem.java | 66 +++++++ .../property/item/RandomDurabilityItem.java | 48 +++++ .../gui/icon/property/item/SizeItem.java | 60 ++++++ .../gui/icon/property/item/StackableItem.java | 47 +++++ .../gui/icon/property/item/TagItem.java | 47 +++++ .../icon/property/item/UnbreakableItem.java | 47 +++++ .../icon/property/loot/DisableGameItem.java | 47 +++++ .../icon/property/loot/DisableStatsItem.java | 47 +++++ .../icon/property/loot/InstantGameItem.java | 47 +++++ .../gui/icon/property/loot/NickItem.java | 60 ++++++ .../gui/icon/property/loot/ScoreItem.java | 60 ++++++ .../icon/property/loot/ShowInFinderItem.java | 47 +++++ .../gui/page/file/FileSelector.java | 4 +- .../gui/page/item/BaitEditor.java | 123 ++++++++++++ .../gui/page/item/HookEditor.java | 123 ++++++++++++ .../gui/page/item/ItemEditor.java | 23 ++- .../gui/page/item/ItemSelector.java | 46 +++-- .../gui/page/item/RodEditor.java | 121 ++++++++++++ .../gui/page/property/AmountEditor.java | 122 ++++++++++++ .../page/property/CustomModelDataEditor.java | 4 +- .../gui/page/property/DisplayNameEditor.java | 6 +- .../gui/page/property/DurabilityEditor.java | 125 +++++++++++++ .../gui/page/property/ItemFlagEditor.java | 123 ++++++++++++ .../gui/page/property/MaterialEditor.java | 143 ++++++++++++++ .../gui/page/property/NickEditor.java | 104 +++++++++++ .../gui/page/property/PriceEditor.java | 171 +++++++++++++++++ .../gui/page/property/ScoreEditor.java | 124 +++++++++++++ .../gui/page/property/SizeEditor.java | 175 ++++++++++++++++++ .../mechanic/item/ItemManagerImpl.java | 33 ++-- .../mechanic/misc/ChatCatcherManager.java | 81 ++++++++ 41 files changed, 2620 insertions(+), 54 deletions(-) create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/AmountItem.java rename plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/{ => item}/CMDItem.java (95%) rename plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/{ => item}/DisplayNameItem.java (97%) create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DurabilityItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/Head64Item.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/ItemFlagItem.java rename plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/{ => item}/LoreItem.java (97%) create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/MaterialItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PreventGrabItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PriceItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/RandomDurabilityItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/SizeItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/StackableItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/TagItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/UnbreakableItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableGameItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableStatsItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/InstantGameItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/NickItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ScoreItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ShowInFinderItem.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/item/BaitEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/item/HookEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/item/RodEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/AmountEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DurabilityEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ItemFlagEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/MaterialEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/NickEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/PriceEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ScoreEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/gui/page/property/SizeEditor.java create mode 100644 plugin/src/main/java/net/momirealms/customfishing/mechanic/misc/ChatCatcherManager.java diff --git a/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java b/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java index 3dc22c51..e44218dc 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java @@ -28,6 +28,7 @@ import net.momirealms.customfishing.api.util.ReflectionUtils; import net.momirealms.customfishing.command.CommandManagerImpl; import net.momirealms.customfishing.compatibility.IntegrationManagerImpl; import net.momirealms.customfishing.compatibility.papi.PlaceholderManagerImpl; +import net.momirealms.customfishing.gui.icon.property.item.PriceItem; import net.momirealms.customfishing.libraries.libraryloader.LibraryLoader; import net.momirealms.customfishing.mechanic.action.ActionManagerImpl; import net.momirealms.customfishing.mechanic.bag.BagManagerImpl; @@ -41,6 +42,7 @@ import net.momirealms.customfishing.mechanic.hook.HookManagerImpl; import net.momirealms.customfishing.mechanic.item.ItemManagerImpl; import net.momirealms.customfishing.mechanic.loot.LootManagerImpl; import net.momirealms.customfishing.mechanic.market.MarketManagerImpl; +import net.momirealms.customfishing.mechanic.misc.ChatCatcherManager; import net.momirealms.customfishing.mechanic.misc.CoolDownManager; import net.momirealms.customfishing.mechanic.requirement.RequirementManagerImpl; import net.momirealms.customfishing.mechanic.statistic.StatisticsManagerImpl; @@ -64,6 +66,7 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { private static ProtocolManager protocolManager; private CoolDownManager coolDownManager; + private ChatCatcherManager chatCatcherManager; public CustomFishingPluginImpl() { super(); @@ -103,6 +106,7 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { this.coolDownManager = new CoolDownManager(this); this.totemManager = new TotemManagerImpl(this); this.hookManager = new HookManagerImpl(this); + this.chatCatcherManager = new ChatCatcherManager(this); this.reload(); if (CFConfig.metrics) new Metrics(this, 16648); @@ -136,6 +140,7 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { ((TotemManagerImpl) this.totemManager).disable(); ((HookManagerImpl) this.hookManager).disable(); this.coolDownManager.disable(); + this.chatCatcherManager.disable(); this.commandManager.unload(); HandlerList.unregisterAll(this); } @@ -185,6 +190,8 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { this.commandManager.load(); this.coolDownManager.unload(); this.coolDownManager.load(); + this.chatCatcherManager.unload(); + this.chatCatcherManager.load(); } /** @@ -302,6 +309,15 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { return coolDownManager; } + /** + * Gets the ChatCatcherManager instance associated with the plugin. + * + * @return The ChatCatcherManager instance. + */ + public ChatCatcherManager getChatCatcherManager() { + return chatCatcherManager; + } + /** * Retrieves the ProtocolManager instance used for managing packets. * diff --git a/plugin/src/main/java/net/momirealms/customfishing/command/sub/GUIEditorCommand.java b/plugin/src/main/java/net/momirealms/customfishing/command/sub/GUIEditorCommand.java index 85ddb7ae..330700b6 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/command/sub/GUIEditorCommand.java +++ b/plugin/src/main/java/net/momirealms/customfishing/command/sub/GUIEditorCommand.java @@ -11,7 +11,7 @@ public class GUIEditorCommand { public static GUIEditorCommand INSTANCE = new GUIEditorCommand(); public CommandAPICommand getEditorCommand() { - return new CommandAPICommand("edit") + return new CommandAPICommand("editor") .executesPlayer((player, arg) -> { new FileSelector(player, new File(CustomFishingPlugin.get().getDataFolder(), "contents")); }); diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/AmountItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/AmountItem.java new file mode 100644 index 00000000..28b6c140 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/AmountItem.java @@ -0,0 +1,61 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.AmountEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class AmountItem extends AbstractItem { + + private final ItemPage itemPage; + + public AmountItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.IRON_NUGGET) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#1E90FF>● Amount" + ))) + .setAmount(itemPage.getSection().getInt("amount", 1)); + + if (itemPage.getSection().contains("amount")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getInt("amount") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new AmountEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("amount", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/CMDItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/CMDItem.java similarity index 95% rename from plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/CMDItem.java rename to plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/CMDItem.java index 7e31382d..5912fc43 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/CMDItem.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/CMDItem.java @@ -1,4 +1,4 @@ -package net.momirealms.customfishing.gui.icon.property; +package net.momirealms.customfishing.gui.icon.property.item; import net.momirealms.customfishing.adventure.AdventureManagerImpl; import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; @@ -50,7 +50,7 @@ public class CMDItem extends AbstractItem { @Override public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { if (clickType.isLeftClick()) { - new CustomModelDataEditor(player, itemPage, itemPage.getSection().getString("material", ""), itemPage.getSection()); + new CustomModelDataEditor(player, itemPage, itemPage.getSection()); } else if (clickType.isRightClick()) { itemPage.getSection().set("custom-model-data", null); itemPage.save(); diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/DisplayNameItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DisplayNameItem.java similarity index 97% rename from plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/DisplayNameItem.java rename to plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DisplayNameItem.java index 8aab0ee8..1a138d70 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/DisplayNameItem.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DisplayNameItem.java @@ -1,4 +1,4 @@ -package net.momirealms.customfishing.gui.icon.property; +package net.momirealms.customfishing.gui.icon.property.item; import net.momirealms.customfishing.adventure.AdventureManagerImpl; import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DurabilityItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DurabilityItem.java new file mode 100644 index 00000000..780c7442 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/DurabilityItem.java @@ -0,0 +1,60 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.DurabilityEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class DurabilityItem extends AbstractItem { + + private final ItemPage itemPage; + + public DurabilityItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.DIAMOND_CHESTPLATE) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#1E90FF>● Custom Durability" + ))); + + if (itemPage.getSection().contains("max-durability")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getInt("max-durability") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new DurabilityEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("max-durability", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/Head64Item.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/Head64Item.java new file mode 100644 index 00000000..adf1611d --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/Head64Item.java @@ -0,0 +1,81 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.CustomFishingPluginImpl; +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.PriceEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +import java.util.ArrayList; + +public class Head64Item extends AbstractItem { + + private final ItemPage itemPage; + + public Head64Item(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.PLAYER_HEAD) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#2E8B57>● Head64" + ))); + + if (itemPage.getSection().contains("head64")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + ))); + String head64 = itemPage.getSection().getString("head64", ""); + + ArrayList list = new ArrayList<>(); + for (int i = 0; i < head64.length(); i += 16) { + if (i + 16 > head64.length()) { + list.add(head64.substring(i)); + } else { + list.add(head64.substring(i, i + 16)); + } + } + for (String line : list) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + ""+ line + ))); + } + + itemBuilder.addLoreLines("").addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + player.closeInventory(); + AdventureManagerImpl.getInstance().sendMessageWithPrefix(player, "Input the head64 value in chat"); + ((CustomFishingPluginImpl) CustomFishingPlugin.get()).getChatCatcherManager().catchMessage(player, "head64", itemPage); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("head64", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/ItemFlagItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/ItemFlagItem.java new file mode 100644 index 00000000..101efd3a --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/ItemFlagItem.java @@ -0,0 +1,65 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.ItemFlagEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class ItemFlagItem extends AbstractItem { + + private final ItemPage itemPage; + + public ItemFlagItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.CYAN_BANNER) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#E6E6FA>● Item Flag" + ))); + + if (itemPage.getSection().contains("item-flags")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + ))); + for (String lore : itemPage.getSection().getStringList("item-flags")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - " + lore + ))); + } + itemBuilder.addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new ItemFlagEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("item-flags", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/LoreItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/LoreItem.java similarity index 97% rename from plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/LoreItem.java rename to plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/LoreItem.java index 7a87865b..4e25452e 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/LoreItem.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/LoreItem.java @@ -1,4 +1,4 @@ -package net.momirealms.customfishing.gui.icon.property; +package net.momirealms.customfishing.gui.icon.property.item; import net.momirealms.customfishing.adventure.AdventureManagerImpl; import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/MaterialItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/MaterialItem.java new file mode 100644 index 00000000..b241b196 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/MaterialItem.java @@ -0,0 +1,60 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.MaterialEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class MaterialItem extends AbstractItem { + + private final ItemPage itemPage; + + public MaterialItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.COD) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF00FF>● Material" + ))); + + if (itemPage.getSection().contains("material")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getString("material") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new MaterialEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("material", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PreventGrabItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PreventGrabItem.java new file mode 100644 index 00000000..e9c6cbd5 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PreventGrabItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class PreventGrabItem extends AbstractItem { + + private final ItemPage itemPage; + + public PreventGrabItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.DRAGON_EGG) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF4500>● Prevent Grabbing" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("prevent-grabbing", false) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("prevent-grabbing", !itemPage.getSection().getBoolean("prevent-grabbing", false)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PriceItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PriceItem.java new file mode 100644 index 00000000..b14e3cdc --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/PriceItem.java @@ -0,0 +1,66 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.PriceEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class PriceItem extends AbstractItem { + + private final ItemPage itemPage; + + public PriceItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.GOLD_INGOT) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FFD700>● Price" + ))); + + if (itemPage.getSection().contains("price")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - base: " + itemPage.getSection().getDouble("price.base") + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - bonus: " + itemPage.getSection().getDouble("price.bonus") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new PriceEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("price", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/RandomDurabilityItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/RandomDurabilityItem.java new file mode 100644 index 00000000..13624402 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/RandomDurabilityItem.java @@ -0,0 +1,48 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class RandomDurabilityItem extends AbstractItem { + + private final ItemPage itemPage; + + public RandomDurabilityItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.LEATHER_BOOTS) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FFFF00>● Random Durability" + ))) + .setDamage(15); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("random-durability", false) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("random-durability", !itemPage.getSection().getBoolean("random-durability", false)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/SizeItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/SizeItem.java new file mode 100644 index 00000000..df6530ca --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/SizeItem.java @@ -0,0 +1,60 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.SizeEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class SizeItem extends AbstractItem { + + private final ItemPage itemPage; + + public SizeItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.PUFFERFISH) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FFF0F5>● Size" + ))); + + if (itemPage.getSection().contains("size")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getString("size") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new SizeEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("size", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/StackableItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/StackableItem.java new file mode 100644 index 00000000..d297bd5f --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/StackableItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class StackableItem extends AbstractItem { + + private final ItemPage itemPage; + + public StackableItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.CHEST_MINECART) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#9370DB>● Stackable" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("stackable", true) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("stackable", !itemPage.getSection().getBoolean("stackable", true)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/TagItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/TagItem.java new file mode 100644 index 00000000..c4736363 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/TagItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class TagItem extends AbstractItem { + + private final ItemPage itemPage; + + public TagItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.TOTEM_OF_UNDYING) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#2E8B57>● Tag" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("tag", true) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("tag", !itemPage.getSection().getBoolean("tag", true)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/UnbreakableItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/UnbreakableItem.java new file mode 100644 index 00000000..445e2f02 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/item/UnbreakableItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class UnbreakableItem extends AbstractItem { + + private final ItemPage itemPage; + + public UnbreakableItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.BEDROCK) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#C0C0C0>● Unbreakable" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("unbreakable", false) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("unbreakable", !itemPage.getSection().getBoolean("unbreakable", false)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableGameItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableGameItem.java new file mode 100644 index 00000000..67cf3f32 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableGameItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.loot; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class DisableGameItem extends AbstractItem { + + private final ItemPage itemPage; + + public DisableGameItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.LEAD) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#8B4513>● Disable Game" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("disable-game", false) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("disable-game", !itemPage.getSection().getBoolean("disable-game", false)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableStatsItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableStatsItem.java new file mode 100644 index 00000000..0f1dc5e7 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/DisableStatsItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.loot; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class DisableStatsItem extends AbstractItem { + + private final ItemPage itemPage; + + public DisableStatsItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.WRITTEN_BOOK) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#CD853F>● Disable Statistics" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("disable-stat", false) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("disable-game", !itemPage.getSection().getBoolean("disable-stat", false)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/InstantGameItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/InstantGameItem.java new file mode 100644 index 00000000..90862b0e --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/InstantGameItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.loot; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class InstantGameItem extends AbstractItem { + + private final ItemPage itemPage; + + public InstantGameItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.FISHING_ROD) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#7B68EE>● Instant Game" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("instant-game", false) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("instant-game", !itemPage.getSection().getBoolean("instant-game", false)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/NickItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/NickItem.java new file mode 100644 index 00000000..9df7eecf --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/NickItem.java @@ -0,0 +1,60 @@ +package net.momirealms.customfishing.gui.icon.property.loot; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.NickEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class NickItem extends AbstractItem { + + private final ItemPage itemPage; + + public NickItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.WRITABLE_BOOK) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF00>● Nick" + ))); + + if (itemPage.getSection().contains("nick")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getString("nick") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new NickEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("nick", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ScoreItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ScoreItem.java new file mode 100644 index 00000000..01936056 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ScoreItem.java @@ -0,0 +1,60 @@ +package net.momirealms.customfishing.gui.icon.property.loot; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.page.property.ScoreEditor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class ScoreItem extends AbstractItem { + + private final ItemPage itemPage; + + public ScoreItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.NETHER_STAR) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF1493>● Score" + ))); + + if (itemPage.getSection().contains("score")) { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getDouble("score") + ))) + .addLoreLines(""); + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to edit" + ))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#FF6347> -> Right click to reset" + ))); + } else { + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Left click to set" + ))); + } + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick()) { + new ScoreEditor(player, itemPage, itemPage.getSection()); + } else if (clickType.isRightClick()) { + itemPage.getSection().set("score", null); + itemPage.save(); + itemPage.reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ShowInFinderItem.java b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ShowInFinderItem.java new file mode 100644 index 00000000..3b793711 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/icon/property/loot/ShowInFinderItem.java @@ -0,0 +1,47 @@ +package net.momirealms.customfishing.gui.icon.property.loot; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.ItemPage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; + +public class ShowInFinderItem extends AbstractItem { + + private final ItemPage itemPage; + + public ShowInFinderItem(ItemPage itemPage) { + this.itemPage = itemPage; + } + + @Override + public ItemProvider getItemProvider() { + ItemBuilder itemBuilder = new ItemBuilder(Material.COMPASS) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#5F9EA0>● Show In Fish Finder" + ))); + + itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Current value: " + itemPage.getSection().getBoolean("show-in-fishfinder", true) + ))) + .addLoreLines("") + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to toggle" + ))); + + return itemBuilder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + itemPage.getSection().set("show-in-fishfinder", !itemPage.getSection().getBoolean("show-in-fishfinder", true)); + itemPage.save(); + itemPage.reOpen(); + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/file/FileSelector.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/file/FileSelector.java index 6ba58579..25b56781 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/page/file/FileSelector.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/file/FileSelector.java @@ -98,8 +98,8 @@ public class FileSelector { String[] split = path.split("\\\\"); String type = split[3]; switch (type) { - case "item" -> { - new ItemSelector(player, file); + case "item", "rod", "bait", "util", "hook" -> { + new ItemSelector(player, file, type); } } } diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/BaitEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/BaitEditor.java new file mode 100644 index 00000000..f07a6882 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/BaitEditor.java @@ -0,0 +1,123 @@ +package net.momirealms.customfishing.gui.page.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import net.momirealms.customfishing.gui.icon.BackToPageItem; +import net.momirealms.customfishing.gui.icon.NextPageItem; +import net.momirealms.customfishing.gui.icon.PreviousPageItem; +import net.momirealms.customfishing.gui.icon.property.item.*; +import net.momirealms.customfishing.gui.icon.property.loot.*; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.gui.structure.Markers; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +import java.util.ArrayList; +import java.util.List; + +public class BaitEditor implements ItemPage { + + private final Player player; + private final ItemSelector itemSelector; + private final ConfigurationSection section; + private final String key; + + public BaitEditor(Player player, String key, ItemSelector itemSelector, ConfigurationSection section) { + this.player = player; + this.section = section; + this.itemSelector = itemSelector; + this.key = key; + this.reOpen(); + } + + @Override + public void reOpen() { + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + Gui upperGui = Gui.normal() + .setStructure( + "# a #" + ) + .addIngredient('a', new RefreshExample()) + .addIngredient('#', border) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # a # c # b # #" + ) + .addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL) + .addIngredient('#', new BackGroundItem()) + .addIngredient('a', new PreviousPageItem()) + .addIngredient('b', new NextPageItem()) + .addIngredient('c', new BackToPageItem(itemSelector)) + .setContent(getItemList()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key) + )) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + @Override + public void save() { + itemSelector.save(); + } + + public class RefreshExample extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(CustomFishingPlugin.get().getItemManager().getItemBuilder(section, "bait", key).build(player)); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + notifyWindows(); + } + } + + public List getItemList() { + ArrayList items = new ArrayList<>(); + items.add(new MaterialItem(this)); + items.add(new DisplayNameItem(this)); + items.add(new LoreItem(this)); + items.add(new CMDItem(this)); + items.add(new TagItem(this)); + items.add(new UnbreakableItem(this)); + items.add(new DurabilityItem(this)); + items.add(new RandomDurabilityItem(this)); + items.add(new StackableItem(this)); + items.add(new ItemFlagItem(this)); + items.add(new Head64Item(this)); + return items; + } + + @Override + public ConfigurationSection getSection() { + return section; + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/HookEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/HookEditor.java new file mode 100644 index 00000000..187d52de --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/HookEditor.java @@ -0,0 +1,123 @@ +package net.momirealms.customfishing.gui.page.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import net.momirealms.customfishing.gui.icon.BackToPageItem; +import net.momirealms.customfishing.gui.icon.NextPageItem; +import net.momirealms.customfishing.gui.icon.PreviousPageItem; +import net.momirealms.customfishing.gui.icon.property.item.*; +import net.momirealms.customfishing.gui.icon.property.loot.*; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.gui.structure.Markers; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +import java.util.ArrayList; +import java.util.List; + +public class HookEditor implements ItemPage { + + private final Player player; + private final ItemSelector itemSelector; + private final ConfigurationSection section; + private final String key; + + public HookEditor(Player player, String key, ItemSelector itemSelector, ConfigurationSection section) { + this.player = player; + this.section = section; + this.itemSelector = itemSelector; + this.key = key; + this.reOpen(); + } + + @Override + public void reOpen() { + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + Gui upperGui = Gui.normal() + .setStructure( + "# a #" + ) + .addIngredient('a', new RefreshExample()) + .addIngredient('#', border) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # a # c # b # #" + ) + .addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL) + .addIngredient('#', new BackGroundItem()) + .addIngredient('a', new PreviousPageItem()) + .addIngredient('b', new NextPageItem()) + .addIngredient('c', new BackToPageItem(itemSelector)) + .setContent(getItemList()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key) + )) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + @Override + public void save() { + itemSelector.save(); + } + + public class RefreshExample extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(CustomFishingPlugin.get().getItemManager().getItemBuilder(section, "item", key).build(player)); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + notifyWindows(); + } + } + + public List getItemList() { + ArrayList items = new ArrayList<>(); + items.add(new MaterialItem(this)); + items.add(new DisplayNameItem(this)); + items.add(new LoreItem(this)); + items.add(new CMDItem(this)); + items.add(new TagItem(this)); + items.add(new UnbreakableItem(this)); + items.add(new DurabilityItem(this)); + items.add(new RandomDurabilityItem(this)); + items.add(new StackableItem(this)); + items.add(new ItemFlagItem(this)); + items.add(new Head64Item(this)); + return items; + } + + @Override + public ConfigurationSection getSection() { + return section; + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemEditor.java index dc7d734e..a166aa43 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemEditor.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemEditor.java @@ -8,9 +8,8 @@ import net.momirealms.customfishing.gui.icon.BackGroundItem; import net.momirealms.customfishing.gui.icon.BackToPageItem; import net.momirealms.customfishing.gui.icon.NextPageItem; import net.momirealms.customfishing.gui.icon.PreviousPageItem; -import net.momirealms.customfishing.gui.icon.property.CMDItem; -import net.momirealms.customfishing.gui.icon.property.DisplayNameItem; -import net.momirealms.customfishing.gui.icon.property.LoreItem; +import net.momirealms.customfishing.gui.icon.property.item.*; +import net.momirealms.customfishing.gui.icon.property.loot.*; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; @@ -103,9 +102,27 @@ public class ItemEditor implements ItemPage { public List getItemList() { ArrayList items = new ArrayList<>(); + items.add(new MaterialItem(this)); + items.add(new NickItem(this)); items.add(new DisplayNameItem(this)); items.add(new LoreItem(this)); items.add(new CMDItem(this)); + items.add(new AmountItem(this)); + items.add(new TagItem(this)); + items.add(new UnbreakableItem(this)); + items.add(new DurabilityItem(this)); + items.add(new RandomDurabilityItem(this)); + items.add(new StackableItem(this)); + items.add(new PreventGrabItem(this)); + items.add(new PriceItem(this)); + items.add(new ShowInFinderItem(this)); + items.add(new DisableStatsItem(this)); + items.add(new DisableGameItem(this)); + items.add(new InstantGameItem(this)); + items.add(new ScoreItem(this)); + items.add(new SizeItem(this)); + items.add(new ItemFlagItem(this)); + items.add(new Head64Item(this)); return items; } diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemSelector.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemSelector.java index 530d920b..7ff9d73b 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemSelector.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/ItemSelector.java @@ -31,7 +31,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import java.util.Map; public class ItemSelector implements YamlPage { @@ -42,11 +41,13 @@ public class ItemSelector implements YamlPage { private String prefix; private final File file; private long coolDown; + private String type; - public ItemSelector(Player player, File file) { + public ItemSelector(Player player, File file, String type) { this.yaml = YamlConfiguration.loadConfiguration(file); this.player = player; this.file = file; + this.type = type; this.prefix = SEARCH; this.reOpenWithFilter(SEARCH); } @@ -109,21 +110,15 @@ public class ItemSelector implements YamlPage { if (!prefix.equals(SEARCH) && !entry.getKey().startsWith(prefix)) continue; String material = section.getString("material"); if (material != null) { - if (material.contains(":")) { - ItemStack itemStack = CustomFishingPlugin.get().getItemManager().buildAnyPluginItemByID(player, material); - if (itemStack != null) { - ItemBuilder itemBuilder = new ItemBuilder(itemStack.getType()); - itemBuilder.setCustomModelData(itemStack.getItemMeta().getCustomModelData()); - itemBuilder.setCustomModelData(section.getInt("custom-model-data")); - itemList.add(new ItemInList(key, itemBuilder, this)); - continue; - } - } else { - ItemBuilder itemBuilder = new ItemBuilder(Material.valueOf(material.toUpperCase(Locale.ENGLISH))); - itemBuilder.setCustomModelData(section.getInt("custom-model-data")); - itemList.add(new ItemInList(key, itemBuilder, this)); - continue; + if (!material.contains(":")) { + material = "CustomFishing:" + type + ":" + key; } + ItemStack appearance = CustomFishingPlugin.get().getItemManager().getItemStackAppearance(player, material); + ItemBuilder itemBuilder = new ItemBuilder(appearance); + if (section.contains("custom-model-data")) + itemBuilder.setCustomModelData(section.getInt("custom-model-data")); + itemList.add(new ItemInList(key, itemBuilder, this)); + continue; } } itemList.add(new ItemInList(key, new ItemBuilder(Material.STRUCTURE_VOID), this)); @@ -135,6 +130,23 @@ public class ItemSelector implements YamlPage { yaml.set(key, null); } + public void openEditor(String key) { + switch (type) { + case "item" -> { + new ItemEditor(player, key, this, yaml.getConfigurationSection(key)); + } + case "rod" -> { + new RodEditor(player, key, this, yaml.getConfigurationSection(key)); + } + case "bait" -> { + new BaitEditor(player, key, this, yaml.getConfigurationSection(key)); + } + case "hook" -> { + new HookEditor(player, key, this, yaml.getConfigurationSection(key)); + } + } + } + @Override public void save() { try { @@ -171,7 +183,7 @@ public class ItemSelector implements YamlPage { @Override public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { if (clickType.isLeftClick()) { - new ItemEditor(player, key, itemSelector, itemSelector.yaml.getConfigurationSection(key)); + this.itemSelector.openEditor(key); } else if (clickType.isRightClick()) { this.itemSelector.removeKey(key); this.itemSelector.save(); diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/RodEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/RodEditor.java new file mode 100644 index 00000000..cf7e6505 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/item/RodEditor.java @@ -0,0 +1,121 @@ +package net.momirealms.customfishing.gui.page.item; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import net.momirealms.customfishing.gui.icon.BackToPageItem; +import net.momirealms.customfishing.gui.icon.NextPageItem; +import net.momirealms.customfishing.gui.icon.PreviousPageItem; +import net.momirealms.customfishing.gui.icon.property.item.*; +import net.momirealms.customfishing.gui.icon.property.loot.*; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.gui.structure.Markers; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +import java.util.ArrayList; +import java.util.List; + +public class RodEditor implements ItemPage { + + private final Player player; + private final ItemSelector itemSelector; + private final ConfigurationSection section; + private final String key; + + public RodEditor(Player player, String key, ItemSelector itemSelector, ConfigurationSection section) { + this.player = player; + this.section = section; + this.itemSelector = itemSelector; + this.key = key; + this.reOpen(); + } + + @Override + public void reOpen() { + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + Gui upperGui = Gui.normal() + .setStructure( + "# a #" + ) + .addIngredient('a', new RefreshExample()) + .addIngredient('#', border) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # a # c # b # #" + ) + .addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL) + .addIngredient('#', new BackGroundItem()) + .addIngredient('a', new PreviousPageItem()) + .addIngredient('b', new NextPageItem()) + .addIngredient('c', new BackToPageItem(itemSelector)) + .setContent(getItemList()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key) + )) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + @Override + public void save() { + itemSelector.save(); + } + + public class RefreshExample extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(CustomFishingPlugin.get().getItemManager().getItemBuilder(section, "rod", key).build(player)); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + notifyWindows(); + } + } + + public List getItemList() { + ArrayList items = new ArrayList<>(); + items.add(new MaterialItem(this)); + items.add(new DisplayNameItem(this)); + items.add(new LoreItem(this)); + items.add(new CMDItem(this)); + items.add(new TagItem(this)); + items.add(new UnbreakableItem(this)); + items.add(new DurabilityItem(this)); + items.add(new RandomDurabilityItem(this)); + items.add(new ItemFlagItem(this)); + return items; + } + + @Override + public ConfigurationSection getSection() { + return section; + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/AmountEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/AmountEditor.java new file mode 100644 index 00000000..b572f7e1 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/AmountEditor.java @@ -0,0 +1,122 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +public class AmountEditor { + + private final Player player; + private final YamlPage parentPage; + private String amount; + private final ConfigurationSection section; + + public AmountEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + Gui upperGui = Gui.normal() + .setStructure("a # b") + .addIngredient('a', new ItemBuilder(Material.IRON_NUGGET).setDisplayName(String.valueOf(section.getInt("amount", 1)))) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', new ItemStack(Material.AIR)) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Display Name") + )) + .addRenameHandler(s -> { + amount = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (amount == null || amount.isEmpty()) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + try { + int m = Integer.parseInt(amount); + if (m >= 1) { + return new ItemBuilder(Material.IRON_NUGGET) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))) + .setAmount(m); + } else { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } catch (NumberFormatException e) { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (amount == null || amount.isEmpty()) { + section.set("amount", null); + } else { + try { + int value = Integer.parseInt(amount); + if (value >= 1) { + section.set("amount", value); + } else { + return; + } + } catch (NumberFormatException e) { + return; + } + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/CustomModelDataEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/CustomModelDataEditor.java index 043847ad..0f4acfe1 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/CustomModelDataEditor.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/CustomModelDataEditor.java @@ -29,11 +29,11 @@ public class CustomModelDataEditor { private final ConfigurationSection section; private final String material; - public CustomModelDataEditor(Player player, YamlPage parentPage, String material, ConfigurationSection section) { + public CustomModelDataEditor(Player player, YamlPage parentPage, ConfigurationSection section) { this.player = player; this.parentPage = parentPage; this.section = section; - this.material = material; + this.material = section.getString("material"); Item border = new SimpleItem(new ItemBuilder(Material.AIR)); var confirm = new ConfirmIcon(); diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DisplayNameEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DisplayNameEditor.java index a6e2a52e..ee6e0074 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DisplayNameEditor.java +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DisplayNameEditor.java @@ -38,7 +38,7 @@ public class DisplayNameEditor { .setStructure( "a # b" ) - .addIngredient('a', new ItemBuilder(Material.NAME_TAG).setDisplayName(section.getString("display.name", "New Name"))) + .addIngredient('a', new ItemBuilder(Material.NAME_TAG).setDisplayName(section.getString("display.name", "New name"))) .addIngredient('#', border) .addIngredient('b', confirm) .build(); @@ -46,7 +46,7 @@ public class DisplayNameEditor { var gui = PagedGui.items() .setStructure( "x x x x x x x x x", - "x x x x a x x x x", + "x x x x x x x x x", "x x x x x x x x x", "# # # # c # # # #" ) @@ -82,7 +82,7 @@ public class DisplayNameEditor { } else { return new ItemBuilder(Material.NAME_TAG) .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( - name + "" + name ))) .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( "<#00FF7F> -> Click to confirm" diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DurabilityEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DurabilityEditor.java new file mode 100644 index 00000000..4d15b300 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/DurabilityEditor.java @@ -0,0 +1,125 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +public class DurabilityEditor { + + private final Player player; + private final YamlPage parentPage; + private String dur; + private final ConfigurationSection section; + + public DurabilityEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + Gui upperGui = Gui.normal() + .setStructure("a # b") + .addIngredient('a', new ItemBuilder(Material.NETHERITE_PICKAXE).setDisplayName(String.valueOf(section.getInt("max-durability", 64)))) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', new ItemStack(Material.AIR)) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Custom Durability") + )) + .addRenameHandler(s -> { + dur = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (dur == null || dur.isEmpty()) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + try { + int m = Integer.parseInt(dur); + if (m >= 1) { + return new ItemBuilder(Material.NETHERITE_PICKAXE) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "New value: " + dur + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))) + .setDamage(Math.max(0, Material.NETHERITE_PICKAXE.getMaxDurability() - m)); + } else { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } catch (NumberFormatException e) { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (dur == null || dur.isEmpty()) { + section.set("max-durability", null); + } else { + try { + int value = Integer.parseInt(dur); + if (value >= 1) { + section.set("max-durability", value); + } else { + return; + } + } catch (NumberFormatException e) { + return; + } + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ItemFlagEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ItemFlagEditor.java new file mode 100644 index 00000000..df7ba68d --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ItemFlagEditor.java @@ -0,0 +1,123 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemFlag; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.gui.structure.Markers; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +import java.util.ArrayList; +import java.util.List; + +public class ItemFlagEditor { + + private final Player player; + private final YamlPage parentPage; + private final List flags; + private final ConfigurationSection section; + + public ItemFlagEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + int index = 0; + this.flags = section.getStringList("item-flags"); + reOpen(); + } + + public void reOpen() { + Gui upperGui = Gui.normal() + .setStructure( + "# a #" + ) + .addIngredient('a', new ItemBuilder(CustomFishingPlugin.get().getItemManager().getItemBuilder(section, "item", "id").build(player))) + .addIngredient('#', new SimpleItem(new ItemBuilder(Material.AIR))) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .setContent(getContents()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Item Flag") + )) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public List getContents() { + ArrayList items = new ArrayList<>(); + for (ItemFlag itemFlag : ItemFlag.values()) { + items.add(new ItemFlagToggleItem(itemFlag.name())); + } + return items; + } + + public class ItemFlagToggleItem extends AbstractItem { + + private final String flag; + + public ItemFlagToggleItem(String flag) { + this.flag = flag; + } + + @Override + public ItemProvider getItemProvider() { + if (flags.contains(flag)) { + return new ItemBuilder(Material.GREEN_BANNER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "" + flag + ))); + } else { + return new ItemBuilder(Material.RED_BANNER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "" + flag + ))); + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (flags.contains(flag)) { + flags.remove(flag); + } else { + flags.add(flag); + } + if (flags.size() != 0) { + section.set("item-flags", flags); + } else { + section.set("item-flags", null); + } + parentPage.save(); + reOpen(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/MaterialEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/MaterialEditor.java new file mode 100644 index 00000000..17c9bde4 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/MaterialEditor.java @@ -0,0 +1,143 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import net.momirealms.customfishing.mechanic.item.ItemManagerImpl; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.gui.structure.Markers; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +import java.util.ArrayList; +import java.util.List; + +public class MaterialEditor { + + private final Player player; + private final YamlPage parentPage; + private String material; + private final ConfigurationSection section; + + public MaterialEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + this.material = section.getString("material"); + + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + var itemBuilder = new ItemBuilder(CustomFishingPlugin.get() + .getItemManager() + .getItemStackAppearance(player, material) + ) + .setDisplayName(section.getString("material", "")); + + if (section.contains("custom-model-data")) + itemBuilder.setCustomModelData(section.getInt("custom-model-data", 0)); + + Gui upperGui = Gui.normal() + .setStructure("a # b") + .addIngredient('a', itemBuilder) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .setContent(getCompatibilityItemList()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Material") + )) + .addRenameHandler(s -> { + material = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public List getCompatibilityItemList() { + ArrayList items = new ArrayList<>(); + for (String lib : ((ItemManagerImpl) CustomFishingPlugin.get().getItemManager()).getItemLibraries()) { + switch (lib) { + case "MMOItems", "CustomFishing" -> { + items.add(new SimpleItem(new ItemBuilder(Material.BELL).setDisplayName(lib + ":TYPE:ID"))); + } + case "vanilla" -> { + } + default -> { + items.add(new SimpleItem(new ItemBuilder(Material.BELL).setDisplayName(lib + ":ID"))); + } + } + + } + return items; + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (material == null || material.isEmpty()) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + var builder = new ItemBuilder( + CustomFishingPlugin.get() + .getItemManager() + .getItemStackAppearance(player, material) + ).setDisplayName("New value: " + material) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))); + if (section.contains("custom-model-data")) + builder.setCustomModelData(section.getInt("custom-model-data")); + + return builder; + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (material == null || material.isEmpty()) { + section.set("material", null); + } else if (CustomFishingPlugin.get().getItemManager().getItemStackAppearance(player, material).getType() == Material.BARRIER) { + return; + } else { + section.set("material", material); + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/NickEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/NickEditor.java new file mode 100644 index 00000000..3c88e665 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/NickEditor.java @@ -0,0 +1,104 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +public class NickEditor { + + private final Player player; + private final YamlPage parentPage; + private String nick; + private final ConfigurationSection section; + + public NickEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + Gui upperGui = Gui.normal() + .setStructure( + "a # b" + ) + .addIngredient('a', new ItemBuilder(Material.WRITABLE_BOOK).setDisplayName(section.getString("nick", "New nick"))) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', new ItemStack(Material.AIR)) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Nick") + )) + .addRenameHandler(s -> { + nick = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (nick == null || nick.isEmpty()) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + return new ItemBuilder(Material.WRITABLE_BOOK) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "" + nick + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))); + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (nick == null || nick.isEmpty()) { + section.set("nick", null); + } else { + section.set("nick", nick); + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/PriceEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/PriceEditor.java new file mode 100644 index 00000000..e7427aaf --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/PriceEditor.java @@ -0,0 +1,171 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +public class PriceEditor { + + private final Player player; + private final YamlPage parentPage; + private final String[] price; + private int index; + private final ConfigurationSection section; + + public PriceEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + this.index = 0; + this.price = new String[]{section.getString("price.base","0"), section.getString("price.bonus","0")}; + reOpen(); + } + + public void reOpen() { + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + Gui upperGui = Gui.normal() + .setStructure("a # b") + .addIngredient('a', new ItemBuilder(Material.GOLD_INGOT).setDisplayName(price[index])) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "a b x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', new ItemStack(Material.AIR)) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .addIngredient('a', new BaseItem()) + .addIngredient('b', new BonusItem()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Price") + )) + .addRenameHandler(s -> { + if (s == null || s.equals("")) { + price[index] = "0"; + return; + } + price[index] = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public class BaseItem extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(Material.GOLD_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Base" + ))); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + index = 0; + reOpen(); + } + } + + public class BonusItem extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(Material.GOLD_NUGGET).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Bonus" + ))); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + index = 1; + reOpen(); + } + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (price[0].equals("0") && price[1].equals("0")) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + try { + Double.parseDouble(price[0]); + Double.parseDouble(price[1]); + return new ItemBuilder(Material.GOLD_INGOT) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "New value: " + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - base: " + price[0] + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - bonus: " + price[1] + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))); + } catch (NumberFormatException e) { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (price[0].equals("0") && price[1].equals("0")) { + section.set("price", null); + } else { + try { + double base = Double.parseDouble(price[0]); + double bonus = Double.parseDouble(price[1]); + if (base != 0) { + section.set("price.base", base); + } + if (bonus != 0) { + section.set("price.bonus", bonus); + } + } catch (NumberFormatException e) { + return; + } + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ScoreEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ScoreEditor.java new file mode 100644 index 00000000..0959db89 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/ScoreEditor.java @@ -0,0 +1,124 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +public class ScoreEditor { + + private final Player player; + private final YamlPage parentPage; + private String score; + private final ConfigurationSection section; + + public ScoreEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + Gui upperGui = Gui.normal() + .setStructure("a # b") + .addIngredient('a', new ItemBuilder(Material.NETHER_STAR).setDisplayName(String.valueOf(section.getDouble("score", 0)))) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "x x x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', new ItemStack(Material.AIR)) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Score") + )) + .addRenameHandler(s -> { + score = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (score == null || score.isEmpty()) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + try { + double m = Double.parseDouble(score); + if (m >= 0) { + return new ItemBuilder(Material.NETHER_STAR) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "New value: " + score + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))); + } else { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } catch (NumberFormatException e) { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (score == null || score.isEmpty()) { + section.set("score", null); + } else { + try { + double value = Double.parseDouble(score); + if (value >= 0) { + section.set("score", value); + } else { + return; + } + } catch (NumberFormatException e) { + return; + } + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/SizeEditor.java b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/SizeEditor.java new file mode 100644 index 00000000..ae4fa0e2 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/gui/page/property/SizeEditor.java @@ -0,0 +1,175 @@ +package net.momirealms.customfishing.gui.page.property; + +import net.momirealms.customfishing.adventure.AdventureManagerImpl; +import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper; +import net.momirealms.customfishing.gui.YamlPage; +import net.momirealms.customfishing.gui.icon.BackGroundItem; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.PagedGui; +import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.ItemProvider; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.AbstractItem; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.AnvilWindow; + +public class SizeEditor { + + private final Player player; + private final YamlPage parentPage; + private final String[] size; + private int index; + private final ConfigurationSection section; + + public SizeEditor(Player player, YamlPage parentPage, ConfigurationSection section) { + this.player = player; + this.parentPage = parentPage; + this.section = section; + this.index = 0; + this.size = section.contains("size") ? section.getString("size").split("~") : new String[]{"0","0"}; + reOpen(); + } + + public void reOpen() { + Item border = new SimpleItem(new ItemBuilder(Material.AIR)); + var confirm = new ConfirmIcon(); + Gui upperGui = Gui.normal() + .setStructure("a # b") + .addIngredient('a', new ItemBuilder(Material.PUFFERFISH).setDisplayName(size[index])) + .addIngredient('#', border) + .addIngredient('b', confirm) + .build(); + + var gui = PagedGui.items() + .setStructure( + "a b x x x x x x x", + "x x x x x x x x x", + "x x x x x x x x x", + "# # # # c # # # #" + ) + .addIngredient('x', new ItemStack(Material.AIR)) + .addIngredient('c', parentPage.getBackItem()) + .addIngredient('#', new BackGroundItem()) + .addIngredient('a', new MinItem()) + .addIngredient('b', new MaxItem()) + .build(); + + var window = AnvilWindow.split() + .setViewer(player) + .setTitle(new ShadedAdventureComponentWrapper( + AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Size") + )) + .addRenameHandler(s -> { + if (s == null || s.equals("")) { + size[index] = "0"; + return; + } + size[index] = s; + confirm.notifyWindows(); + }) + .setUpperGui(upperGui) + .setLowerGui(gui) + .build(); + + window.open(); + } + + public class MinItem extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(Material.IRON_INGOT).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Min" + ))); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + index = 0; + reOpen(); + } + } + + public class MaxItem extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(Material.IRON_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "Max" + ))); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + index = 1; + reOpen(); + } + } + + public class ConfirmIcon extends AbstractItem { + + @Override + public ItemProvider getItemProvider() { + if (size[0].equals("0") && size[1].equals("0")) { + return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00CED1>● Delete property" + ))); + } else { + try { + double min = Double.parseDouble(size[0]); + double max = Double.parseDouble(size[1]); + + if (min <= max) { + return new ItemBuilder(Material.PUFFERFISH) + .setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "New value: " + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - min: " + size[0] + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + " - max: " + size[1] + ))) + .addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "<#00FF7F> -> Click to confirm" + ))); + } else { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Max must be greater than min" + ))); + } + } catch (NumberFormatException e) { + return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage( + "● Invalid number" + ))); + } + } + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (size[0].equals("0") && size[1].equals("0")) { + section.set("size", null); + } else { + try { + double min = Double.parseDouble(size[0]); + double max = Double.parseDouble(size[1]); + if (min <= max) { + section.set("size", min + "~" + max); + } + } catch (NumberFormatException e) { + return; + } + } + parentPage.reOpen(); + parentPage.save(); + } + } +} diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java index 762e8b44..1c4ef1a1 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java @@ -103,6 +103,10 @@ public class ItemManagerImpl implements ItemManager, Listener { } } + public Collection getItemLibraries() { + return itemLibraryMap.keySet(); + } + /** * Get a set of all item keys in the CustomFishing plugin. * @@ -362,28 +366,13 @@ public class ItemManagerImpl implements ItemManager, Listener { @Override public ItemStack getItemStackAppearance(Player player, String material) { if (material != null) { - if (material.contains(":")) { - ItemStack itemStack = buildAnyPluginItemByID(player, material); - if (itemStack != null) { - ItemStack stack = new ItemStack(itemStack.getType()); - ItemMeta meta = stack.getItemMeta(); - meta.setCustomModelData(itemStack.getItemMeta().getCustomModelData()); - stack.setItemMeta(meta); - return stack; - } else { - return new ItemStack(Material.BARRIER); - } + ItemStack itemStack = buildAnyPluginItemByID(player, material); + if (itemStack != null) { + NBTItem nbtItem = new NBTItem(itemStack); + nbtItem.removeKey("display"); + return nbtItem.getItem(); } else { - try { - var m = Material.valueOf(material.toUpperCase(Locale.ENGLISH)); - if (m.isItem()) { - return new ItemStack(m); - } else { - return new ItemStack(Material.BARRIER); - } - } catch (IllegalArgumentException e) { - return new ItemStack(Material.BARRIER); - } + return new ItemStack(Material.BARRIER); } } else { return new ItemStack(Material.STRUCTURE_VOID); @@ -711,7 +700,7 @@ public class ItemManagerImpl implements ItemManager, Listener { if (base64 == null) return this; editors.put("head", (player, nbtItem, placeholders) -> { NBTCompound nbtCompound = nbtItem.addCompound("SkullOwner"); - nbtCompound.setUUID("Id", UUID.nameUUIDFromBytes(base64.substring(0,8).getBytes())); + nbtCompound.setUUID("Id", UUID.nameUUIDFromBytes(id.getBytes())); NBTListCompound texture = nbtCompound.addCompound("Properties").getCompoundList("textures").addCompound(); texture.setString("Value", base64); }); diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/misc/ChatCatcherManager.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/misc/ChatCatcherManager.java new file mode 100644 index 00000000..bbe11e8a --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/misc/ChatCatcherManager.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customfishing.mechanic.misc; + +import io.papermc.paper.event.player.AsyncChatEvent; +import io.papermc.paper.event.player.ChatEvent; +import net.momirealms.customfishing.api.CustomFishingPlugin; +import net.momirealms.customfishing.api.common.Pair; +import net.momirealms.customfishing.gui.ItemPage; +import net.momirealms.customfishing.gui.ParentPage; +import net.momirealms.customfishing.gui.YamlPage; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class ChatCatcherManager implements Listener { + + private final CustomFishingPlugin plugin; + private final ConcurrentHashMap> pageMap; + + public ChatCatcherManager(CustomFishingPlugin plugin) { + this.pageMap = new ConcurrentHashMap<>(); + this.plugin = plugin; + } + + public void load() { + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + public void unload() { + this.pageMap.clear(); + HandlerList.unregisterAll(this); + } + + public void disable() { + unload(); + } + + public void catchMessage(Player player, String key, ItemPage page) { + this.pageMap.put(player.getUniqueId(), Pair.of(key, page)); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + pageMap.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler + public void onChat(AsyncPlayerChatEvent event) { + var uuid = event.getPlayer().getUniqueId(); + var pair = pageMap.remove(uuid); + if (pair == null) return; + event.setCancelled(true); + plugin.getScheduler().runTaskSync(() -> { + pair.right().getSection().set(pair.left(), event.getMessage()); + pair.right().reOpen(); + }, event.getPlayer().getLocation()); + } +}