From c0762d862e15361d912afa8ade0773b4ff00e557 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 03:06:33 +0100 Subject: [PATCH 1/9] add enchant limit config gui. also fixed some style & grammar issue --- .../alexcrea/cuanvil/gui/MainConfigGui.java | 23 ++-- .../cuanvil/gui/config/BasicConfigGui.java | 13 +-- .../gui/config/EnchantLimitConfigGui.java | 104 ++++++++++++++++++ .../config/settings/AbstractSettingGui.java | 2 +- .../gui/config/settings/BoolSettingsGui.java | 7 +- .../gui/config/settings/IntSettingsGui.java | 13 ++- .../gui/{utils => util}/GuiGlobalActions.java | 2 +- .../gui/{utils => util}/GuiGlobalItems.java | 51 ++++++--- .../xyz/alexcrea/cuanvil/util/StringUtil.java | 21 ++++ .../cuanvil/command/EditConfigExecutor.kt | 2 +- 10 files changed, 200 insertions(+), 38 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java rename src/main/java/xyz/alexcrea/cuanvil/gui/{utils => util}/GuiGlobalActions.java (98%) rename src/main/java/xyz/alexcrea/cuanvil/gui/{utils => util}/GuiGlobalItems.java (80%) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/util/StringUtil.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java index 891e011..8dd42a5 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java @@ -9,8 +9,9 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.gui.config.BasicConfigGui; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.config.EnchantLimitConfigGui; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import java.util.Collections; @@ -45,8 +46,19 @@ public class MainConfigGui extends ChestGui { basicConfigMeta.setLore(Collections.singletonList("\u00A77Click here to open basic config menu")); basicConfigItemstack.setItemMeta(basicConfigMeta); - GuiItem placeholder1 = GuiGlobalItems.goToGuiItem(basicConfigItemstack, BasicConfigGui.INSTANCE); - pane.bindItem('1', placeholder1); + GuiItem basicConfigItem = GuiGlobalItems.goToGuiItem(basicConfigItemstack, BasicConfigGui.INSTANCE); + pane.bindItem('1', basicConfigItem); + + // enchant level limit item + ItemStack enchantLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta enchantLimitMeta = enchantLimitItemstack.getItemMeta(); + + enchantLimitMeta.setDisplayName("\u00A7aEnchantment Level Limit"); + enchantLimitMeta.setLore(Collections.singletonList("\u00A77Click here to open enchantment level limit menu")); + enchantLimitItemstack.setItemMeta(enchantLimitMeta); + + GuiItem enchantLimitItem = GuiGlobalItems.goToGuiItem(enchantLimitItemstack, EnchantLimitConfigGui.INSTANCE); + pane.bindItem('2', enchantLimitItem); // WIP configuration items ItemStack wipItemstack = new ItemStack(Material.BARRIER); @@ -54,14 +66,11 @@ public class MainConfigGui extends ChestGui { wipMeta.setDisplayName("\u00A7cWIP"); wipItemstack.setItemMeta(wipMeta); - GuiItem wip2 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip3 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip4 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip5 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip6 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); - - pane.bindItem('2', wip2); pane.bindItem('3', wip3); pane.bindItem('4', wip4); pane.bindItem('5', wip5); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java index 5b973f3..d87381a 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java @@ -14,8 +14,8 @@ import xyz.alexcrea.cuanvil.gui.MainConfigGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import java.util.Collections; @@ -28,7 +28,7 @@ public class BasicConfigGui extends ValueUpdatableGui { } private BasicConfigGui(){ - super(3, "\u00A78Basic Config GUI", CustomAnvil.instance); + super(3, "\u00A78Basic Config", CustomAnvil.instance); } @@ -85,13 +85,13 @@ public class BasicConfigGui extends ValueUpdatableGui { // item repair cost range = ConfigOptions.REPAIR_COST_RANGE; - this.itemRepairCost = IntSettingsGui.factory("\u00A78Item repair cost", this, + this.itemRepairCost = IntSettingsGui.factory("\u00A78Item Repair Cost", this, ConfigOptions.ITEM_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_ITEM_REPAIR_COST, 1, 5, 10, 50, 100); // unit repair cost - this.unitRepairCost = IntSettingsGui.factory("\u00A78Unit repair cost", this, + this.unitRepairCost = IntSettingsGui.factory("\u00A78Unit Repair Cost", this, ConfigOptions.UNIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_UNIT_REPAIR_COST, 1, 5, 10, 50, 100); @@ -105,12 +105,11 @@ public class BasicConfigGui extends ValueUpdatableGui { // sacrifice illegal enchant cost range = ConfigOptions.SACRIFICE_ILLEGAL_COST_RANGE; - this.sacrificeIllegalEnchantCost = IntSettingsGui.factory("\u00A78Sacrifice Illegal enchant Cost", this, + this.sacrificeIllegalEnchantCost = IntSettingsGui.factory("\u00A78Sacrifice Illegal Enchant Cost", this, ConfigOptions.SACRIFICE_ILLEGAL_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_SACRIFICE_ILLEGAL_COST, 1, 5, 10, 50, 100); - } @Override diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java new file mode 100644 index 0000000..69a00c4 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java @@ -0,0 +1,104 @@ +package xyz.alexcrea.cuanvil.gui.config; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.pane.Orientable; +import com.github.stefvanschie.inventoryframework.pane.OutlinePane; +import com.github.stefvanschie.inventoryframework.pane.Pane; +import com.github.stefvanschie.inventoryframework.pane.PatternPane; +import com.github.stefvanschie.inventoryframework.pane.util.Pattern; +import io.delilaheve.CustomAnvil; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.gui.MainConfigGui; +import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; +import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; +import xyz.alexcrea.cuanvil.util.StringUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class EnchantLimitConfigGui extends ValueUpdatableGui { + + private final static String SECTION_NAME = "enchant_limits"; + private final static Material SECONDARY_BACKGROUND_MATERIAL = Material.BLACK_STAINED_GLASS_PANE; + + public final static EnchantLimitConfigGui INSTANCE = new EnchantLimitConfigGui(); + + static { + INSTANCE.init(); + } + + private EnchantLimitConfigGui(){ + super(6, "\u00A78Enchantment Level Limit", CustomAnvil.instance); + + } + + PatternPane backItems; + OutlinePane filledEnchant; + private void init(){ + // Back item panel + Pattern pattern = new Pattern( + "000000000", + "000000000", + "000000000", + "000000000", + "000000000", + "B11111111" + ); + backItems = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern); + addPane(backItems); + + GuiGlobalItems.addBackItem(backItems, MainConfigGui.INSTANCE); + + GuiGlobalItems.addBackgroundItem(backItems); + backItems.bindItem('1', GuiGlobalItems.backgroundItem(SECONDARY_BACKGROUND_MATERIAL)); + + // enchant item panel + filledEnchant = new OutlinePane(0, 0, 9, 5); + filledEnchant.align(OutlinePane.Alignment.BEGIN); + filledEnchant.setOrientation(Orientable.Orientation.HORIZONTAL); + addPane(filledEnchant); + + prepareValues(); + updateGuiValues(); + } + + private List bookItemFactoryList; + protected void prepareValues(){ + bookItemFactoryList = new ArrayList<>(); + + for (Enchantment enchant : Enchantment.values()) { + String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT); + String prettyKey = StringUtil.snakeToUpperSpacedCase(key); + + IntSettingsGui.IntSettingFactory factory = IntSettingsGui.factory(prettyKey, this, + SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255, + enchant.getMaxLevel(), + 1, 5, 10, 50, 100); + + bookItemFactoryList.add(factory); + } + } + + @Override + public void updateGuiValues() { + // probably not the most efficient but hey ! it do the work + // TODO optimise one day.. maybe + + this.filledEnchant.clear(); + + for (IntSettingsGui.IntSettingFactory inventoryFactory : this.bookItemFactoryList) { + + GuiItem item = GuiGlobalItems.intSettingGuiItem(inventoryFactory, + Material.ENCHANTED_BOOK, + inventoryFactory.getTitle()); + this.filledEnchant.addItem(item); + } + + update(); + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/AbstractSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/AbstractSettingGui.java index 68ab60d..4ef2781 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/AbstractSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/AbstractSettingGui.java @@ -10,7 +10,7 @@ import io.delilaheve.CustomAnvil; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import java.util.Collections; import java.util.List; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java index d524b78..12953e8 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java @@ -11,7 +11,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import java.util.Collections; import java.util.function.Consumer; @@ -139,6 +139,11 @@ public class BoolSettingsGui extends AbstractSettingGui{ this.defaultVal = defaultVal; } + @NotNull + public String getTitle() { + return title; + } + public boolean getConfiguredValue(){ return this.config.getConfig().getBoolean(this.configPath, this.defaultVal); } 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 c723ed1..9fcb5c6 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 @@ -11,8 +11,8 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import java.util.Collections; import java.util.List; @@ -168,12 +168,12 @@ public class IntSettingsGui extends AbstractSettingGui{ if(stepValue == step){ stepMat = Material.GREEN_STAINED_GLASS_PANE; stepName.append('a'); - stepLore = Collections.singletonList("\u00A77Value is changing by a step of "+stepValue); + stepLore = Collections.singletonList("\u00A77Value is changing by "+stepValue); clickEvent = GuiGlobalActions.stayInPlace; }else{ stepMat = Material.RED_STAINED_GLASS_PANE; stepName.append('c'); - stepLore = Collections.singletonList("\u00A77Click here to change the value of a step by "+stepValue); + stepLore = Collections.singletonList("\u00A77Click here to change the value by "+stepValue); clickEvent = updateStepValue(stepValue); } stepName.append("Step of: ").append(stepValue); @@ -239,6 +239,11 @@ public class IntSettingsGui extends AbstractSettingGui{ this.steps = steps; } + @NotNull + public String getTitle() { + return title; + } + public int getConfiguredValue(){ return this.config.getConfig().getInt(this.configPath, this.defaultVal); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/utils/GuiGlobalActions.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java similarity index 98% rename from src/main/java/xyz/alexcrea/cuanvil/gui/utils/GuiGlobalActions.java rename to src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java index b641c50..500f975 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/utils/GuiGlobalActions.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java @@ -1,4 +1,4 @@ -package xyz.alexcrea.cuanvil.gui.utils; +package xyz.alexcrea.cuanvil.gui.util; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import io.delilaheve.CustomAnvil; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/utils/GuiGlobalItems.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java similarity index 80% rename from src/main/java/xyz/alexcrea/cuanvil/gui/utils/GuiGlobalItems.java rename to src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java index 8b68eb8..aadcde3 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/utils/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -1,4 +1,4 @@ -package xyz.alexcrea.cuanvil.gui.utils; +package xyz.alexcrea.cuanvil.gui.util; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; @@ -12,6 +12,7 @@ import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.settings.AbstractSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; +import xyz.alexcrea.cuanvil.util.StringUtil; import java.util.Collections; @@ -97,21 +98,44 @@ public class GuiGlobalItems { private static final String SETTING_ITEM_LORE_PREFIX = "\u00A77value: "; public static GuiItem boolSettingGuiItem( - @NotNull BoolSettingsGui.BoolSettingFactory factory + @NotNull BoolSettingsGui.BoolSettingFactory factory, + @NotNull String name ){ // Get item properties boolean value = factory.getConfiguredValue(); Material itemMat; - StringBuilder partOfItemName = new StringBuilder("\u00A7"); + StringBuilder itemName = new StringBuilder("\u00A7"); if(value){ itemMat = Material.GREEN_TERRACOTTA; - partOfItemName.append("a"); + itemName.append("a"); }else{ itemMat = Material.RED_TERRACOTTA; - partOfItemName.append("c"); + itemName.append("c"); } - return createGuiItemFromProperties(factory, itemMat, partOfItemName, value); + itemName.append(name); + + return createGuiItemFromProperties(factory, itemMat, itemName, value); + } + + public static GuiItem boolSettingGuiItem( + @NotNull BoolSettingsGui.BoolSettingFactory factory + ){ + String configPath = getConfigNameFromPath(factory.getConfigPath()); + return boolSettingGuiItem(factory, StringUtil.snakeToUpperSpacedCase(configPath)); + } + + + public static GuiItem intSettingGuiItem( + @NotNull IntSettingsGui.IntSettingFactory factory, + @NotNull Material itemMat, + @NotNull String name + ){ + // Get item properties + int value = factory.getConfiguredValue(); + StringBuilder itemName = new StringBuilder("\u00A7a").append(name); + + return createGuiItemFromProperties(factory, itemMat, itemName, value); } @@ -119,26 +143,20 @@ public class GuiGlobalItems { @NotNull IntSettingsGui.IntSettingFactory factory, @NotNull Material itemMat ){ - // Get item properties - int value = factory.getConfiguredValue(); - StringBuilder partOfItemName = new StringBuilder("\u00A7a"); - - return createGuiItemFromProperties(factory, itemMat, partOfItemName, value); + String configPath = getConfigNameFromPath(factory.getConfigPath()); + return intSettingGuiItem(factory, itemMat, StringUtil.snakeToUpperSpacedCase(configPath)); } - private static GuiItem createGuiItemFromProperties( @NotNull AbstractSettingGui.SettingGuiFactory factory, @NotNull Material itemMat, - @NotNull StringBuilder partOfItemName, + @NotNull StringBuilder itemName, @NotNull Object value ){ - partOfItemName.append(getConfigNameFromPath(factory.getConfigPath())); - // Create item ItemStack item = new ItemStack(itemMat); ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setDisplayName(partOfItemName.toString()); + itemMeta.setDisplayName(itemName.toString()); itemMeta.setLore(Collections.singletonList(SETTING_ITEM_LORE_PREFIX+value)); item.setItemMeta(itemMeta); @@ -151,4 +169,5 @@ public class GuiGlobalItems { // indexOfDot == -1 (not fond) imply indexOfDot+1 = 0. substring will keep the full path as expected return path.substring(indexOfDot+1); } + } diff --git a/src/main/java/xyz/alexcrea/cuanvil/util/StringUtil.java b/src/main/java/xyz/alexcrea/cuanvil/util/StringUtil.java new file mode 100644 index 0000000..9a36bdb --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/util/StringUtil.java @@ -0,0 +1,21 @@ +package xyz.alexcrea.cuanvil.util; + +public class StringUtil { + + //we assume snake_cased_string is in snake case + public static String snakeToUpperSpacedCase(String snake_cased_string){ + if(snake_cased_string.contentEquals("")) return ""; + StringBuilder result = new StringBuilder(); + + for (String word : snake_cased_string.split("_")) { + result.append(" "); + if(word.isEmpty()) continue; + char firstChar = word.charAt(0); + + result.append(Character.toUpperCase(firstChar)); + result.append(word.substring(1)); + } + return result.substring(1); + } + +} diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt index 604911f..0d4ebd0 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt @@ -6,7 +6,7 @@ import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender import org.bukkit.entity.HumanEntity import xyz.alexcrea.cuanvil.gui.MainConfigGui -import xyz.alexcrea.cuanvil.gui.utils.GuiGlobalActions +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions class EditConfigExecutor : CommandExecutor { From 1e3bde650c4c8813c2cf73689d2dfb45178f549d Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 03:14:34 +0100 Subject: [PATCH 2/9] version up --- build.gradle.kts | 2 +- src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5f6dcb5..53c492e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.3.0-alpha-1" +version = "1.3.0-alpha-2" repositories { mavenCentral() diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 13eb3a6..1dd9c01 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ main: io.delilaheve.CustomAnvil name: CustomAnvil prefix: "Custom Anvil" -version: 1.3.0-alpha-1 +version: 1.3.0-alpha-2 description: Allow to customise anvil mechanics api-version: 1.18 load: POSTWORLD From cfa029e2ca65d7696d2a3068a7dac05d92268c7f Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 03:36:23 +0100 Subject: [PATCH 3/9] alphabetically order enchantments --- .../cuanvil/gui/config/EnchantLimitConfigGui.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java index 69a00c4..cf90e1d 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java @@ -16,9 +16,7 @@ import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.util.StringUtil; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; +import java.util.*; public class EnchantLimitConfigGui extends ValueUpdatableGui { @@ -70,7 +68,10 @@ public class EnchantLimitConfigGui extends ValueUpdatableGui { protected void prepareValues(){ bookItemFactoryList = new ArrayList<>(); - for (Enchantment enchant : Enchantment.values()) { + List enchantments = Arrays.asList(Enchantment.values()); + enchantments.sort(Comparator.comparing(ench -> ench.getKey().getKey())); + + for (Enchantment enchant : enchantments) { String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT); String prettyKey = StringUtil.snakeToUpperSpacedCase(key); From f8b41dd86cc835284a2fec3a06b016c038c992d6 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 04:10:47 +0100 Subject: [PATCH 4/9] add enchant cost setting gui. --- .../gui/config/settings/BoolSettingsGui.java | 9 +- .../settings/EnchantCostSettingsGui.java | 223 ++++++++++++++++++ .../gui/config/settings/IntSettingsGui.java | 29 ++- 3 files changed, 245 insertions(+), 16 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java index 12953e8..9e04c5a 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java @@ -22,7 +22,7 @@ public class BoolSettingsGui extends AbstractSettingGui{ private final boolean before; private boolean now; - private BoolSettingsGui(BoolSettingFactory holder, boolean now) { + protected BoolSettingsGui(BoolSettingFactory holder, boolean now) { super(3, holder.title, holder.parent); this.holder = holder; this.before = now; @@ -129,9 +129,10 @@ public class BoolSettingsGui extends AbstractSettingGui{ @NotNull String title; ValueUpdatableGui parent; boolean defaultVal; - private BoolSettingFactory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - boolean defaultVal){ + protected BoolSettingFactory( + @NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + boolean defaultVal){ super(configPath, config); this.title = title; this.parent = parent; 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 new file mode 100644 index 0000000..28ae717 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java @@ -0,0 +1,223 @@ +package xyz.alexcrea.cuanvil.gui.config.settings; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.pane.PatternPane; +import com.github.stefvanschie.inventoryframework.pane.util.Pattern; +import io.delilaheve.CustomAnvil; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; + +import java.util.Arrays; +import java.util.function.Consumer; + +public class EnchantCostSettingsGui extends IntSettingsGui { + + protected final static String ITEM_PATH = ".item"; + protected final static String BOOK_PATH = ".book"; + + private int beforeBook = -1; + private int nowBook = -1; + + protected EnchantCostSettingsGui(EnchantCostSettingFactory holder, int nowItem, int nowBook) { + super(holder, nowItem); + + this.beforeBook = nowBook; + this.nowBook = nowBook; + + this.step = holder.steps[0]; + + updateValueDisplay(); + initStepsValue(); + } + + + @Override + public Pattern getGuiPattern() { + return new Pattern( + "abc1bMVP0", + "D001s-v+0", + "B0010000S" + ); + } + + @Override + protected void prepareReturnToDefault(){ + ItemStack item = new ItemStack(Material.COMMAND_BLOCK); + ItemMeta meta = item.getItemMeta(); + + // assume holder is an instance of EnchantCostSettingFactory + EnchantCostSettingFactory holder = (EnchantCostSettingFactory) this.holder; + + meta.setDisplayName("\u00A7eReset to default value"); + meta.setLore(Arrays.asList( + "\u00A77Default book value is: " + holder.defaultBookVal, + "\u00A77Default item value is: " + holder.defaultVal)); + item.setItemMeta(meta); + returnToDefault = new GuiItem(item, event -> { + event.setCancelled(true); + nowBook = holder.defaultBookVal; + now = holder.defaultVal; + updateValueDisplay(); + update(); + }, CustomAnvil.instance); + } + + @Override + protected void updateValueDisplay(){ + super.updateValueDisplay(); + PatternPane pane = getPane(); + + // assume holder is an instance of EnchantCostSettingFactory + EnchantCostSettingFactory holder = ((EnchantCostSettingFactory) this.holder); + + int nowBook; + if(this.nowBook == -1){ + nowBook = holder.getConfiguredBookValue(); + }else{ + nowBook = this.nowBook; + } + + // minus item + GuiItem minusItem; + if(nowBook > holder.min){ + int planned = Math.max(holder.min, nowBook - step); + ItemStack item = new ItemStack(Material.RED_TERRACOTTA); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("\u00A7e"+nowBook+" -> "+planned + " \u00A7r(\u00A7c-"+(nowBook-planned)+"\u00A7r)"); + meta.setLore(AbstractSettingGui.CLICK_LORE); + item.setItemMeta(meta); + + minusItem = new GuiItem(item, updateNowBookConsumer(planned), CustomAnvil.instance); + }else{ + minusItem = GuiGlobalItems.backgroundItem(Material.BARRIER); + } + pane.bindItem('M', minusItem); + + //plus item + GuiItem plusItem; + if(nowBook < holder.max){ + int planned = Math.min(holder.max, nowBook + step); + ItemStack item = new ItemStack(Material.GREEN_TERRACOTTA); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("\u00A7e"+nowBook+" -> "+planned + " \u00A7r(\u00A7a+"+(planned-nowBook)+"\u00A7r)"); + meta.setLore(AbstractSettingGui.CLICK_LORE); + item.setItemMeta(meta); + + plusItem = new GuiItem(item, updateNowBookConsumer(planned), CustomAnvil.instance); + }else{ + plusItem = GuiGlobalItems.backgroundItem(Material.BARRIER); + } + pane.bindItem('P', plusItem); + + // "result" display + ItemStack resultPaper = new ItemStack(Material.PAPER); + ItemMeta resultMeta = resultPaper.getItemMeta(); + resultMeta.setDisplayName("\u00A7eValue: "+nowBook); + resultPaper.setItemMeta(resultMeta); + GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); + + pane.bindItem('V', resultItem); + + // reset to default + GuiItem returnToDefault; + if(now != holder.defaultVal || nowBook != holder.defaultBookVal){ + returnToDefault = this.returnToDefault; + }else{ + returnToDefault = GuiGlobalItems.backgroundItem(); + } + pane.bindItem('D', returnToDefault); + + + } + + protected Consumer updateNowBookConsumer(int planned){ + return event->{ + event.setCancelled(true); + nowBook = planned; + updateValueDisplay(); + update(); + }; + } + + @Override + protected char getMidStepChar() { + return 'b'; + } + + @Override + public boolean onSave() { + if(TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE){ + holder.config.getConfig().set(holder.configPath+ITEM_PATH, now); + holder.config.getConfig().set(holder.configPath+BOOK_PATH, now); + return holder.config.saveToDisk(TEMPORARY_DO_BACKUP_EVERY_SAVE); + } + return true; + } + + @Override + public boolean hadChange() { + return super.hadChange() || nowBook != beforeBook; + } + + public static EnchantCostSettingFactory factory(@NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + int min, int max, int defaultItemVal, int defaultBookVal, + int... steps){ + return new EnchantCostSettingFactory( + title,parent, + configPath, config, + min, max, defaultItemVal, defaultBookVal, steps); + } + + + public static class EnchantCostSettingFactory extends IntSettingsGui.IntSettingFactory { + + int defaultBookVal; + + protected EnchantCostSettingFactory( + @NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + int min, int max, int defaultItemVal, int defaultBookVal, + int... steps){ + + super(title,parent, + configPath, config, + min, max, defaultItemVal, steps); + this.defaultBookVal = defaultBookVal; + } + + @NotNull + public String getTitle() { + return title; + } + + @Override + public int getConfiguredValue() { + return this.config.getConfig().getInt(this.configPath+ITEM_PATH, this.defaultVal); + } + + public int getConfiguredBookValue(){ + return this.config.getConfig().getInt(this.configPath+BOOK_PATH, this.defaultBookVal); + } + + @Override + public AbstractSettingGui create() { + // Get value or default + int nowItem = getConfiguredValue(); + // Get value or default + int nowBook = getConfiguredValue(); + // create new gui + return new EnchantCostSettingsGui(this, nowItem, nowBook); + } + + } + +} + 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 9fcb5c6..c01a9ff 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 @@ -20,16 +20,16 @@ import java.util.function.Consumer; public class IntSettingsGui extends AbstractSettingGui{ - private final IntSettingFactory holder; - private final int before; - private int now; - private int step; + protected final IntSettingFactory holder; + protected final int before; + protected int now; + protected int step; - private IntSettingsGui(IntSettingFactory holder, int now) { + protected IntSettingsGui(IntSettingFactory holder, int now) { super(3, holder.title, holder.parent); assert holder.steps.length > 0 && holder.steps.length <= 9; this.holder = holder; - this.before =now; + this.before = now; this.now = now; this.step = holder.steps[0]; @@ -48,7 +48,7 @@ public class IntSettingsGui extends AbstractSettingGui{ ); } - GuiItem returnToDefault; + protected GuiItem returnToDefault; protected void prepareReturnToDefault(){ ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); @@ -136,7 +136,7 @@ public class IntSettingsGui extends AbstractSettingGui{ GuiItem background = GuiGlobalItems.backgroundItem(); PatternPane pane = getPane(); - for (char i = 'a'; i < 'a'+9; i++) { + for (char i = 'a'; i < (getMidStepChar()-'a')*2+1; i++) { pane.bindItem(i, background); } // Then update legit step values @@ -145,7 +145,7 @@ public class IntSettingsGui extends AbstractSettingGui{ protected void updateStepValue(){ if(holder.steps.length <= 1) return; // We assume steps have a length of 2k+1 cause its more pretty - char val = 'e'; // e is the middle, maybe rework this part to remove magic number. + char val = getMidStepChar(); // Offset val -= (char) ((holder.steps.length-1)/2); @@ -157,6 +157,10 @@ public class IntSettingsGui extends AbstractSettingGui{ } + protected char getMidStepChar(){ + return 'e'; + } + protected GuiItem stepGuiItem(int stepIndex){ int stepValue = holder.steps[stepIndex]; @@ -227,9 +231,10 @@ public class IntSettingsGui extends AbstractSettingGui{ @NotNull String title; ValueUpdatableGui parent; int min; int max; int defaultVal; int[] steps; - private IntSettingFactory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - int min, int max, int defaultVal, int... steps){ + protected IntSettingFactory( + @NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + int min, int max, int defaultVal, int... steps){ super(configPath, config); this.title = title; this.parent = parent; From f7841ce562b3bd2283430fef22fd6e6acbadc18d Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 13:48:51 +0100 Subject: [PATCH 5/9] progress on enchantment cost config gui --- .../alexcrea/cuanvil/gui/MainConfigGui.java | 14 ++- .../gui/config/AbstractEnchantConfigGui.java | 105 ++++++++++++++++++ .../cuanvil/gui/config/BasicConfigGui.java | 14 +-- .../gui/config/EnchantCostConfigGui.java | 63 +++++++++++ .../gui/config/EnchantLimitConfigGui.java | 93 +++------------- .../gui/config/settings/BoolSettingsGui.java | 6 +- .../settings/EnchantCostSettingsGui.java | 48 ++++++-- .../gui/config/settings/IntSettingsGui.java | 6 +- .../cuanvil/gui/util/GuiGlobalItems.java | 2 +- 9 files changed, 248 insertions(+), 103 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/AbstractEnchantConfigGui.java create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java index 8dd42a5..3e17b56 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/MainConfigGui.java @@ -9,6 +9,7 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.gui.config.BasicConfigGui; +import xyz.alexcrea.cuanvil.gui.config.EnchantCostConfigGui; import xyz.alexcrea.cuanvil.gui.config.EnchantLimitConfigGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; @@ -60,18 +61,27 @@ public class MainConfigGui extends ChestGui { GuiItem enchantLimitItem = GuiGlobalItems.goToGuiItem(enchantLimitItemstack, EnchantLimitConfigGui.INSTANCE); pane.bindItem('2', enchantLimitItem); + // enchant cost item + ItemStack enchantCostItemstack = new ItemStack(Material.EXPERIENCE_BOTTLE); + ItemMeta enchantCostMeta = enchantCostItemstack.getItemMeta(); + + enchantCostMeta.setDisplayName("\u00A7aEnchantment Cost"); + enchantCostMeta.setLore(Collections.singletonList("\u00A77Click here to open enchantment costs menu")); + enchantCostItemstack.setItemMeta(enchantCostMeta); + + GuiItem enchantCostItem = GuiGlobalItems.goToGuiItem(enchantCostItemstack, EnchantCostConfigGui.INSTANCE); + pane.bindItem('3', enchantCostItem); + // WIP configuration items ItemStack wipItemstack = new ItemStack(Material.BARRIER); ItemMeta wipMeta = wipItemstack.getItemMeta(); wipMeta.setDisplayName("\u00A7cWIP"); wipItemstack.setItemMeta(wipMeta); - GuiItem wip3 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip4 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip5 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); GuiItem wip6 = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); - pane.bindItem('3', wip3); pane.bindItem('4', wip4); pane.bindItem('5', wip5); pane.bindItem('6', wip6); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/AbstractEnchantConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/AbstractEnchantConfigGui.java new file mode 100644 index 0000000..a249be1 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/AbstractEnchantConfigGui.java @@ -0,0 +1,105 @@ +package xyz.alexcrea.cuanvil.gui.config; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.pane.Orientable; +import com.github.stefvanschie.inventoryframework.pane.OutlinePane; +import com.github.stefvanschie.inventoryframework.pane.Pane; +import com.github.stefvanschie.inventoryframework.pane.PatternPane; +import com.github.stefvanschie.inventoryframework.pane.util.Pattern; +import io.delilaheve.CustomAnvil; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import xyz.alexcrea.cuanvil.gui.MainConfigGui; +import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; +import xyz.alexcrea.cuanvil.gui.config.settings.AbstractSettingGui; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +public abstract class AbstractEnchantConfigGui extends ValueUpdatableGui { + + private final static Material SECONDARY_BACKGROUND_MATERIAL = Material.BLACK_STAINED_GLASS_PANE; + + protected AbstractEnchantConfigGui(String title){ + super(6, title, CustomAnvil.instance); + } + + PatternPane backItems; + OutlinePane filledEnchant; + protected void init(){ + // Back item panel + Pattern pattern = new Pattern( + "000000000", + "000000000", + "000000000", + "000000000", + "000000000", + "B11111111" + ); + backItems = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern); + addPane(backItems); + + GuiGlobalItems.addBackItem(backItems, MainConfigGui.INSTANCE); + + GuiGlobalItems.addBackgroundItem(backItems); + backItems.bindItem('1', GuiGlobalItems.backgroundItem(SECONDARY_BACKGROUND_MATERIAL)); + + // enchant item panel + filledEnchant = new OutlinePane(0, 0, 9, 5); + filledEnchant.align(OutlinePane.Alignment.BEGIN); + filledEnchant.setOrientation(Orientable.Orientation.HORIZONTAL); + addPane(filledEnchant); + + prepareValues(); + updateGuiValues(); + } + + private List bookItemFactoryList; + protected void prepareValues(){ + bookItemFactoryList = new ArrayList<>(); + + List enchantments = Arrays.asList(Enchantment.values()); + enchantments.sort(Comparator.comparing(ench -> ench.getKey().getKey())); + + for (Enchantment enchant : enchantments) { + //String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT); + //String prettyKey = StringUtil.snakeToUpperSpacedCase(key); + + T factory = getFactoryFromEnchant(enchant); + /*IntSettingsGui.factory(prettyKey, this, + SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255, + enchant.getMaxLevel(), + 1, 5, 10, 50, 100);*/ + + bookItemFactoryList.add(factory); + } + } + + @Override + public void updateGuiValues() { + // probably not the most efficient but hey ! it do the work + // TODO optimise one day.. maybe + + this.filledEnchant.clear(); + + for (T inventoryFactory : this.bookItemFactoryList) { + + GuiItem item = getItemFromFactory(inventoryFactory); + /*GuiGlobalItems.intSettingGuiItem(inventoryFactory, + Material.ENCHANTED_BOOK, + inventoryFactory.getTitle());*/ + this.filledEnchant.addItem(item); + } + + update(); + } + + + public abstract T getFactoryFromEnchant(Enchantment enchant); + + public abstract GuiItem getItemFromFactory(T inventoryFactory); + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java index d87381a..8f1d1a5 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/BasicConfigGui.java @@ -60,12 +60,12 @@ public class BasicConfigGui extends ValueUpdatableGui { protected void prepareValues(){ // limit repair item - this.limitRepairFactory = BoolSettingsGui.factory("\u00A78Limit Repair Cost ?",this, + this.limitRepairFactory = BoolSettingsGui.boolFactory("\u00A78Limit Repair Cost ?",this, ConfigOptions.LIMIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_LIMIT_REPAIR); // rename cost item IntRange range = ConfigOptions.REPAIR_LIMIT_RANGE; - this.repairCostFactory = IntSettingsGui.factory("\u00A78Repair Cost Limit", this, + this.repairCostFactory = IntSettingsGui.intFactory("\u00A78Repair Cost Limit", this, ConfigOptions.LIMIT_REPAIR_VALUE, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_LIMIT_REPAIR_VALUE, 1, 5, 10); @@ -80,32 +80,32 @@ public class BasicConfigGui extends ValueUpdatableGui { this.notNeededLimitValueItem = new GuiItem(item, GuiGlobalActions.stayInPlace, CustomAnvil.instance); // remove repair limit item - this.removeRepairLimit = BoolSettingsGui.factory("\u00A78Remove Repair Limit ?",this, + this.removeRepairLimit = BoolSettingsGui.boolFactory("\u00A78Remove Repair Limit ?",this, ConfigOptions.REMOVE_REPAIR_LIMIT, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_REMOVE_LIMIT); // item repair cost range = ConfigOptions.REPAIR_COST_RANGE; - this.itemRepairCost = IntSettingsGui.factory("\u00A78Item Repair Cost", this, + this.itemRepairCost = IntSettingsGui.intFactory("\u00A78Item Repair Cost", this, ConfigOptions.ITEM_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_ITEM_REPAIR_COST, 1, 5, 10, 50, 100); // unit repair cost - this.unitRepairCost = IntSettingsGui.factory("\u00A78Unit Repair Cost", this, + this.unitRepairCost = IntSettingsGui.intFactory("\u00A78Unit Repair Cost", this, ConfigOptions.UNIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_UNIT_REPAIR_COST, 1, 5, 10, 50, 100); // item rename cost range = ConfigOptions.ITEM_RENAME_COST_RANGE; - this.itemRenameCost = IntSettingsGui.factory("\u00A78Rename Cost", this, + this.itemRenameCost = IntSettingsGui.intFactory("\u00A78Rename Cost", this, ConfigOptions.ITEM_RENAME_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_ITEM_RENAME_COST, 1, 5, 10, 50, 100); // sacrifice illegal enchant cost range = ConfigOptions.SACRIFICE_ILLEGAL_COST_RANGE; - this.sacrificeIllegalEnchantCost = IntSettingsGui.factory("\u00A78Sacrifice Illegal Enchant Cost", this, + this.sacrificeIllegalEnchantCost = IntSettingsGui.intFactory("\u00A78Sacrifice Illegal Enchant Cost", this, ConfigOptions.SACRIFICE_ILLEGAL_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(),range.getLast(), ConfigOptions.DEFAULT_SACRIFICE_ILLEGAL_COST, 1, 5, 10, 50, 100); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java new file mode 100644 index 0000000..9a0d58d --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java @@ -0,0 +1,63 @@ +package xyz.alexcrea.cuanvil.gui.config; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; +import xyz.alexcrea.cuanvil.util.StringUtil; + +import java.util.Arrays; +import java.util.Locale; + +public class EnchantCostConfigGui extends AbstractEnchantConfigGui { + + private final static String SECTION_NAME = "enchant_values"; + + public final static EnchantCostConfigGui INSTANCE = new EnchantCostConfigGui(); + + static { + INSTANCE.init(); + } + + private EnchantCostConfigGui() { + super("\u00A78Enchantment Level Limit"); + + } + + @Override + public EnchantCostSettingsGui.EnchantCostSettingFactory getFactoryFromEnchant(Enchantment enchant) { + String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT); + String prettyKey = StringUtil.snakeToUpperSpacedCase(key); + + return EnchantCostSettingsGui.enchFactory(prettyKey+" Level Cost", this, + SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255, + enchant.getMaxLevel(),4, + 1, 10, 50); + } + + @Override + public GuiItem getItemFromFactory(EnchantCostSettingsGui.EnchantCostSettingFactory factory) { + // Get item properties + int itemCost = factory.getConfiguredValue(); + int bookCost = factory.getConfiguredBookValue(); + StringBuilder itemName = new StringBuilder("\u00A7a").append(factory.getTitle()); + // Create item + ItemStack item = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta itemMeta = item.getItemMeta(); + + // Edit name and lore + itemMeta.setDisplayName(itemName.toString()); + itemMeta.setLore(Arrays.asList( + "\u00A77Book Cost: " + bookCost, + "\u00A77Item Cost: " + itemCost)); + + item.setItemMeta(itemMeta); + + return GuiGlobalItems.openSettingGuiItem(item, factory); + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java index cf90e1d..bda77b7 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantLimitConfigGui.java @@ -1,27 +1,18 @@ package xyz.alexcrea.cuanvil.gui.config; import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.pane.Orientable; -import com.github.stefvanschie.inventoryframework.pane.OutlinePane; -import com.github.stefvanschie.inventoryframework.pane.Pane; -import com.github.stefvanschie.inventoryframework.pane.PatternPane; -import com.github.stefvanschie.inventoryframework.pane.util.Pattern; -import io.delilaheve.CustomAnvil; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import xyz.alexcrea.cuanvil.config.ConfigHolder; -import xyz.alexcrea.cuanvil.gui.MainConfigGui; -import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.util.StringUtil; -import java.util.*; +import java.util.Locale; -public class EnchantLimitConfigGui extends ValueUpdatableGui { +public class EnchantLimitConfigGui extends AbstractEnchantConfigGui { private final static String SECTION_NAME = "enchant_limits"; - private final static Material SECONDARY_BACKGROUND_MATERIAL = Material.BLACK_STAINED_GLASS_PANE; public final static EnchantLimitConfigGui INSTANCE = new EnchantLimitConfigGui(); @@ -29,77 +20,27 @@ public class EnchantLimitConfigGui extends ValueUpdatableGui { INSTANCE.init(); } - private EnchantLimitConfigGui(){ - super(6, "\u00A78Enchantment Level Limit", CustomAnvil.instance); + private EnchantLimitConfigGui() { + super("\u00A78Enchantment Level Limit"); } - PatternPane backItems; - OutlinePane filledEnchant; - private void init(){ - // Back item panel - Pattern pattern = new Pattern( - "000000000", - "000000000", - "000000000", - "000000000", - "000000000", - "B11111111" - ); - backItems = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern); - addPane(backItems); - - GuiGlobalItems.addBackItem(backItems, MainConfigGui.INSTANCE); - - GuiGlobalItems.addBackgroundItem(backItems); - backItems.bindItem('1', GuiGlobalItems.backgroundItem(SECONDARY_BACKGROUND_MATERIAL)); - - // enchant item panel - filledEnchant = new OutlinePane(0, 0, 9, 5); - filledEnchant.align(OutlinePane.Alignment.BEGIN); - filledEnchant.setOrientation(Orientable.Orientation.HORIZONTAL); - addPane(filledEnchant); - - prepareValues(); - updateGuiValues(); - } - - private List bookItemFactoryList; - protected void prepareValues(){ - bookItemFactoryList = new ArrayList<>(); - - List enchantments = Arrays.asList(Enchantment.values()); - enchantments.sort(Comparator.comparing(ench -> ench.getKey().getKey())); - - for (Enchantment enchant : enchantments) { - String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT); - String prettyKey = StringUtil.snakeToUpperSpacedCase(key); - - IntSettingsGui.IntSettingFactory factory = IntSettingsGui.factory(prettyKey, this, - SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255, - enchant.getMaxLevel(), - 1, 5, 10, 50, 100); - - bookItemFactoryList.add(factory); - } - } - @Override - public void updateGuiValues() { - // probably not the most efficient but hey ! it do the work - // TODO optimise one day.. maybe + public IntSettingsGui.IntSettingFactory getFactoryFromEnchant(Enchantment enchant) { + String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT); + String prettyKey = StringUtil.snakeToUpperSpacedCase(key); - this.filledEnchant.clear(); + return IntSettingsGui.intFactory(prettyKey+" Level Limit", this, + SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255, + enchant.getMaxLevel(), + 1, 5, 10, 50, 100); + } - for (IntSettingsGui.IntSettingFactory inventoryFactory : this.bookItemFactoryList) { - - GuiItem item = GuiGlobalItems.intSettingGuiItem(inventoryFactory, - Material.ENCHANTED_BOOK, - inventoryFactory.getTitle()); - this.filledEnchant.addItem(item); - } - - update(); + @Override + public GuiItem getItemFromFactory(IntSettingsGui.IntSettingFactory inventoryFactory) { + return GuiGlobalItems.intSettingGuiItem(inventoryFactory, + Material.ENCHANTED_BOOK, + inventoryFactory.getTitle()); } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java index 9e04c5a..b6369c2 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java @@ -115,9 +115,9 @@ public class BoolSettingsGui extends AbstractSettingGui{ return now != before; } - public static BoolSettingFactory factory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - boolean defaultVal){ + public static BoolSettingFactory boolFactory(@NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + boolean defaultVal){ return new BoolSettingFactory( title,parent, configPath, config, 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 28ae717..5cf52ad 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 @@ -6,6 +6,7 @@ import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; import org.bukkit.Material; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -15,6 +16,7 @@ import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import java.util.Arrays; +import java.util.Collections; import java.util.function.Consumer; public class EnchantCostSettingsGui extends IntSettingsGui { @@ -33,20 +35,43 @@ public class EnchantCostSettingsGui extends IntSettingsGui { this.step = holder.steps[0]; - updateValueDisplay(); - initStepsValue(); + initStaticItem(); } - @Override public Pattern getGuiPattern() { return new Pattern( - "abc1bMVP0", - "D001s-v+0", + "abc12MVP0", + "D0013-v+0", "B0010000S" ); } + private void initStaticItem() { + PatternPane pane = getPane(); + + // book display + ItemStack bookItemstack = new ItemStack(Material.BOOK); + ItemMeta bookMeta = bookItemstack.getItemMeta(); + + bookMeta.setDisplayName("\u00A7aEnchantment by Book Cost"); + bookMeta.setLore(Collections.singletonList("\u00A77Value on the right represent cost of enchantment for every level if combined by a book")); + bookItemstack.setItemMeta(bookMeta); + + // sword display + ItemStack swordItemstack = new ItemStack(Material.WOODEN_SWORD); + ItemMeta swordMeta = swordItemstack.getItemMeta(); + swordMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + + swordMeta.setDisplayName("\u00A7aEnchantment by Sword Cost"); + swordMeta.setLore(Collections.singletonList("\u00A77Value on the right represent cost of enchantment for every level if combined by an item other than a book")); + swordItemstack.setItemMeta(swordMeta); + + pane.bindItem('1', GuiGlobalItems.backgroundItem(Material.BLACK_STAINED_GLASS_PANE)); + pane.bindItem('2', new GuiItem(bookItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); + pane.bindItem('3', new GuiItem(swordItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); + } + @Override protected void prepareReturnToDefault(){ ItemStack item = new ItemStack(Material.COMMAND_BLOCK); @@ -153,9 +178,10 @@ public class EnchantCostSettingsGui extends IntSettingsGui { @Override public boolean onSave() { + System.out.println("ON SAVE"); if(TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE){ holder.config.getConfig().set(holder.configPath+ITEM_PATH, now); - holder.config.getConfig().set(holder.configPath+BOOK_PATH, now); + holder.config.getConfig().set(holder.configPath+BOOK_PATH, nowBook); return holder.config.saveToDisk(TEMPORARY_DO_BACKUP_EVERY_SAVE); } return true; @@ -166,10 +192,10 @@ public class EnchantCostSettingsGui extends IntSettingsGui { return super.hadChange() || nowBook != beforeBook; } - public static EnchantCostSettingFactory factory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - int min, int max, int defaultItemVal, int defaultBookVal, - int... steps){ + public static EnchantCostSettingFactory enchFactory(@NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + int min, int max, int defaultItemVal, int defaultBookVal, + int... steps){ return new EnchantCostSettingFactory( title,parent, configPath, config, @@ -212,7 +238,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { // Get value or default int nowItem = getConfiguredValue(); // Get value or default - int nowBook = getConfiguredValue(); + int nowBook = getConfiguredBookValue(); // create new gui return new EnchantCostSettingsGui(this, nowItem, nowBook); } 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 c01a9ff..b217838 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 @@ -217,9 +217,9 @@ public class IntSettingsGui extends AbstractSettingGui{ return now != before; } - public static IntSettingFactory factory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - int min, int max, int defaultVal, int... steps){ + public static IntSettingFactory intFactory(@NotNull String title, ValueUpdatableGui parent, + String configPath, ConfigHolder config, + int min, int max, int defaultVal, int... steps){ return new IntSettingFactory( title,parent, configPath, config, diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java index aadcde3..68df6df 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -95,7 +95,7 @@ public class GuiGlobalItems { return new GuiItem(item, GuiGlobalActions.openSettingGuiAction(factory), CustomAnvil.instance); } - private static final String SETTING_ITEM_LORE_PREFIX = "\u00A77value: "; + public static final String SETTING_ITEM_LORE_PREFIX = "\u00A77value: "; public static GuiItem boolSettingGuiItem( @NotNull BoolSettingsGui.BoolSettingFactory factory, From 47d8efda78814be6de47eb221103d0d61f166104 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 13:49:29 +0100 Subject: [PATCH 6/9] fix config.yml not saving default when absent --- src/main/java/xyz/alexcrea/cuanvil/config/ConfigHolder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/xyz/alexcrea/cuanvil/config/ConfigHolder.java b/src/main/java/xyz/alexcrea/cuanvil/config/ConfigHolder.java index 40d8f82..9374505 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/config/ConfigHolder.java +++ b/src/main/java/xyz/alexcrea/cuanvil/config/ConfigHolder.java @@ -138,6 +138,7 @@ public abstract class ConfigHolder { @Override public boolean reloadFromDisk(boolean hardFail) { + CustomAnvil.instance.saveDefaultConfig(); CustomAnvil.instance.reloadConfig(); this.configuration = CustomAnvil.instance.getConfig(); return true; From 1fd8501461dabd4110920fb3f6fb1eaf8e9789bd Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 14:02:25 +0100 Subject: [PATCH 7/9] fix nowBook display value --- .../settings/EnchantCostSettingsGui.java | 30 +++++++++---------- .../gui/config/settings/IntSettingsGui.java | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) 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 5cf52ad..efbb906 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 @@ -24,20 +24,26 @@ public class EnchantCostSettingsGui extends IntSettingsGui { protected final static String ITEM_PATH = ".item"; protected final static String BOOK_PATH = ".book"; - private int beforeBook = -1; - private int nowBook = -1; + private int beforeBook; + private int nowBook; - protected EnchantCostSettingsGui(EnchantCostSettingFactory holder, int nowItem, int nowBook) { + protected EnchantCostSettingsGui(EnchantCostSettingFactory holder, int nowItem) { super(holder, nowItem); - this.beforeBook = nowBook; - this.nowBook = nowBook; - this.step = holder.steps[0]; initStaticItem(); } + @Override + protected void initStepsValue() { + super.initStepsValue(); + + int nowBook = ((EnchantCostSettingFactory)this.holder).getConfiguredBookValue(); + this.beforeBook = nowBook; + this.nowBook = nowBook; + } + @Override public Pattern getGuiPattern() { return new Pattern( @@ -102,12 +108,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { // assume holder is an instance of EnchantCostSettingFactory EnchantCostSettingFactory holder = ((EnchantCostSettingFactory) this.holder); - int nowBook; - if(this.nowBook == -1){ - nowBook = holder.getConfiguredBookValue(); - }else{ - nowBook = this.nowBook; - } + int nowBook = this.nowBook; // minus item GuiItem minusItem; @@ -178,7 +179,6 @@ public class EnchantCostSettingsGui extends IntSettingsGui { @Override public boolean onSave() { - System.out.println("ON SAVE"); if(TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE){ holder.config.getConfig().set(holder.configPath+ITEM_PATH, now); holder.config.getConfig().set(holder.configPath+BOOK_PATH, nowBook); @@ -237,10 +237,8 @@ public class EnchantCostSettingsGui extends IntSettingsGui { public AbstractSettingGui create() { // Get value or default int nowItem = getConfiguredValue(); - // Get value or default - int nowBook = getConfiguredBookValue(); // create new gui - return new EnchantCostSettingsGui(this, nowItem, nowBook); + return new EnchantCostSettingsGui(this, nowItem); } } 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 b217838..9fbd4b9 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 @@ -33,9 +33,9 @@ public class IntSettingsGui extends AbstractSettingGui{ this.now = now; this.step = holder.steps[0]; + initStepsValue(); prepareReturnToDefault(); updateValueDisplay(); - initStepsValue(); } From 3dc272ec9772655b17fbd44d1093508c623dfb88 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sun, 3 Mar 2024 17:09:13 +0100 Subject: [PATCH 8/9] add default value for enchantment cost config --- .../enchant/EnchantmentProperties.java | 57 +++++++++++++++++++ .../cuanvil/enchant/EnchantmentRarity.java | 33 +++++++++++ .../gui/config/EnchantCostConfigGui.java | 12 +++- 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java create mode 100644 src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java new file mode 100644 index 0000000..cb481df --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java @@ -0,0 +1,57 @@ +package xyz.alexcrea.cuanvil.enchant; + +// to bind EnchantmentRarity to an enchantment... +public enum EnchantmentProperties { + + AQUA_AFFINITY(EnchantmentRarity.RARE), + BANE_OF_ARTHROPODS(EnchantmentRarity.UNCOMMON), + BINDING_CURSE(EnchantmentRarity.VERY_RARE), + BLAST_PROTECTION(EnchantmentRarity.RARE), + CHANNELING(EnchantmentRarity.VERY_RARE), + DEPTH_STRIDER(EnchantmentRarity.RARE), + EFFICIENCY(EnchantmentRarity.COMMON), + FLAME(EnchantmentRarity.RARE), + FEATHER_FALLING(EnchantmentRarity.UNCOMMON), + FIRE_ASPECT(EnchantmentRarity.RARE), + FIRE_PROTECTION(EnchantmentRarity.UNCOMMON), + FORTUNE(EnchantmentRarity.RARE), + FROST_WALKER(EnchantmentRarity.RARE), + IMPALING(EnchantmentRarity.RARE), + INFINITY(EnchantmentRarity.VERY_RARE), + KNOCKBACK(EnchantmentRarity.UNCOMMON), + LOOTING(EnchantmentRarity.RARE), + LOYALTY(EnchantmentRarity.COMMON), + LUCK_OF_THE_SEA(EnchantmentRarity.RARE), + LURE(EnchantmentRarity.RARE), + MENDING(EnchantmentRarity.RARE), + MULTISHOT(EnchantmentRarity.RARE), + PIERCING(EnchantmentRarity.COMMON), + POWER(EnchantmentRarity.COMMON), + PROJECTILE_PROTECTION(EnchantmentRarity.UNCOMMON), + PROTECTION(EnchantmentRarity.COMMON), + PUNCH(EnchantmentRarity.RARE), + QUICK_CHARGE(EnchantmentRarity.UNCOMMON), + RESPIRATION(EnchantmentRarity.RARE), + RIPTIDE(EnchantmentRarity.RARE), + SILK_TOUCH(EnchantmentRarity.VERY_RARE), + SHARPNESS(EnchantmentRarity.COMMON), + SMITE(EnchantmentRarity.UNCOMMON), + SOUL_SPEED(EnchantmentRarity.VERY_RARE), + SWIFT_SNEAK(EnchantmentRarity.VERY_RARE), + SWEEPING(EnchantmentRarity.RARE), + THORNS(EnchantmentRarity.VERY_RARE), + UNBREAKING(EnchantmentRarity.UNCOMMON), + VANISHING_CURSE(EnchantmentRarity.VERY_RARE) + + ; + + private final EnchantmentRarity rarity; + EnchantmentProperties(EnchantmentRarity rarity){ + this.rarity = rarity; + } + + public EnchantmentRarity getRarity() { + return rarity; + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java new file mode 100644 index 0000000..e1ff834 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java @@ -0,0 +1,33 @@ +package xyz.alexcrea.cuanvil.enchant; + +// because spigot (1.18) do not support enchantment rarity, I need to do it myself... +public enum EnchantmentRarity { + + NO_RARITY(0, 0), + COMMON(1), + UNCOMMON(2), + RARE(4), + VERY_RARE(8) + + ; + + private final int itemValue; + private final int bookValue; + + EnchantmentRarity(int itemValue, int bookValue){ + this.itemValue = itemValue; + this.bookValue = bookValue; + } + EnchantmentRarity(int itemValue){ + this(itemValue, Math.max(1,itemValue/2)); + } + + public int getBookValue() { + return bookValue; + } + + public int getItemValue() { + return itemValue; + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java index 9a0d58d..83980f7 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java @@ -6,6 +6,8 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.enchant.EnchantmentProperties; +import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity; import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.util.StringUtil; @@ -30,12 +32,18 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui Date: Sun, 3 Mar 2024 17:17:58 +0100 Subject: [PATCH 9/9] stylised menu --- .../gui/config/EnchantCostConfigGui.java | 4 ++-- .../settings/EnchantCostSettingsGui.java | 21 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java index 83980f7..1f6ee75 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/EnchantCostConfigGui.java @@ -60,8 +60,8 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui { event.setCancelled(true);