From 4c393c685c117803f4d0d2695bd5c6fce7d0aded Mon Sep 17 00:00:00 2001 From: saildrag <9calcule9@gmail.com> Date: Fri, 5 Sep 2025 21:01:01 +0200 Subject: [PATCH 01/78] remove Placeholder to main code --- .../menu/hooks/dialogs/ZDialogInventory.java | 22 ++++++++++--------- .../loader/builder/ItemDialogBuilder.java | 10 +++++---- .../builder/PlainMessageDialogBuilder.java | 11 ++++++---- .../input/DialogBooleanInputBuilder.java | 16 ++++++++------ .../builder/input/DialogInputTextBuilder.java | 14 +++++++----- .../input/DialogNumberRangeInputBuilder.java | 14 +++++++----- .../input/DialogSingleOptionInputBuilder.java | 11 ++++++---- .../hooks/dialogs/utils/BuilderHelper.java | 17 -------------- .../menu/placeholder/AutoPlaceholder.java | 0 .../menu/placeholder/DistantPlaceholder.java | 0 .../menu/placeholder/LocalPlaceholder.java | 0 .../menu/placeholder/Placeholder.java | 0 12 files changed, 57 insertions(+), 58 deletions(-) delete mode 100644 Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/utils/BuilderHelper.java rename {Hooks/Paper/src => src}/main/java/fr/maxlego08/menu/placeholder/AutoPlaceholder.java (100%) rename {Hooks/Paper/src => src}/main/java/fr/maxlego08/menu/placeholder/DistantPlaceholder.java (100%) rename {Hooks/Paper/src => src}/main/java/fr/maxlego08/menu/placeholder/LocalPlaceholder.java (100%) rename {Hooks/Paper/src => src}/main/java/fr/maxlego08/menu/placeholder/Placeholder.java (100%) diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogInventory.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogInventory.java index bb767fc7..179551ab 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogInventory.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogInventory.java @@ -11,14 +11,13 @@ import fr.maxlego08.menu.api.utils.Placeholders; import fr.maxlego08.menu.api.utils.dialogs.record.ActionButtonRecord; import fr.maxlego08.menu.api.utils.dialogs.record.ZDialogInventoryBuild; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import org.bukkit.entity.Player; import java.io.File; import java.util.ArrayList; import java.util.List; -public class ZDialogInventory extends BuilderHelper implements DialogInventory { +public class ZDialogInventory implements DialogInventory { private final MenuPlugin menuPlugin; private final String fileName; @@ -70,7 +69,7 @@ public ZDialogInventory(MenuPlugin plugin, String name, String fileName, String @Override public String getName(Player player) { - return papi(name, player); + return this.menuPlugin.parse(player, name); } @Override @@ -158,7 +157,10 @@ public void setAfterAction(String afterAction) { @Override public ZDialogInventoryBuild getBuild(Player player) { - return new ZDialogInventoryBuild(papi(this.name,player),papi(this.externalTitle, player), canCloseWithEscape); + return new ZDialogInventoryBuild( + this.menuPlugin.parse(player, this.name), + this.menuPlugin.parse(player, this.externalTitle), canCloseWithEscape + ); } @Override @@ -238,7 +240,7 @@ public String getYesText() { @Override public String getYesText(Player player) { - return papi(this.yesText, player); + return this.menuPlugin.parse(player, this.yesText); } @Override @@ -252,7 +254,7 @@ public String getNoText() { @Override public String getNoText(Player player) { - return papi(this.noText, player); + return this.menuPlugin.parse(player, this.noText); } @Override @@ -266,7 +268,7 @@ public String getYesTooltip() { @Override public String getYesTooltip(Player player) { - return papi(this.yesTooltip, player); + return this.menuPlugin.parse(player, this.yesTooltip); } @Override @@ -280,7 +282,7 @@ public String getNoTooltip() { @Override public String getNoTooltip(Player player) { - return papi(this.noTooltip, player); + return this.menuPlugin.parse(player, this.noTooltip); } @Override @@ -310,7 +312,7 @@ public String getLabel() { @Override public String getLabel(Player player) { - return papi(this.label, player); + return this.menuPlugin.parse(player, this.label); } @Override @@ -325,7 +327,7 @@ public String getLabelTooltip() { @Override public String getLabelTooltip(Player player) { - return papi(this.labelTooltip, player); + return this.menuPlugin.parse(player, this.labelTooltip); } @Override diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/ItemDialogBuilder.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/ItemDialogBuilder.java index f86304b6..46a46e9f 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/ItemDialogBuilder.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/ItemDialogBuilder.java @@ -1,10 +1,10 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder; import fr.maxlego08.menu.api.MenuItemStack; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.button.dialogs.BodyButton; import fr.maxlego08.menu.api.enums.DialogBodyType; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import io.papermc.paper.registry.data.dialog.body.DialogBody; import io.papermc.paper.registry.data.dialog.body.PlainMessageDialogBody; import net.kyori.adventure.text.Component; @@ -14,11 +14,13 @@ import java.util.ArrayList; import java.util.List; -public class ItemDialogBuilder extends BuilderHelper implements DialogBuilder{ +public class ItemDialogBuilder implements DialogBuilder{ private final ZDialogManager dialogManager; + private final MenuPlugin menuPlugin; - public ItemDialogBuilder(ZDialogManager dialogManager) { + public ItemDialogBuilder(ZDialogManager dialogManager, MenuPlugin menuPlugin) { this.dialogManager = dialogManager; + this.menuPlugin = menuPlugin; } @Override @@ -42,7 +44,7 @@ public DialogBody build(Player player, BodyButton button) { if (!descriptionMessages.isEmpty()) { List descComponents = new ArrayList<>(); for (String descMessage : descriptionMessages) { - String parsedMessage = papi(descMessage, player); + String parsedMessage = this.menuPlugin.parse(player, descMessage); descComponents.add(this.dialogManager.getPaperComponent().getComponent(parsedMessage)); } diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/PlainMessageDialogBuilder.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/PlainMessageDialogBuilder.java index e6a85ee0..cf084310 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/PlainMessageDialogBuilder.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/PlainMessageDialogBuilder.java @@ -1,9 +1,9 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.button.dialogs.BodyButton; import fr.maxlego08.menu.api.enums.DialogBodyType; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import io.papermc.paper.registry.data.dialog.body.DialogBody; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; @@ -11,10 +11,13 @@ import java.util.ArrayList; import java.util.List; -public class PlainMessageDialogBuilder extends BuilderHelper implements DialogBuilder{ +public class PlainMessageDialogBuilder implements DialogBuilder{ private final ZDialogManager dialogManager; - public PlainMessageDialogBuilder(ZDialogManager dialogManager) { + private final MenuPlugin menuPlugin; + + public PlainMessageDialogBuilder(ZDialogManager dialogManager, MenuPlugin menuPlugin) { this.dialogManager = dialogManager; + this.menuPlugin = menuPlugin; } @Override @@ -30,7 +33,7 @@ public DialogBody build(Player player, BodyButton button) { } List components = new ArrayList<>(); for (String message : messages) { - String parsedMessage = papi(message, player); + String parsedMessage = this.menuPlugin.parse(player, message); components.add(this.dialogManager.getPaperComponent().getComponent(parsedMessage)); } Component finalComponent; diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogBooleanInputBuilder.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogBooleanInputBuilder.java index ef5a5847..e35309a4 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogBooleanInputBuilder.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogBooleanInputBuilder.java @@ -1,9 +1,9 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder.input; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.button.dialogs.InputButton; import fr.maxlego08.menu.api.enums.DialogInputType; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import fr.maxlego08.menu.hooks.dialogs.utils.loader.DialogInputBuilderInt; import io.papermc.paper.registry.data.dialog.input.DialogInput; import net.kyori.adventure.text.Component; @@ -11,11 +11,13 @@ import java.util.Optional; -public class DialogBooleanInputBuilder extends BuilderHelper implements DialogInputBuilderInt { +public class DialogBooleanInputBuilder implements DialogInputBuilderInt { private final ZDialogManager dialogManager; + private final MenuPlugin menuPlugin; - public DialogBooleanInputBuilder(ZDialogManager dialogManager) { + public DialogBooleanInputBuilder(ZDialogManager dialogManager, MenuPlugin menuPlugin) { this.dialogManager = dialogManager; + this.menuPlugin = menuPlugin; } @Override @@ -26,13 +28,13 @@ public DialogInputType getBodyType() { @Override public DialogInput build(Player player, InputButton button) { String key = button.getKey(); - Component label = this.dialogManager.getPaperComponent().getComponent(papi(button.getLabel(),player)); + Component label = this.dialogManager.getPaperComponent().getComponent(this.menuPlugin.parse(player, button.getLabel())); Optional initialValueSupplier = button.getInitialValueSupplier(); boolean initialValue; - initialValue = initialValueSupplier.orElseGet(() -> Boolean.parseBoolean(papi(button.getInitialValueBool(), player))); + initialValue = initialValueSupplier.orElseGet(() -> Boolean.parseBoolean(this.menuPlugin.parse(player, button.getInitialValueBool()))); - String onTrueText = papi(button.getTextTrue(), player); - String onFalseText = papi(button.getTextFalse(), player); + String onTrueText = this.menuPlugin.parse(player, button.getTextTrue()); + String onFalseText = this.menuPlugin.parse(player, button.getTextFalse()); return DialogInput.bool(key,label,initialValue,onTrueText,onFalseText); } diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogInputTextBuilder.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogInputTextBuilder.java index f3321422..f4200ce7 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogInputTextBuilder.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogInputTextBuilder.java @@ -1,10 +1,10 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder.input; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.button.dialogs.InputButton; import fr.maxlego08.menu.api.configuration.Config; import fr.maxlego08.menu.api.enums.DialogInputType; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import fr.maxlego08.menu.hooks.dialogs.utils.loader.DialogInputBuilderInt; import fr.maxlego08.menu.zcore.logger.Logger; import io.papermc.paper.registry.data.dialog.input.DialogInput; @@ -13,11 +13,13 @@ import java.util.Optional; -public class DialogInputTextBuilder extends BuilderHelper implements DialogInputBuilderInt { +public class DialogInputTextBuilder implements DialogInputBuilderInt { private final ZDialogManager dialogManager; + private final MenuPlugin menuPlugin; - public DialogInputTextBuilder(ZDialogManager dialogManager) { + public DialogInputTextBuilder(ZDialogManager dialogManager, MenuPlugin menuPlugin) { this.dialogManager = dialogManager; + this.menuPlugin = menuPlugin; } @Override @@ -30,14 +32,14 @@ public DialogInput build(Player player, InputButton button) { String key = button.getKey(); int width = button.getWidth(); - String label = papi(button.getLabel(), player); + String label = this.menuPlugin.parse(player, button.getLabel()); boolean labelVisible = button.isLabelVisible(); Optional defaultTextSupplier = button.getDefaultTextSupplier(); String defaultText; if (defaultTextSupplier.isPresent()) { - defaultText = papi(defaultTextSupplier.get(), player); + defaultText = this.menuPlugin.parse(player, defaultTextSupplier.get()); } else { - defaultText = papi(button.getDefaultText(), player); + defaultText = this.menuPlugin.parse(player, button.getDefaultText()); } int maxLength = button.getMaxLength(); int multilineMaxLines = button.getMultilineMaxLines(); diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogNumberRangeInputBuilder.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogNumberRangeInputBuilder.java index d4c0ebae..95c3421f 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogNumberRangeInputBuilder.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogNumberRangeInputBuilder.java @@ -1,10 +1,10 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder.input; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.button.dialogs.InputButton; import fr.maxlego08.menu.api.configuration.Config; import fr.maxlego08.menu.api.enums.DialogInputType; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import fr.maxlego08.menu.hooks.dialogs.utils.loader.DialogInputBuilderInt; import fr.maxlego08.menu.zcore.logger.Logger; import io.papermc.paper.registry.data.dialog.input.DialogInput; @@ -13,11 +13,13 @@ import java.util.Optional; -public class DialogNumberRangeInputBuilder extends BuilderHelper implements DialogInputBuilderInt { +public class DialogNumberRangeInputBuilder implements DialogInputBuilderInt { private final ZDialogManager dialogManager; + private final MenuPlugin menuPlugin; - public DialogNumberRangeInputBuilder(ZDialogManager dialogManager) { + public DialogNumberRangeInputBuilder(ZDialogManager dialogManager, MenuPlugin menuPlugin) { this.dialogManager = dialogManager; + this.menuPlugin = menuPlugin; } @Override @@ -29,8 +31,8 @@ public DialogInputType getBodyType() { public DialogInput build(Player player, InputButton button) { String key = button.getKey(); int width = button.getWidth(); - Component label = this.dialogManager.getPaperComponent().getComponent(papi(button.getLabel(),player)); - String labelFormat = papi(button.getLabelFormat(),player); + Component label = this.dialogManager.getPaperComponent().getComponent(this.menuPlugin.parse(player, button.getLabel())); + String labelFormat = this.menuPlugin.parse(player, button.getLabelFormat()); float start = button.getStart(); float end = button.getEnd(); Optional initialValueSupplier = button.getInitialValueRangeSupplier(); @@ -38,7 +40,7 @@ public DialogInput build(Player player, InputButton button) { if (initialValueSupplier.isPresent()) { initialValueFloat = initialValueSupplier.get(); } else { - String initialValue = papi(button.getInitialValueRange(),player); + String initialValue = this.menuPlugin.parse(player, button.getInitialValueRange()); try { initialValueFloat = Float.parseFloat(initialValue); } catch (NumberFormatException e) { diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogSingleOptionInputBuilder.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogSingleOptionInputBuilder.java index d7465a1e..a1ef37f5 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogSingleOptionInputBuilder.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/input/DialogSingleOptionInputBuilder.java @@ -1,11 +1,11 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder.input; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.button.dialogs.InputButton; import fr.maxlego08.menu.api.enums.DialogInputType; import fr.maxlego08.menu.api.utils.dialogs.record.SingleOption; import fr.maxlego08.menu.hooks.ComponentMeta; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; -import fr.maxlego08.menu.hooks.dialogs.utils.BuilderHelper; import fr.maxlego08.menu.hooks.dialogs.utils.loader.DialogInputBuilderInt; import io.papermc.paper.registry.data.dialog.input.DialogInput; import io.papermc.paper.registry.data.dialog.input.SingleOptionDialogInput; @@ -15,10 +15,13 @@ import java.util.ArrayList; import java.util.List; -public class DialogSingleOptionInputBuilder extends BuilderHelper implements DialogInputBuilderInt { +public class DialogSingleOptionInputBuilder implements DialogInputBuilderInt { private final ZDialogManager dialogManager; - public DialogSingleOptionInputBuilder(ZDialogManager dialogManager) { + private final MenuPlugin menuPlugin; + + public DialogSingleOptionInputBuilder(ZDialogManager dialogManager, MenuPlugin menuPlugin) { this.dialogManager = dialogManager; + this.menuPlugin = menuPlugin; } @Override @@ -32,7 +35,7 @@ public DialogInput build(Player player, InputButton button) { String key = button.getKey(); int width = button.getWidth(); - Component label = paperComponent.getComponent(papi(button.getLabel(),player)); + Component label = paperComponent.getComponent(this.menuPlugin.parse(player, button.getLabel())); boolean labelVisible = button.isLabelVisible(); List optionList = button.getSigleOptions(); List finalOptions = new ArrayList<>(); diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/utils/BuilderHelper.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/utils/BuilderHelper.java deleted file mode 100644 index 7ce54270..00000000 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/utils/BuilderHelper.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.maxlego08.menu.hooks.dialogs.utils; - -import fr.maxlego08.menu.placeholder.Placeholder; -import org.bukkit.entity.Player; - -import java.util.List; - -public class BuilderHelper { - protected String papi(String string, Player player) { - if (string == null || !string.contains("%")) return string; - return Placeholder.Placeholders.getPlaceholder().setPlaceholders(player, string); - } - - protected List papi(List strings, Player player) { - return Placeholder.Placeholders.getPlaceholder().setPlaceholders(player, strings); - } -} diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/AutoPlaceholder.java b/src/main/java/fr/maxlego08/menu/placeholder/AutoPlaceholder.java similarity index 100% rename from Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/AutoPlaceholder.java rename to src/main/java/fr/maxlego08/menu/placeholder/AutoPlaceholder.java diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/DistantPlaceholder.java b/src/main/java/fr/maxlego08/menu/placeholder/DistantPlaceholder.java similarity index 100% rename from Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/DistantPlaceholder.java rename to src/main/java/fr/maxlego08/menu/placeholder/DistantPlaceholder.java diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/LocalPlaceholder.java b/src/main/java/fr/maxlego08/menu/placeholder/LocalPlaceholder.java similarity index 100% rename from Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/LocalPlaceholder.java rename to src/main/java/fr/maxlego08/menu/placeholder/LocalPlaceholder.java diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/Placeholder.java b/src/main/java/fr/maxlego08/menu/placeholder/Placeholder.java similarity index 100% rename from Hooks/Paper/src/main/java/fr/maxlego08/menu/placeholder/Placeholder.java rename to src/main/java/fr/maxlego08/menu/placeholder/Placeholder.java From 0aa7850946f8b764f74c159ea49aa444f05dacce Mon Sep 17 00:00:00 2001 From: saildrag <9calcule9@gmail.com> Date: Fri, 5 Sep 2025 21:08:07 +0200 Subject: [PATCH 02/78] remove placeholder part 2 --- .../menu/hooks/dialogs/ZDialogManager.java | 2 +- .../loader/builder/DialogBuilderClass.java | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogManager.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogManager.java index a6545ee7..e992488a 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogManager.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/ZDialogManager.java @@ -56,7 +56,7 @@ public ZDialogManager(final MenuPlugin menuPlugin, final ConfigManagerInt config this.menuPlugin = menuPlugin; this.configManager = configManager; this.paperComponent = ((ComponentMeta) menuPlugin.getMetaUpdater()); - this.dialogBuilders = new DialogBuilderClass(this); + this.dialogBuilders = new DialogBuilderClass(this, this.menuPlugin); inventoryManager = menuPlugin.getInventoryManager(); } diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/DialogBuilderClass.java b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/DialogBuilderClass.java index e9699d27..fcb397e1 100644 --- a/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/DialogBuilderClass.java +++ b/Hooks/Paper/src/main/java/fr/maxlego08/menu/hooks/dialogs/loader/builder/DialogBuilderClass.java @@ -1,5 +1,6 @@ package fr.maxlego08.menu.hooks.dialogs.loader.builder; +import fr.maxlego08.menu.api.MenuPlugin; import fr.maxlego08.menu.api.enums.DialogBodyType; import fr.maxlego08.menu.api.enums.DialogInputType; import fr.maxlego08.menu.hooks.dialogs.ZDialogManager; @@ -17,19 +18,20 @@ public class DialogBuilderClass { private static final Map dialogBuilders = new HashMap<>(); private static final Map dialogInputBuilders = new HashMap<>(); - - public DialogBuilderClass(ZDialogManager dialogManager) { + private final MenuPlugin menuPlugin; + public DialogBuilderClass(ZDialogManager dialogManager, MenuPlugin menuPlugin) { + this.menuPlugin = menuPlugin; this.loadBuilders(dialogManager); } private void loadBuilders(ZDialogManager dialogManager) { - this.registerBuilder(new PlainMessageDialogBuilder(dialogManager)); - this.registerBuilder(new ItemDialogBuilder(dialogManager)); + this.registerBuilder(new PlainMessageDialogBuilder(dialogManager, this.menuPlugin)); + this.registerBuilder(new ItemDialogBuilder(dialogManager, this.menuPlugin)); - this.registerInputBuilder(new DialogInputTextBuilder(dialogManager)); - this.registerInputBuilder(new DialogBooleanInputBuilder(dialogManager)); - this.registerInputBuilder(new DialogSingleOptionInputBuilder(dialogManager)); - this.registerInputBuilder(new DialogNumberRangeInputBuilder(dialogManager)); + this.registerInputBuilder(new DialogInputTextBuilder(dialogManager, this.menuPlugin)); + this.registerInputBuilder(new DialogBooleanInputBuilder(dialogManager, this.menuPlugin)); + this.registerInputBuilder(new DialogSingleOptionInputBuilder(dialogManager, this.menuPlugin)); + this.registerInputBuilder(new DialogNumberRangeInputBuilder(dialogManager, this.menuPlugin)); } public void registerBuilder(DialogBuilder builder) { From a0ececc6072fbddfb9f30b399fbd9e2841303b68 Mon Sep 17 00:00:00 2001 From: saildrag <9calcule9@gmail.com> Date: Tue, 9 Sep 2025 20:37:38 +0200 Subject: [PATCH 03/78] first bedrock inventory commit --- .../maxlego08/menu/api/BedrockInventory.java | 50 +++ .../fr/maxlego08/menu/api/BedrockManager.java | 44 +++ .../maxlego08/menu/api/DialogInventory.java | 2 +- .../fr/maxlego08/menu/api/DialogManager.java | 2 - .../fr/maxlego08/menu/api/MenuPlugin.java | 2 + .../api/button/bedrock/BedrockButton.java | 34 ++ .../menu/api/button/dialogs/BodyButton.java | 2 +- .../menu/api/button/dialogs/InputButton.java | 2 +- .../menu/api/configuration/Config.java | 2 +- .../annotation/ConfigOption.java | 2 +- .../api/enums/bedrock/BedrockImageType.java | 7 + .../menu/api/enums/bedrock/BedrockType.java | 7 + .../enums/{ => dialog}/DialogBodyType.java | 2 +- .../enums/{ => dialog}/DialogInputType.java | 3 +- .../api/enums/{ => dialog}/DialogType.java | 2 +- .../fr/maxlego08/menu/api/utils/Message.java | 18 +- .../maxlego08/menu/zcore/logger/Logger.java | 0 Hooks/Bedrock/build.gradle.kts | 10 + .../main/java/fr/maxlego08/menu/Bedrock.java | 22 ++ .../AbstractBedrockInventoryManager.java | 51 +++ .../menu/hooks/bedrock/ZBedrockInventory.java | 173 +++++++++ .../menu/hooks/bedrock/ZBedrockManager.java | 333 ++++++++++++++++++ .../bedrock/loader/BedrockButtonLoader.java | 44 +++ .../hooks/bedrock/loader/BedrockLoader.java | 154 ++++++++ .../loader/BedrockModalButtonLoader.java | 28 ++ .../loader/builder/BedrockBuilderClass.java | 49 +++ .../loader/builder/BedrockButtonBuilder.java | 26 ++ .../input/BedrockDropdownInputBuilder.java | 44 +++ .../input/BedrockInputTextBuilder.java | 32 ++ .../builder/input/BedrockLabelBuilder.java | 29 ++ .../input/BedrockSliderInputBuilder.java | 52 +++ .../input/BedrockToggleInputBuilder.java | 30 ++ .../input/BedrockDropDownInputLoader.java | 57 +++ .../loader/input/BedrockInputTextLoader.java | 31 ++ .../loader/input/BedrockLabelLoader.java | 31 ++ .../input/BedrockSliderInputLoader.java | 39 ++ .../input/BedrockToggleInputLoader.java | 33 ++ .../utils/loader/BedrockInputBuilder.java | 11 + .../maxlego08/menu/config/ConfigManager.java | 4 +- .../AbstractConfigFieldProcessor.java | 2 +- .../ConfigFieldProcessorRegistry.java | 2 +- .../type/BooleanFieldProcessor.java | 2 +- .../type/NumberRangeFieldProcessor.java | 2 +- .../processors/type/TextFieldProcessor.java | 2 +- .../menu/hooks/dialogs/ZDialogInventory.java | 2 +- .../menu/hooks/dialogs/ZDialogManager.java | 8 +- .../hooks/dialogs/loader/DialogLoader.java | 69 ++-- .../dialogs/loader/body/ItemBodyLoader.java | 4 +- .../loader/body/PlainMessageBodyLoader.java | 2 +- .../dialogs/loader/builder/DialogBuilder.java | 2 +- .../loader/builder/DialogBuilderClass.java | 4 +- .../loader/builder/ItemDialogBuilder.java | 2 +- .../builder/PlainMessageDialogBuilder.java | 2 +- .../input/DialogBooleanInputBuilder.java | 2 +- .../builder/input/DialogInputTextBuilder.java | 2 +- .../input/DialogNumberRangeInputBuilder.java | 2 +- .../input/DialogSingleOptionInputBuilder.java | 2 +- .../loader/input/BooleanInputLoader.java | 2 +- .../loader/input/NumberRangeInputLoader.java | 2 +- .../loader/input/SingleOptionInputLoader.java | 2 +- .../dialogs/loader/input/TextInputLoader.java | 2 +- .../utils/loader/DialogInputBuilderInt.java | 2 +- .../fr/maxlego08/menu/ZInventoryManager.java | 16 + .../java/fr/maxlego08/menu/ZMenuPlugin.java | 24 +- .../menu/command/commands/CommandMenu.java | 5 + .../commands/bedrock/CommandBedrock.java | 23 ++ .../commands/bedrock/CommandBedrockOpen.java | 62 ++++ .../bedrock/CommandBedrockReload.java | 27 ++ .../menu/zcore/enums/Permission.java | 2 + .../menu/zcore/utils/plugins/Plugins.java | 3 +- src/main/resources/bedrock/custom-form.yml | 51 +++ src/main/resources/bedrock/modal-form.yml | 25 ++ src/main/resources/bedrock/simple-form.yml | 37 ++ 73 files changed, 1775 insertions(+), 87 deletions(-) create mode 100644 API/src/main/java/fr/maxlego08/menu/api/BedrockInventory.java create mode 100644 API/src/main/java/fr/maxlego08/menu/api/BedrockManager.java create mode 100644 API/src/main/java/fr/maxlego08/menu/api/button/bedrock/BedrockButton.java create mode 100644 API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockImageType.java create mode 100644 API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockType.java rename API/src/main/java/fr/maxlego08/menu/api/enums/{ => dialog}/DialogBodyType.java (57%) rename API/src/main/java/fr/maxlego08/menu/api/enums/{ => dialog}/DialogInputType.java (59%) rename API/src/main/java/fr/maxlego08/menu/api/enums/{ => dialog}/DialogType.java (71%) rename {Hooks/Paper => API}/src/main/java/fr/maxlego08/menu/zcore/logger/Logger.java (100%) create mode 100644 Hooks/Bedrock/build.gradle.kts create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/Bedrock.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/AbstractBedrockInventoryManager.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockInventory.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockManager.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockButtonLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockModalButtonLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/BedrockBuilderClass.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/BedrockButtonBuilder.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/input/BedrockDropdownInputBuilder.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/input/BedrockInputTextBuilder.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/input/BedrockLabelBuilder.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/input/BedrockSliderInputBuilder.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/builder/input/BedrockToggleInputBuilder.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/input/BedrockDropDownInputLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/input/BedrockInputTextLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/input/BedrockLabelLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/input/BedrockSliderInputLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/input/BedrockToggleInputLoader.java create mode 100644 Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/utils/loader/BedrockInputBuilder.java create mode 100644 src/main/java/fr/maxlego08/menu/command/commands/bedrock/CommandBedrock.java create mode 100644 src/main/java/fr/maxlego08/menu/command/commands/bedrock/CommandBedrockOpen.java create mode 100644 src/main/java/fr/maxlego08/menu/command/commands/bedrock/CommandBedrockReload.java create mode 100644 src/main/resources/bedrock/custom-form.yml create mode 100644 src/main/resources/bedrock/modal-form.yml create mode 100644 src/main/resources/bedrock/simple-form.yml diff --git a/API/src/main/java/fr/maxlego08/menu/api/BedrockInventory.java b/API/src/main/java/fr/maxlego08/menu/api/BedrockInventory.java new file mode 100644 index 00000000..416518a6 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/BedrockInventory.java @@ -0,0 +1,50 @@ +package fr.maxlego08.menu.api; + +import fr.maxlego08.menu.api.button.bedrock.BedrockButton; +import fr.maxlego08.menu.api.button.dialogs.InputButton; +import fr.maxlego08.menu.api.enums.bedrock.BedrockType; +import fr.maxlego08.menu.api.requirement.Requirement; +import org.bukkit.entity.Player; + +import java.io.File; +import java.util.List; + +public interface BedrockInventory { + String getName(Player player); + + String getContent(Player player); + + String getFileName(); + + MenuPlugin getPlugin(); + + File getFile(); + + void setFile(File file); + + void setBedrockButtons(List bedrockButtons); + + List getBedrockButtons(); + + List getBedrockButtons(Player player); + + void setInputButtons(List inputButtons); + + List getInputButtons(); + + List getInputButtons(Player player); + + void setOpenRequirement(Requirement openRequirement); + + Requirement getOpenRequirement(); + + boolean hasOpenRequirement(Player player); + + void setBedrockType(BedrockType bedrockType); + + void setRequirements(List actions); + + List getRequirements(); + + BedrockType getBedrockType(); +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/BedrockManager.java b/API/src/main/java/fr/maxlego08/menu/api/BedrockManager.java new file mode 100644 index 00000000..bd556236 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/BedrockManager.java @@ -0,0 +1,44 @@ +package fr.maxlego08.menu.api; + +import fr.maxlego08.menu.api.configuration.ConfigManagerInt; +import fr.maxlego08.menu.api.exceptions.DialogException; +import fr.maxlego08.menu.api.exceptions.InventoryException; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +import java.io.File; +import java.util.Collection; +import java.util.Optional; + +public interface BedrockManager { + + BedrockInventory loadBedrockInventory(Plugin plugin, String fileName) throws DialogException; + + Optional getBedrockInventory(String name); + + Optional getBedrockInventory(String pluginName, String fileName); + + Optional getBedrockInventory(Plugin plugin, String fileName); + + void deleteBedrockInventory(String name); + + void deleteBedrockInventory(Plugin plugin); + + void loadBedrockInventory(); + + BedrockInventory loadInventory(Plugin plugin, String fileName) throws DialogException, InventoryException; + + BedrockInventory loadInventory(Plugin plugin, File file) throws DialogException, InventoryException; + + BedrockInventory loadInventory(Plugin plugin, String fileName, Class dialogClass) throws DialogException, InventoryException; + + BedrockInventory loadInventory(Plugin plugin, File file, Class dialogClass) throws DialogException, InventoryException; + + void openBedrockInventory(Player player, BedrockInventory bedrockInventory); + + Collection getBedrockInventory(); + + InventoryManager getInventoryManager(); + + void reloadBedrockInventory(); +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/DialogInventory.java b/API/src/main/java/fr/maxlego08/menu/api/DialogInventory.java index 579a16b2..ebd56332 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/DialogInventory.java +++ b/API/src/main/java/fr/maxlego08/menu/api/DialogInventory.java @@ -2,7 +2,7 @@ import fr.maxlego08.menu.api.button.dialogs.BodyButton; import fr.maxlego08.menu.api.button.dialogs.InputButton; -import fr.maxlego08.menu.api.enums.DialogType; +import fr.maxlego08.menu.api.enums.dialog.DialogType; import fr.maxlego08.menu.api.requirement.Requirement; import fr.maxlego08.menu.api.utils.dialogs.record.ActionButtonRecord; import fr.maxlego08.menu.api.utils.dialogs.record.ZDialogInventoryBuild; diff --git a/API/src/main/java/fr/maxlego08/menu/api/DialogManager.java b/API/src/main/java/fr/maxlego08/menu/api/DialogManager.java index 17d05668..c975c0a0 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/DialogManager.java +++ b/API/src/main/java/fr/maxlego08/menu/api/DialogManager.java @@ -42,8 +42,6 @@ public interface DialogManager { Collection getDialogs(); - InventoryManager getInventoryManager(); - void reloadDialogs(); ConfigManagerInt getConfigManager(); diff --git a/API/src/main/java/fr/maxlego08/menu/api/MenuPlugin.java b/API/src/main/java/fr/maxlego08/menu/api/MenuPlugin.java index 65b344d1..cd138d4e 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/MenuPlugin.java +++ b/API/src/main/java/fr/maxlego08/menu/api/MenuPlugin.java @@ -181,6 +181,8 @@ public interface MenuPlugin extends Plugin { */ CommandManager getCommandManager(); + BedrockManager getBedrockManager(); + /** * Returns the storage manager. * This method returns the storage manager, which is used for storing and retrieving data. diff --git a/API/src/main/java/fr/maxlego08/menu/api/button/bedrock/BedrockButton.java b/API/src/main/java/fr/maxlego08/menu/api/button/bedrock/BedrockButton.java new file mode 100644 index 00000000..5874b949 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/button/bedrock/BedrockButton.java @@ -0,0 +1,34 @@ +package fr.maxlego08.menu.api.button.bedrock; + +import fr.maxlego08.menu.api.button.Button; +import fr.maxlego08.menu.api.enums.bedrock.BedrockImageType; + +public class BedrockButton extends Button { + private String text; + private BedrockImageType imageType = BedrockImageType.NONE; + private String imageData; + + public void setText(String text){ + this.text = text; + } + + public String getText() { + return this.text; + } + + public void setImageType(BedrockImageType imageType) { + this.imageType = imageType; + } + + public BedrockImageType getImageType() { + return this.imageType; + } + + public void setImageData(String imageData) { + this.imageData = imageData; + } + + public String getImageData() { + return this.imageData; + } +} \ No newline at end of file diff --git a/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/BodyButton.java b/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/BodyButton.java index 9d48cd2d..df5601b5 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/BodyButton.java +++ b/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/BodyButton.java @@ -1,7 +1,7 @@ package fr.maxlego08.menu.api.button.dialogs; import fr.maxlego08.menu.api.button.Button; -import fr.maxlego08.menu.api.enums.DialogBodyType; +import fr.maxlego08.menu.api.enums.dialog.DialogBodyType; import java.util.ArrayList; import java.util.List; diff --git a/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/InputButton.java b/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/InputButton.java index 70cbdc78..8d13232c 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/InputButton.java +++ b/API/src/main/java/fr/maxlego08/menu/api/button/dialogs/InputButton.java @@ -1,7 +1,7 @@ package fr.maxlego08.menu.api.button.dialogs; import fr.maxlego08.menu.api.button.Button; -import fr.maxlego08.menu.api.enums.DialogInputType; +import fr.maxlego08.menu.api.enums.dialog.DialogInputType; import fr.maxlego08.menu.api.utils.dialogs.record.SingleOption; import java.util.List; diff --git a/API/src/main/java/fr/maxlego08/menu/api/configuration/Config.java b/API/src/main/java/fr/maxlego08/menu/api/configuration/Config.java index 88b9b6ba..7b9a7f29 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/configuration/Config.java +++ b/API/src/main/java/fr/maxlego08/menu/api/configuration/Config.java @@ -3,7 +3,7 @@ import fr.maxlego08.menu.api.configuration.annotation.ConfigDialog; import fr.maxlego08.menu.api.configuration.annotation.ConfigOption; import fr.maxlego08.menu.api.configuration.annotation.ConfigUpdate; -import fr.maxlego08.menu.api.enums.DialogInputType; +import fr.maxlego08.menu.api.enums.dialog.DialogInputType; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.inventory.ClickType; diff --git a/API/src/main/java/fr/maxlego08/menu/api/configuration/annotation/ConfigOption.java b/API/src/main/java/fr/maxlego08/menu/api/configuration/annotation/ConfigOption.java index e3b88d1a..7065e9a2 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/configuration/annotation/ConfigOption.java +++ b/API/src/main/java/fr/maxlego08/menu/api/configuration/annotation/ConfigOption.java @@ -1,6 +1,6 @@ package fr.maxlego08.menu.api.configuration.annotation; -import fr.maxlego08.menu.api.enums.DialogInputType; +import fr.maxlego08.menu.api.enums.dialog.DialogInputType; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockImageType.java b/API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockImageType.java new file mode 100644 index 00000000..c455ebf3 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockImageType.java @@ -0,0 +1,7 @@ +package fr.maxlego08.menu.api.enums.bedrock; + +public enum BedrockImageType { + ULR, + PATH, + NONE, +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockType.java b/API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockType.java new file mode 100644 index 00000000..a99e0421 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/enums/bedrock/BedrockType.java @@ -0,0 +1,7 @@ +package fr.maxlego08.menu.api.enums.bedrock; + +public enum BedrockType { + MODAL, + SIMPLE, + CUSTOM, +} diff --git a/API/src/main/java/fr/maxlego08/menu/api/enums/DialogBodyType.java b/API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogBodyType.java similarity index 57% rename from API/src/main/java/fr/maxlego08/menu/api/enums/DialogBodyType.java rename to API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogBodyType.java index aa95589b..24659541 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/enums/DialogBodyType.java +++ b/API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogBodyType.java @@ -1,4 +1,4 @@ -package fr.maxlego08.menu.api.enums; +package fr.maxlego08.menu.api.enums.dialog; public enum DialogBodyType { PLAIN_MESSAGE, diff --git a/API/src/main/java/fr/maxlego08/menu/api/enums/DialogInputType.java b/API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogInputType.java similarity index 59% rename from API/src/main/java/fr/maxlego08/menu/api/enums/DialogInputType.java rename to API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogInputType.java index 0c511b1e..212ff6ef 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/enums/DialogInputType.java +++ b/API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogInputType.java @@ -1,8 +1,9 @@ -package fr.maxlego08.menu.api.enums; +package fr.maxlego08.menu.api.enums.dialog; public enum DialogInputType { BOOLEAN, SINGLE_OPTION, TEXT, NUMBER_RANGE, + BEDROCK_LABEL, } diff --git a/API/src/main/java/fr/maxlego08/menu/api/enums/DialogType.java b/API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogType.java similarity index 71% rename from API/src/main/java/fr/maxlego08/menu/api/enums/DialogType.java rename to API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogType.java index ae404709..92e5c311 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/enums/DialogType.java +++ b/API/src/main/java/fr/maxlego08/menu/api/enums/dialog/DialogType.java @@ -1,4 +1,4 @@ -package fr.maxlego08.menu.api.enums; +package fr.maxlego08.menu.api.enums.dialog; public enum DialogType { NOTICE, diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java b/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java index 78e8de8c..4e22c4b8 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/Message.java @@ -51,18 +51,24 @@ public enum Message implements IMessage { INVENTORY_NOT_FOUND("&cUnable to find the &f%toName% &cinventory in the &f%name%&c inventory."), INVENTORY_OPEN_OTHER("&aYou have just opened the inventory &f%name%&a to the &3%player%&a."), - DIALOG_OPEN_SUCCESS_OTHER("&aYou have just opened the dialog &f%name%&a to the &3%player%&a."), INVENTORY_OPEN_SUCCESS("&aYou have just opened the inventory &f%name%&a."), - DIALOG_OPEN_SUCCESS("&aYou have just opened the dialog &f%name%&a."), INVENTORY_OPEN_ERROR_INVENTORY("&cImpossible to find the inventory &f%name%&c."), - DIALOG_OPEN_ERROR_NOT_FOUND("&cImpossible to find the dialog &f%name%&c."), INVENTORY_OPEN_ERROR_COMMAND("&cImpossible to find the command &f%name%&c."), INVENTORY_OPEN_ERROR_PLAYER("&cUnable to find the player, please specify."), INVENTORY_OPEN_ERROR_CONSOLE("&cOnly one player can open an inventory."), - DIALOG_OPEN_ERROR_CONSOLE("&cOnly one player can open a dialog."), INVENTORY_OPEN_ITEM_ERROR("&cInventory &f%name%&c doesn't have open item."), INVENTORY_OPEN_ITEM_SUCCESS("&aYou have just given the open item to the player &f%name%&a."), + DIALOG_OPEN_SUCCESS("&aYou have just opened the dialog &f%name%&a."), + DIALOG_OPEN_SUCCESS_OTHER("&aYou have just opened the dialog &f%name%&a to the &3%player%&a."), + DIALOG_OPEN_ERROR_NOT_FOUND("&cImpossible to find the dialog &f%name%&c."), + DIALOG_OPEN_ERROR_CONSOLE("&cOnly one player can open a dialog."), + + BEDROCK_OPEN_SUCCESS("&aYou have just opened the bedrock inventory &f%name%&a."), + BEDROCK_OPEN_SUCCESS_OTHER("&aYou have just opened the bedrock inventory &f%name%&a to the &3%player%&a."), + BEDROCK_OPEN_ERROR_NOT_FOUND("&cImpossible to find the dialog &f%name%&c."), + BEDROCK_OPEN_ERROR_CONSOLE("&cOnly one player can open a bedrock inventory."), + DESCRIPTION_OPEN("Allows you to open an inventory"), DESCRIPTION_SAVE("Allows you to save the item in your hand"), DESCRIPTION_RELOAD("Allows you to reload configuration files"), @@ -94,6 +100,9 @@ public enum Message implements IMessage { DESCRIPTION_DIALOGS("Open dialogs builder"), DESCRIPTION_DIALOGS_OPEN("Allows you to open a dialog"), DESCRIPTION_DIALOGS_RELOAD("Allows you to reload dialogs files configuration"), + DESCRIPTION_BEDROCK("Open bedrock inventory builder"), + DESCRIPTION_BEDROCK_OPEN("Allows you to open a bedrock inventory"), + DESCRIPTION_BEDROCK_RELOAD("Allows you to reload bedrock inventory files configuration"), DESCRIPTION_ADDONS("List of official addons"), DESCRIPTION_DUMPLOG("Generate a dumplog file for support"), DESCRIPTION_CONTRIBUTORS("List of authors and contributors of the plugin"), @@ -101,6 +110,7 @@ public enum Message implements IMessage { RELOAD("&aYou have just reloaded the configuration files. &8(&7%inventories% inventories&8)"), RELOAD_INVENTORY("&aYou have just reloaded the inventories files. &8(&7%inventories% inventories&8)"), RELOAD_DIALOGS("&aYou have just reloaded the dialogs files. &8(&7%dialogs% dialogs&8)"), + RELOAD_BEDROCK("&aYou have just reloaded the bedrock inventory files. &8(&7%bedrock% bedrocks&8)"), RELOAD_INVENTORY_FILE("&aVous have just reloaded the inventory &f%name%&a."), RELOAD_COMMAND("&aYou have just reloaded the commands files."), RELOAD_COMMAND_FILE("&aVous have just reloaded the command &f%name%&a."), diff --git a/Hooks/Paper/src/main/java/fr/maxlego08/menu/zcore/logger/Logger.java b/API/src/main/java/fr/maxlego08/menu/zcore/logger/Logger.java similarity index 100% rename from Hooks/Paper/src/main/java/fr/maxlego08/menu/zcore/logger/Logger.java rename to API/src/main/java/fr/maxlego08/menu/zcore/logger/Logger.java diff --git a/Hooks/Bedrock/build.gradle.kts b/Hooks/Bedrock/build.gradle.kts new file mode 100644 index 00000000..bda96c65 --- /dev/null +++ b/Hooks/Bedrock/build.gradle.kts @@ -0,0 +1,10 @@ +group = "Hooks:Bedrock" + +repositories { + maven("https://repo.opencollab.dev/main/") +} + +dependencies { + compileOnly(projects.api) + compileOnly("org.geysermc.floodgate:api:2.2.4-SNAPSHOT") +} \ No newline at end of file diff --git a/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/Bedrock.java b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/Bedrock.java new file mode 100644 index 00000000..8cf139cb --- /dev/null +++ b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/Bedrock.java @@ -0,0 +1,22 @@ +package fr.maxlego08.menu; + +import org.geysermc.floodgate.api.FloodgateApi; + +// TIP To Run code, press or +// click the icon in the gutter. +public class Bedrock { + public static void main(String[] args) { + FloodgateApi api = FloodgateApi.getInstance(); + + //api.isFloodgatePlayer(uuid); + // TIP Press with your caret at the highlighted text + // to see how IntelliJ IDEA suggests fixing it. + System.out.printf("Hello and welcome!"); + + for (int i = 1; i <= 5; i++) { + // TIP Press to start debugging your code. We have set one breakpoint + // for you, but you can always add more by pressing . + System.out.println("i = " + i); + } + } +} \ No newline at end of file diff --git a/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/AbstractBedrockInventoryManager.java b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/AbstractBedrockInventoryManager.java new file mode 100644 index 00000000..217e78ed --- /dev/null +++ b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/AbstractBedrockInventoryManager.java @@ -0,0 +1,51 @@ +package fr.maxlego08.menu.hooks.bedrock; + +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.button.dialogs.InputButton; +import fr.maxlego08.menu.hooks.bedrock.loader.builder.BedrockBuilderClass; +import org.bukkit.entity.Player; +import org.geysermc.cumulus.component.Component; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.function.Function; + +public abstract class AbstractBedrockInventoryManager { + protected final MenuPlugin menuPlugin; + + public AbstractBedrockInventoryManager(MenuPlugin menuPlugin) { + this.menuPlugin = menuPlugin; + } + + protected List getInputComponents(Player player, List inputButtons) { + return buildComponents( + player, + inputButtons, + InputButton::getInputType, + BedrockBuilderClass::getDialogInputBuilder, + (builder, button) -> builder.build(player, button) + ); + } + + protected List buildComponents( + Player player, + List buttons, + Function typeExtractor, + Function> builderResolver, + BiFunction builderExecutor + ) { + return buttons.stream() + .map(button -> { + TYPE type = typeExtractor.apply(button); + if (type == null) return null; + + return builderResolver.apply(type) + .map(builder -> builderExecutor.apply(builder, button)) + .orElse(null); + }) + .filter(Objects::nonNull) + .toList(); + } +} \ No newline at end of file diff --git a/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockInventory.java b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockInventory.java new file mode 100644 index 00000000..d0dc72d8 --- /dev/null +++ b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockInventory.java @@ -0,0 +1,173 @@ +package fr.maxlego08.menu.hooks.bedrock; + +import fr.maxlego08.menu.api.BedrockInventory; +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.button.Button; +import fr.maxlego08.menu.api.button.bedrock.BedrockButton; +import fr.maxlego08.menu.api.button.dialogs.InputButton; +import fr.maxlego08.menu.api.engine.InventoryEngine; +import fr.maxlego08.menu.api.enums.bedrock.BedrockType; +import fr.maxlego08.menu.api.requirement.Requirement; +import fr.maxlego08.menu.api.utils.Placeholders; +import org.bukkit.entity.Player; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class ZBedrockInventory implements BedrockInventory { + + private final MenuPlugin menuPlugin; + private final String fileName; + private File file; + + private final String name; + private final String content; + private BedrockType bedrockType = BedrockType.SIMPLE; + private List bedrockButtons = new ArrayList<>(); + private List inputButtons = new ArrayList<>(); + + private final List actions = new ArrayList<>(); + private Requirement openRequirement; + + public ZBedrockInventory(MenuPlugin plugin, String fileName, String name, String content) { + this.menuPlugin = plugin; + this.name = name; + this.fileName = fileName.endsWith(".yml") ? fileName.replace(".yml", "") : fileName; + this.content = content; + } + + @Override + public String getName(Player player) { + return this.menuPlugin.parse(player, this.name); + } + + @Override + public String getContent(Player player) { + return this.menuPlugin.parse(player, this.content); + } + + @Override + public String getFileName() { + return fileName; + } + + @Override + public MenuPlugin getPlugin() { + return menuPlugin; + } + + @Override + public File getFile() { + return file; + } + + @Override + public void setFile(File file) { + this.file = file; + } + + @Override + public void setBedrockType(BedrockType bedrockType) { + this.bedrockType = bedrockType; + } + + @Override + public BedrockType getBedrockType() { + return bedrockType; + } + + @Override + public void setBedrockButtons(List bedrockButtons) { + this.bedrockButtons = bedrockButtons; + } + + @Override + public List getBedrockButtons() { + return this.bedrockButtons; + } + + @Override + public List getBedrockButtons(Player player) { + return filterByViewRequirement(this.bedrockButtons, player); + } + + @Override + public void setInputButtons(List inputButtons) { + this.inputButtons = inputButtons != null ? inputButtons : new ArrayList<>(); + } + + @Override + public List getInputButtons() { + return this.inputButtons; + } + + @Override + public List getInputButtons(Player player) { + return filterByViewRequirement(this.inputButtons, player); + } + + @Override + public void setOpenRequirement(Requirement openRequirement) { + this.openRequirement = openRequirement; + } + + @Override + public Requirement getOpenRequirement() { + return this.openRequirement; + } + + @Override + public boolean hasOpenRequirement(Player player) { + return checkRequirement(openRequirement, player); + } + + @Override + public void setRequirements(List actions) { + this.actions.addAll(actions); + } + + @Override + public List getRequirements() { + return actions; + } + + @SuppressWarnings("unchecked") + protected List filterByViewRequirement(List buttons, Player player) { + List visibleButtons = new ArrayList<>(); + for (T button : buttons) { + Button masterParent = button.getMasterParentButton(); + if (button.getClass().isInstance(masterParent)) { + T visible = getFirstVisibleButtonRecursive((T) masterParent, player); + if (visible != null) { + visibleButtons.add(visible); + } + } + } + return visibleButtons; + } + + @SuppressWarnings("unchecked") + private T getFirstVisibleButtonRecursive(T button, Player player) { + if (button.hasPermission()) { + boolean hasPermission = button.checkPermission(player, menuPlugin.getInventoryManager().getFakeInventory(), new Placeholders()); + if (!hasPermission) { + if (button.hasElseButton()) { + return getFirstVisibleButtonRecursive((T) button.getElseButton(), player); + } else { + return null; + } + } else { + return button; + } + } else { + return button; + } + } + protected boolean checkRequirement(Requirement requirement, Player player) { + if (requirement == null) return true; + InventoryEngine fakeInventory = menuPlugin.getInventoryManager().getFakeInventory(); + Placeholders placeholder = new Placeholders(); + return requirement.execute(player, null, fakeInventory, placeholder); + } +} diff --git a/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockManager.java b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockManager.java new file mode 100644 index 00000000..1ed7daf9 --- /dev/null +++ b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/ZBedrockManager.java @@ -0,0 +1,333 @@ +package fr.maxlego08.menu.hooks.bedrock; + +import fr.maxlego08.menu.api.*; +import fr.maxlego08.menu.api.button.bedrock.BedrockButton; +import fr.maxlego08.menu.api.button.dialogs.InputButton; +import fr.maxlego08.menu.api.configuration.Config; +import fr.maxlego08.menu.api.exceptions.DialogException; +import fr.maxlego08.menu.api.exceptions.DialogFileNotFound; +import fr.maxlego08.menu.api.exceptions.InventoryException; +import fr.maxlego08.menu.api.requirement.Action; +import fr.maxlego08.menu.api.requirement.Requirement; +import fr.maxlego08.menu.api.utils.Loader; +import fr.maxlego08.menu.api.utils.Placeholders; +import fr.maxlego08.menu.hooks.bedrock.loader.BedrockLoader; +import fr.maxlego08.menu.hooks.bedrock.loader.builder.BedrockBuilderClass; +import fr.maxlego08.menu.hooks.bedrock.loader.builder.BedrockButtonBuilder; +import fr.maxlego08.menu.zcore.logger.Logger; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.geysermc.cumulus.form.CustomForm; +import org.geysermc.cumulus.form.Form; +import org.geysermc.cumulus.form.ModalForm; +import org.geysermc.cumulus.form.SimpleForm; +import org.geysermc.cumulus.form.util.FormBuilder; +import org.geysermc.cumulus.response.FormResponse; +import org.geysermc.floodgate.api.FloodgateApi; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.List; +import java.util.stream.Stream; + +public class ZBedrockManager extends AbstractBedrockInventoryManager implements BedrockManager { + private final MenuPlugin menuPlugin; + private static InventoryManager inventoryManager; + private final Map> bedrockInventory = new HashMap<>(); + private final Map activeBedrockInventory = new HashMap<>(); + private final BedrockBuilderClass dialogBuilders; + + public ZBedrockManager(final MenuPlugin menuPlugin) { + super(menuPlugin); + this.menuPlugin = menuPlugin; + this.dialogBuilders = new BedrockBuilderClass(this.menuPlugin); + inventoryManager = menuPlugin.getInventoryManager(); + } + + @Override + public BedrockInventory loadBedrockInventory(Plugin plugin, String fileName) throws DialogException { + try { + return loadInventory(plugin, fileName); + } catch (InventoryException e) { + throw new DialogException("Failed to load dialog: " + e.getMessage()); + } + } + + @Override + public Optional getBedrockInventory(String dialogName) { + Optional dialogs; + if (dialogName.contains(":")){ + String[] values = dialogName.split(":",2); + dialogs = getBedrockInventory(values[0], values[1]); + } else { + dialogs = getBedrockInventoryOptional(dialogName); + } + return dialogs; + } + public Optional getBedrockInventoryOptional(String name) { + for (List dialogList : bedrockInventory.values()) { + for (BedrockInventory dialog : dialogList) { + if (dialog.getFileName().equals(name) || dialog.getName(null).equals(name)) { + return Optional.of(dialog); + } + } + } + return Optional.empty(); + } + @Override + public Optional getBedrockInventory(String pluginName, String fileName) { + List pluginDialogs = bedrockInventory.get(pluginName); + if (pluginDialogs == null) return Optional.empty(); + + return pluginDialogs.stream() + .filter(dialog -> dialog.getFileName().equals(fileName) || dialog.getName(null).equals(fileName)) + .findFirst(); + } + + @Override + public Optional getBedrockInventory(Plugin plugin, String fileName) { + List pluginDialogs = bedrockInventory.get(plugin.getName()); + if (pluginDialogs == null) return Optional.empty(); + + return pluginDialogs.stream() + .filter(dialog -> dialog.getFileName().equals(fileName)) + .findFirst(); + } + + @Override + public void deleteBedrockInventory(String name) { + for (List dialogList : bedrockInventory.values()) { + dialogList.removeIf(dialog -> + dialog.getFileName().equals(name) || dialog.getName(null).equals(name) + ); + } + } + + @Override + public void deleteBedrockInventory(Plugin plugin) { + bedrockInventory.remove(plugin.getName()); + } + + @Override + public void loadBedrockInventory() { + File folder = new File(menuPlugin.getDataFolder(), "bedrock"); + if (!folder.exists()) { + folder.mkdirs(); + return; + } + + try (Stream stream = Files.walk(Paths.get(folder.getPath()))) { + stream.skip(1) + .map(Path::toFile) + .filter(File::isFile) + .filter(file -> file.getName().endsWith(".yml")) + .forEach(file -> { + try { + this.loadInventory(this.menuPlugin, file); + } catch (DialogException | InventoryException exception) { + Logger.info("Failed to load bedrock inventory from file: " + file.getName(), Logger.LogType.WARNING); + + } + }); + } catch (IOException exception) { + Logger.info("Failed to load bedrock inventory", Logger.LogType.WARNING); + } + } + + @Override + public BedrockInventory loadInventory(Plugin plugin, String fileName) throws DialogException, InventoryException { + return this.loadInventory(plugin, fileName, ZBedrockInventory.class); + } + + @Override + public BedrockInventory loadInventory(Plugin plugin, File file) throws DialogException, InventoryException { + return this.loadInventory(plugin, file, ZBedrockInventory.class); + } + + @Override + public BedrockInventory loadInventory(Plugin plugin, String fileName, Class dialogClass) + throws DialogException, InventoryException { + File file = new File(plugin.getDataFolder(), fileName); + if (!file.exists()) { + throw new DialogFileNotFound("Dialog file not found: " + fileName + " in " + + plugin.getDataFolder().getAbsolutePath() + "/" + fileName); + } + return this.loadInventory(plugin, file, dialogClass); + } + + @Override + public BedrockInventory loadInventory(Plugin plugin, File file, Class dialogClass) + throws DialogException, InventoryException { + YamlConfiguration configuration = YamlConfiguration.loadConfiguration(file); + + Loader loader = new BedrockLoader(this.menuPlugin, this); + BedrockInventory dialog = loader.load(configuration, "", file, dialogClass, plugin); + + List dialogsList = this.bedrockInventory.computeIfAbsent(plugin.getName(), k -> new ArrayList<>()); + dialogsList.add(dialog); + + if (Config.enableInformationMessage) { + Logger.info(file.getPath() + " loaded successfully!"); + } + + return dialog; + } + + @Override + public void reloadBedrockInventory() { + bedrockInventory.clear(); + activeBedrockInventory.clear(); + + loadBedrockInventory(); + + Logger.info("Bedrock Inventory reloaded successfully!"); + } + + /** + * Opens a specific dialog for the specified player + */ + @Override + public void openBedrockInventory(Player player, BedrockInventory bedrockInventory) { + try { + boolean canOpen = bedrockInventory.hasOpenRequirement(player); + if (!canOpen){ + return; + } + + Form form = createBedrockByType(bedrockInventory, player); + + activeBedrockInventory.put(player.getUniqueId(), bedrockInventory); + FloodgateApi.getInstance().sendForm(player.getUniqueId(), form); + } catch (Exception e) { + if (Config.enableInformationMessage){ + Logger.info("Failed to open dialog for player: " + player.getName()+" error :"+ e.getMessage(), Logger.LogType.ERROR); + if (Config.enableDebug){ + Logger.info("Error details: "+e, Logger.LogType.ERROR); + } + } + } + } + + /** + * Creates a dialog based on the dialog type + */ + private Form createBedrockByType(BedrockInventory inventory, Player player) { + return switch (inventory.getBedrockType()) { + case MODAL -> { + ModalForm.Builder builder = ModalForm.builder() + .title(inventory.getName(player)) + .content(inventory.getContent(player)) + .button1("Button 1") + .button2("Button 2") + .validResultHandler((form, responseData) -> { + String content = form.content(); + if (responseData.clickedFirst()) { + //FirstButton click + return; + } + //SecondButton click + return; + }); + + yield withDefaultResultHandler(builder, player, inventory); + } + + case SIMPLE -> { + SimpleForm.Builder builder = SimpleForm.builder() + .title(inventory.getName(player)) + .content(inventory.getContent(player)); + + List buttons = inventory.getBedrockButtons(player); + BedrockButtonBuilder buttonBuilder = this.dialogBuilders.getBedrockButtonBuilder(); + buttons.forEach(button -> { + builder.button(buttonBuilder.build(player, button)); + }); + builder.validResultHandler((form, responseData) -> { + int slot = responseData.clickedButtonId(); + + for (Action action : buttons.get(slot).getActions()) { + action.preExecute(player, null, inventoryManager.getFakeInventory(), new Placeholders()); + } + }); + yield withDefaultResultHandler(builder, player, inventory); + } + + case CUSTOM -> { + CustomForm.Builder builder = CustomForm.builder() + .title(inventory.getName(player)); + + + List buttons = inventory.getInputButtons(player); + getInputComponents(player, buttons).forEach(builder::component); + + builder.validResultHandler((form, responseData) -> { + Placeholders placeholders = new Placeholders(); + + for (int i = 0; i < buttons.size(); i++) { + InputButton input = buttons.get(i); + String key = input.getKey(); + String value = responseData.valueAt(i); // i = index de la liste + if (value == null) { + continue; + } + + placeholders.register(key, value); + } + + for (Requirement requirement : inventory.getRequirements()) { + requirement.execute(player, null, inventoryManager.getFakeInventory(), placeholders); + } + }); + yield withDefaultResultHandler(builder, player, inventory); + } + }; + } + + protected , F extends Form, R extends FormResponse> Form withDefaultResultHandler(B builder, Player player, BedrockInventory inventory) { + builder.closedOrInvalidResultHandler((form, responseData) -> { + player.sendMessage("Formulaire fermé ou invalide !"); + }); + return builder.build(); + } + + /** + * Gets the active bedrock Inventory for a player + */ + public Optional getActiveBedrockInventory(Player player) { + return Optional.ofNullable(activeBedrockInventory.get(player.getUniqueId())); + } + + /** + * Removes the active bedrock Inventory for a player + */ + public void removeActiveBedrockInventory(Player player) { + activeBedrockInventory.remove(player.getUniqueId()); + } + + public boolean openBedrockInventoryByName(Player player, String dialogName) { + Optional dialog = getBedrockInventory(dialogName); + if (dialog.isPresent()) { + openBedrockInventory(player, dialog.get()); + return true; + } + return false; + } + + @Override + public Collection getBedrockInventory() { + List allDialogs = new ArrayList<>(); + for (List dialogList : bedrockInventory.values()) { + allDialogs.addAll(dialogList); + } + return Collections.unmodifiableCollection(allDialogs); + } + @Override + public InventoryManager getInventoryManager() { + return inventoryManager; + } +} \ No newline at end of file diff --git a/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockButtonLoader.java b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockButtonLoader.java new file mode 100644 index 00000000..35d04bbe --- /dev/null +++ b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockButtonLoader.java @@ -0,0 +1,44 @@ +package fr.maxlego08.menu.hooks.bedrock.loader; + +import fr.maxlego08.menu.api.button.DefaultButtonValue; +import fr.maxlego08.menu.api.button.bedrock.BedrockButton; +import fr.maxlego08.menu.api.enums.bedrock.BedrockImageType; +import fr.maxlego08.menu.api.loader.ButtonLoader; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.Plugin; + +public class BedrockButtonLoader extends ButtonLoader { + + public BedrockButtonLoader(Plugin plugin, String name) { + super(plugin, name); + } + + public BedrockButtonLoader(Plugin plugin) { + super(plugin, "bedrock_button"); + } + + @Override + public BedrockButton load(YamlConfiguration configuration, String path, DefaultButtonValue defaultButtonValue) { + BedrockButton bedrockButton = new BedrockButton(); + String text = configuration.getString(path + ".text", ""); + + // Type d'image + BedrockImageType imageType; + String imageTypeStr = configuration.getString(path + ".image-type", ""); + try { + imageType = BedrockImageType.valueOf(imageTypeStr.toUpperCase()); + } catch (IllegalArgumentException | NullPointerException e) { + imageType = BedrockImageType.NONE; + } + + // Données de l'image + String imageData = configuration.getString(path + ".image-value", ""); + + bedrockButton.setText(text); + bedrockButton.setImageType(imageType); + bedrockButton.setImageData(imageData); + + return bedrockButton; + } + +} diff --git a/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockLoader.java b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockLoader.java new file mode 100644 index 00000000..9521199b --- /dev/null +++ b/Hooks/Bedrock/src/main/java/fr/maxlego08/menu/hooks/bedrock/loader/BedrockLoader.java @@ -0,0 +1,154 @@ +package fr.maxlego08.menu.hooks.bedrock.loader; + +import fr.maxlego08.menu.api.BedrockInventory; +import fr.maxlego08.menu.api.MenuPlugin; +import fr.maxlego08.menu.api.button.Button; +import fr.maxlego08.menu.api.button.bedrock.BedrockButton; +import fr.maxlego08.menu.api.button.dialogs.InputButton; +import fr.maxlego08.menu.api.enums.bedrock.BedrockType; +import fr.maxlego08.menu.api.exceptions.InventoryButtonException; +import fr.maxlego08.menu.api.exceptions.InventoryException; +import fr.maxlego08.menu.api.requirement.Requirement; +import fr.maxlego08.menu.api.utils.Loader; +import fr.maxlego08.menu.hooks.bedrock.ZBedrockInventory; +import fr.maxlego08.menu.hooks.bedrock.ZBedrockManager; +import fr.maxlego08.menu.zcore.logger.Logger; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiConsumer; + +public class BedrockLoader implements Loader { + private final MenuPlugin menuPlugin; + private final ZBedrockManager manager; + + public BedrockLoader(MenuPlugin menuPlugin, ZBedrockManager manager) { + this.menuPlugin = menuPlugin; + this.manager = manager; + } + + @Override + public BedrockInventory load(YamlConfiguration configuration, String path, Object... objects) throws InventoryException { + File file = (File) objects[0]; + + String title = configuration.getString("title", ""); + String content = configuration.getString("content", ""); + + ZBedrockInventory BedrockInventory = new ZBedrockInventory(menuPlugin, file.getName(), title, content); + + String typeString = configuration.getString("type", "SIMPLE"); + BedrockType bedrockType; + try { + bedrockType = BedrockType.valueOf(typeString.toUpperCase()); + BedrockInventory.setBedrockType(bedrockType); + } catch (IllegalArgumentException e) { + throw new InventoryException("Invalid dialog type: " + typeString); + } + + if (configuration.isConfigurationSection("open-requirement")){ + try { + Requirement openRequirement = loadRequirement(configuration, "open-requirement.", file); + BedrockInventory.setOpenRequirement(openRequirement); + } catch (InventoryException e) { + Logger.info("Failed to load open requirement: " + e.getMessage(), Logger.LogType.WARNING); + } + } + + loadSpecificItems(bedrockType, configuration, BedrockInventory, file); + + BedrockInventory.setFile(file); + return BedrockInventory; + } + + /** + * Loads input buttons from the configuration + */ + private List loadButtons( + YamlConfiguration configuration, + File file, + String sectionKey, + Class buttonClass, + BiConsumer postProcess + ) { + List buttons = new ArrayList<>(); + + ConfigurationSection section = configuration.getConfigurationSection(sectionKey); + + if (section == null) { + return buttons; + } + + Loader