From b2561f55aec737bbca597fd7d33c505c455236d7 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Tue, 7 Jul 2026 21:55:41 +0200 Subject: [PATCH] per enchant config finished --- .../global/AbstractEnchantConfigGui.java | 5 + .../gui/config/global/EnchantConfigGui.java | 126 +++++++++++++----- .../config/global/EnchantCostConfigGui.java | 27 ++-- .../config/global/EnchantLimitConfigGui.java | 12 +- .../global/EnchantMergeLimitConfigGui.java | 16 ++- .../gui/config/global/ItemConfigGui.java | 8 +- .../config/list/SettingGuiListConfigGui.java | 18 ++- .../settings/EnchantCostSettingsGui.java | 3 +- .../gui/config/settings/IntSettingsGui.java | 6 +- 9 files changed, 162 insertions(+), 59 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java index b4f732d4..5583b382 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import org.bukkit.event.inventory.InventoryClickEvent; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; @@ -30,6 +31,10 @@ public abstract class AbstractEnchantConfigGui enchantments; + private final PatternPane pane; + + private EnchantLimitConfigGui enchantLimitConfigGui; + private EnchantMergeLimitConfigGui enchantMergeLimitConfigGui; + private EnchantCostConfigGui enchantCostConfigGui; + + private EnchantConflictGui enchantConflictGui; + private GroupConfigGui groupConfigGui; public EnchantConfigGui(@NotNull Set enchantments) { super(3, "Configuring Enchantments", CustomAnvil.instance); + this.enchantments = enchantments; Pattern pattern = new Pattern( "0000D0000", "023405600", "Q00000000" ); - PatternPane pane = new PatternPane(0, 0, 9, 3, pattern); + pane = new PatternPane(0, 0, 9, 3, pattern); addPane(pane); GuiGlobalItems.addBackgroundItem(pane); @@ -71,49 +69,93 @@ public class EnchantConfigGui extends ChestGui { pane.bindItem('D', new GuiItem(displayItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); - // enchant level limit item - var enchantLimitItem = MainConfigGui.enchantLimitItem(new EnchantLimitConfigGui()); //TODO - pane.bindItem('2', enchantLimitItem); - - // enchant level limit item - var enchantMergeLimitItem = MainConfigGui.enchantMergeLimitItem(new EnchantMergeLimitConfigGui()); //TODO - pane.bindItem('3', enchantMergeLimitItem); - - // enchant cost item - var enchantCostItem = MainConfigGui.enchantCostItem(new EnchantCostConfigGui()); //TODO - pane.bindItem('4', enchantCostItem); + updateGuiValues(); // Enchantment Conflicts item - var enchantConflictItem = MainConfigGui.enchantConflictItem(getEnchantConflictGui(enchantments)); + var enchantConflictItem = MainConfigGui.enchantConflictItem(getEnchantConflictGui()); pane.bindItem('5', enchantConflictItem); // Group config items - var groupConfigItem = MainConfigGui.groupConfigItem(getGroupConfigGui(enchantments)); + var groupConfigItem = MainConfigGui.groupConfigItem(getGroupConfigGui()); pane.bindItem('6', groupConfigItem); // quit item pane.bindItem('Q', MainConfigGui.quitItem()); } + private GuiItem enchantLimitConfigGui() { + if (enchantLimitConfigGui == null) { + enchantLimitConfigGui = new EnchantLimitConfigGui(this); + enchantLimitConfigGui.setFilter(enchantments::contains); + enchantLimitConfigGui.init(); + } + + // Bypass + if(enchantments.size() == 1) { + var enchant = enchantments.iterator().next(); + var factory = EnchantLimitConfigGui.createFactory(enchant, this); + + return enchantLimitConfigGui.itemFromFactory(enchant, factory); + } + + return MainConfigGui.enchantLimitItem(enchantLimitConfigGui); + } + + private GuiItem enchantMergeLimitConfigGui() { + if (enchantMergeLimitConfigGui == null) { + enchantMergeLimitConfigGui = new EnchantMergeLimitConfigGui(this); + enchantMergeLimitConfigGui.setFilter(enchantments::contains); + enchantMergeLimitConfigGui.init(); + } + + // Bypass + if(enchantments.size() == 1) { + var enchant = enchantments.iterator().next(); + var factory = EnchantMergeLimitConfigGui.createFactory(enchant, this); + + return enchantMergeLimitConfigGui.itemFromFactory(enchant, factory); + } + + return MainConfigGui.enchantMergeLimitItem(enchantMergeLimitConfigGui); + } + + private GuiItem enchantCostConfigGui() { + if (enchantCostConfigGui == null) { + enchantCostConfigGui = new EnchantCostConfigGui(this); + enchantCostConfigGui.setFilter(enchantments::contains); + enchantCostConfigGui.init(); + } + + // Bypass + if(enchantments.size() == 1) { + var enchant = enchantments.iterator().next(); + var factory = EnchantCostConfigGui.createFactory(enchant, this); + + return enchantCostConfigGui.itemFromFactory(enchant, factory); + } + + return MainConfigGui.enchantCostItem(enchantCostConfigGui); + } + @NotNull @Contract(pure = true) - private Predicate getGroupFilter(@NotNull Set enchantments) { + private Predicate getGroupFilter() { return group -> group.getEnchants() .stream() .anyMatch(enchantments::contains); } - private EnchantConflictGui getEnchantConflictGui(@NotNull Set enchantments) { + private EnchantConflictGui getEnchantConflictGui() { if (enchantConflictGui == null) { enchantConflictGui = new EnchantConflictGui(this); - enchantConflictGui.setFilter(getGroupFilter(enchantments)); + enchantConflictGui.setFilter(getGroupFilter()); enchantConflictGui.init(); } return enchantConflictGui; } - private GroupConfigGui getGroupConfigGui(@NotNull Set enchantments) { + private GroupConfigGui getGroupConfigGui() { if (groupConfigGui == null) { groupConfigGui = new GroupConfigGui(this); @@ -122,7 +164,7 @@ public class EnchantConfigGui extends ChestGui { .getConflictManager() .getConflictList() .stream() - .filter(getGroupFilter(enchantments)) + .filter(getGroupFilter()) .map(EnchantConflictGroup::getCantConflictGroup) .collect(Collectors.toSet()); @@ -135,4 +177,20 @@ public class EnchantConfigGui extends ChestGui { return groupConfigGui; } + @Override + public void updateGuiValues() { + // enchant level limit item + pane.bindItem('2', enchantLimitConfigGui()); + + // enchant level limit item + pane.bindItem('3', enchantMergeLimitConfigGui()); + + // enchant cost item + pane.bindItem('4', enchantCostConfigGui()); + } + + @Override + public Gui getConnectedGui() { + return this; + } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java index a6145368..677ca54d 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java @@ -1,14 +1,14 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; -import xyz.alexcrea.cuanvil.enchant.EnchantmentProperties; -import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity; +import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.util.CasedStringUtil; @@ -18,13 +18,13 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; +import static io.delilaheve.util.ConfigOptions.ENCHANT_VALUES_ROOT; + /** * Global Config gui for enchantment cost settings. */ public class EnchantCostConfigGui extends AbstractEnchantConfigGui { - private static final String SECTION_NAME = "enchant_values"; - private static EnchantCostConfigGui INSTANCE = null; @Nullable @@ -37,18 +37,29 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui displayLore = factory.getDisplayLore(); - if(!displayLore.isEmpty()){ + if (!displayLore.isEmpty()) { lore.add(""); lore.addAll(displayLore); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java index e9edbebf..1d5c9ec5 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java @@ -1,11 +1,13 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import io.delilaheve.util.ConfigOptions; import org.bukkit.Material; import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; +import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.util.CasedStringUtil; @@ -36,14 +38,22 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui extends ElementListConfigGui< T >{ +public abstract class SettingGuiListConfigGui extends ElementListConfigGui { protected HashMap guiItemMap; protected HashMap factoryMap; + protected SettingGuiListConfigGui(@NotNull String title, Gui parent) { super(title, parent); this.guiItemMap = new HashMap<>(); @@ -44,7 +45,7 @@ public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGu @Override public void updateValueForGeneric(T generic, boolean shouldUpdate) { - if(!this.factoryMap.containsKey(generic)){ + if (!this.factoryMap.containsKey(generic)) { // Create new item & factory S factory = createFactory(generic); GuiItem newItem = itemFromFactory(generic, factory); @@ -52,7 +53,7 @@ public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGu addToPage(newItem); this.guiItemMap.put(generic, newItem); this.factoryMap.put(generic, factory); - }else{ + } else { S factory = this.factoryMap.get(generic); // Update old item GuiItem oldItem = this.guiItemMap.get(generic); @@ -61,7 +62,7 @@ public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGu updateGuiItem(oldItem, newItem); } - if(shouldUpdate){ + if (shouldUpdate) { update(); } } @@ -74,7 +75,7 @@ public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGu super.reloadValues(); } - private void updateGuiItem(GuiItem oldITem, GuiItem newItem){ + private void updateGuiItem(GuiItem oldITem, GuiItem newItem) { oldITem.setItem(newItem.getItem()); oldITem.setProperties(newItem.getProperties()); oldITem.setVisible(newItem.isVisible()); @@ -86,17 +87,22 @@ public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGu } @Override // Not used - protected void updateGeneric(T generic, ItemStack usedItem) {} + protected void updateGeneric(T generic, ItemStack usedItem) { + } + @Override // Not used protected ItemStack createItemForGeneric(T generic) { return null; } protected abstract List getCreateItemLore(); + protected abstract Consumer getCreateClickConsumer(); + protected abstract String createItemName(); protected abstract S createFactory(T generic); + protected abstract GuiItem itemFromFactory(T generic, S factory); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java index 2fbc47ad..0d4bc89a 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java @@ -183,7 +183,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { assert nowMeta != null; nowMeta.setDisplayName("§fValue: §e" + nowBook); - if(!holder.displayLore.isEmpty()){ + if (!holder.displayLore.isEmpty()) { nowMeta.setLore(holder.displayLore); } @@ -202,7 +202,6 @@ public class EnchantCostSettingsGui extends IntSettingsGui { } pane.bindItem('D', returnToDefault); - } /** diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java index 73121a64..c32d22ca 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java @@ -318,9 +318,9 @@ public class IntSettingsGui extends AbstractSettingGui { this.defaultVal = defaultVal; this.steps = steps; - if(displayLore == null){ + if (displayLore == null) { this.displayLore = Collections.emptyList(); - }else { + } else { this.displayLore = displayLore; } } @@ -392,7 +392,7 @@ public class IntSettingsGui extends AbstractSettingGui { protected String deltaDisplay(ValueDisplayType type, int now, int planned) { var delta = planned - now; - if(delta < 0) return "§c" + delta; + if (delta < 0) return "§c" + delta; else return "§a+" + delta; }