diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java index f5df41bc..bc50c162 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java @@ -3,16 +3,18 @@ package xyz.alexcrea.cuanvil.api; import io.delilaheve.CustomAnvil; import kotlin.Triple; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.dependency.DependencyManager; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; +import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Custom Anvil api for unit repair. @@ -20,8 +22,7 @@ import java.util.*; @SuppressWarnings("unused") public class UnitRepairApi { - private UnitRepairApi() { - } + private UnitRepairApi(){} private static Object saveChangeTask = null; @@ -34,20 +35,7 @@ public class UnitRepairApi { * @param repairable The item to be repaired. * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable) { - return addUnitRepair(unit, repairable, 0.25, false); - } - - /** - * Write and add a custom anvil unit repair recipe. - * Will not write the recipe if it already exists or was deleted. - * Set the value to minecraft default value (0.25 = 25%) - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item to be repaired. - * @return true if successful. - */ - public static boolean addUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable) { + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable){ return addUnitRepair(unit, repairable, 0.25, false); } @@ -60,7 +48,7 @@ public class UnitRepairApi { * @param value The amount to be repaired by every unit. (1% = 0.01) * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value) { + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value){ return addUnitRepair(unit, repairable, value, false); } @@ -74,26 +62,12 @@ public class UnitRepairApi { * @param overrideDeleted If we should write even if the recipe was previously deleted. * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted) { - return addUnitRepair(unit.getKey(), repairable.getKey(), value, overrideDeleted); - } - - /** - * Write and add a custom anvil unit repair recipe. - * Will not write the recipe if it already exists. - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item to be repaired. - * @param value The amount to be repaired by every unit. (1% = 0.01) - * @param overrideDeleted If we should write even if the recipe was previously deleted. - * @return true if successful. - */ - public static boolean addUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable, double value, boolean overrideDeleted) { + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted){ FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - String path = unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase(); + String path = unit.name().toLowerCase() + "." + repairable.name().toLowerCase(); - if (!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false; - if (config.contains(path)) return false; + if(!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false; + if(config.contains(path)) return false; // Set unit repair return setUnitRepair(unit, repairable, value); @@ -108,24 +82,11 @@ public class UnitRepairApi { * @param value The amount to be repaired by every unit. (1% = 0.01) * @return true if successful. */ - public static boolean setUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value) { - return setUnitRepair(unit.getKey(), repairable.getKey(), value); - } - - /** - * Write and add a custom anvil unit repair recipe. - * Do not check if it previously existed or exist. - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item to be repaired. - * @param value The amount to be repaired by every unit. (1% = 0.01) - * @return true if successful. - */ - public static boolean setUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable, double value) { + public static boolean setUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value){ FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - String repairableName = repairable.toString().toLowerCase(); - String path = unit.toString().toLowerCase() + "." + repairableName; + String repairableName = repairable.name().toLowerCase(); + String path = unit.name().toLowerCase() + "." + repairableName; // Add to config then prepare save config.set(path, value); @@ -133,10 +94,10 @@ public class UnitRepairApi { // Add to gui UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance(); - if (repairConfigGui != null) { + if(repairConfigGui != null) { UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); - if (elementGui != null) elementGui.updateValueForGeneric(repairable, true); + if(elementGui != null) elementGui.updateValueForGeneric(repairableName, true); repairConfigGui.updateValueForGeneric(unit, true); } @@ -150,56 +111,48 @@ public class UnitRepairApi { * @param repairable The item used to be repaired. * @return true if successful. */ - public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable) { - return removeUnitRepair(unit.getKey(), repairable.getKey()); - } - - /** - * Remove a custom anvil unit repair recipe. - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item used to be repaired. - * @return true if successful. - */ - public static boolean removeUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable) { + public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable){ // Delete every possible variation and save to file + String unitName = unit.name(); + String repairableName = repairable.name(); FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - config.set(unit.getKey() + "." + repairable.getKey(), null); - config.set(unit.getKey() + "." + repairable, null); - config.set(unit + "." + repairable.getKey(), null); - config.set(unit + "." + repairable, null); + config.set(unitName.toLowerCase() + "." + repairableName.toUpperCase(), null); + config.set(unitName.toUpperCase() + "." + repairableName.toLowerCase(), null); + config.set(unitName.toUpperCase() + "." + repairableName.toUpperCase(), null); + config.set(unitName.toLowerCase() + "." + repairableName.toLowerCase(), null); // Test if it was the last value of this section boolean lastValue = false; - if (config.isConfigurationSection(unit.toString())) { - ConfigurationSection section = config.getConfigurationSection(unit.toString()); + if(config.isConfigurationSection(unitName.toLowerCase())) { + ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase()); - if (section != null && section.getKeys(false).isEmpty()) { + if(section != null && section.getKeys(false).isEmpty()) { lastValue = true; - config.set(unit.toString(), null); + config.set(unitName.toLowerCase(), null); } - } else if (config.isConfigurationSection(unit.getKey())) { - ConfigurationSection section = config.getConfigurationSection(unit.getKey()); - if (section != null && section.getKeys(false).isEmpty()) { + } else if (config.isConfigurationSection(unitName.toUpperCase())) { + ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase()); + if(section != null && section.getKeys(false).isEmpty()) { lastValue = true; - config.set(unit.getKey(), null); + config.set(unitName.toUpperCase(), null); } } else lastValue = true; - ConfigHolder.UNIT_REPAIR_HOLDER.delete(unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase()); + // We only need to "delete" as the lower case to be counted as deleted + ConfigHolder.UNIT_REPAIR_HOLDER.delete(unitName.toLowerCase() + "." + repairableName.toLowerCase()); prepareSaveTask(); // Remove from gui UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance(); - if (repairConfigGui != null) { + if(repairConfigGui != null) { UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); - if (elementGui != null) elementGui.removeGeneric(repairable); - if (lastValue) { + if(elementGui != null) elementGui.removeGeneric(repairableName); + if(lastValue){ repairConfigGui.removeGeneric(unit); } } @@ -211,9 +164,9 @@ public class UnitRepairApi { * Prepare a task to save custom unit repair recipe configuration. */ private static void prepareSaveTask() { - if (saveChangeTask != null) return; + if(saveChangeTask != null) return; - saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, () -> { + saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{ ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true); saveChangeTask = null; }); @@ -221,7 +174,6 @@ public class UnitRepairApi { /** * Get every unit repair recipes. - * * @return An immutable collection of unit repair recipes. *

* Each element of the provided triple represent a part of the recipe @@ -230,32 +182,29 @@ public class UnitRepairApi { *

  • Second object is the item to be repaired. *
  • Last object is the amount to be repaired by every unit. (1% = 0.01) * - * @deprecated some may be missing. use {@link #getModernUnitRepairs()} - * */ - @Deprecated @NotNull - public static List> getUnitRepairs() { + public static List> getUnitRepairs(){ List> mutableList = new ArrayList<>(); FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); for (String unitKey : config.getKeys(false)) { // Test if config section exist - if (!config.isConfigurationSection(unitKey)) continue; + if(!config.isConfigurationSection(unitKey)) continue; // Test if unit is a material Material unit = Material.getMaterial(unitKey.toUpperCase()); - if (unit == null) continue; + if(unit == null) continue; // Iterate over reparable items ConfigurationSection section = config.getConfigurationSection(unitKey); for (String repairableKey : section.getKeys(false)) { // Test if value section exist - if (!section.isDouble(repairableKey)) continue; + if(!section.isDouble(repairableKey)) continue; // Test if repairable is valid a material Material repairable = Material.getMaterial(repairableKey.toUpperCase()); - if (repairable == null) continue; + if(repairable == null) continue; // Add the values mutableList.add(new Triple<>(unit, repairable, section.getDouble(repairableKey))); @@ -266,53 +215,4 @@ public class UnitRepairApi { return Collections.unmodifiableList(mutableList); } - /** - * Get every unit repair recipes. - * - * @return An immutable collection of unit repair recipes. - *

    - *

  • First map contain a key the unit material used to repair the bellow item and value the second map - *
  • Second map contain as key the item to be repaired and as value the amount to be repaired by every unit. (1% = 0.01) - * - */ - @NotNull - public static Map> getModernUnitRepairs() { - Map> mutableList = new HashMap<>(); - - FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - for (String unitKey : config.getKeys(false)) { - // Test if config section exist - if (!config.isConfigurationSection(unitKey)) continue; - - // Test if unit is a material - NamespacedKey unit = NamespacedKey.fromString(unitKey.toLowerCase()); - if (unit == null) continue; - - Map map; - if (!mutableList.containsKey(unit)) { - map = new HashMap<>(); - mutableList.put(unit, map); - } else { - map = mutableList.get(unit); - } - - // Iterate over reparable items - ConfigurationSection section = config.getConfigurationSection(unitKey); - for (String repairableKey : section.getKeys(false)) { - // Test if value section exist - if (!section.isDouble(repairableKey)) continue; - - // Test if repairable is valid a material - NamespacedKey repairable = NamespacedKey.fromString(repairableKey.toLowerCase()); - if (repairable == null) continue; - - // Add the values - map.put(repairable, section.getDouble(repairableKey)); - - } - } - - return mutableList; - } - } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java index 1d1aca46..ea657ace 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java @@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.enchant.bulk.BulkCleanEnchantOperation; import xyz.alexcrea.cuanvil.enchant.bulk.BulkGetEnchantOperation; import xyz.alexcrea.cuanvil.group.EnchantConflictGroup; -import xyz.alexcrea.cuanvil.util.CasedStringUtil; import java.util.Collection; import java.util.HashMap; @@ -46,14 +45,6 @@ public interface CAEnchantment { @NotNull String getName(); - /** - * Get the enchantment name prettified (upper spaced case) - * @return Prettier enchantment name - */ - default String getPrettyName() { - return CasedStringUtil.snakeToUpperSpacedCase(getName()); - } - /** * Get the default maximum level of this enchantment. * @return The default maximum level of this enchantment. diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java index 57cc35bc..cc4fddc5 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java @@ -2,7 +2,6 @@ package xyz.alexcrea.cuanvil.gui.config; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; -import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; @@ -40,142 +39,116 @@ public class MainConfigGui extends ChestGui { GuiGlobalItems.addBackgroundItem(pane); // Basic config item - var basicConfigItem = basicConfigItem(new BasicConfigGui(packetManager)); + ItemStack basicConfigItemstack = new ItemStack(Material.COMMAND_BLOCK); + ItemMeta basicConfigMeta = basicConfigItemstack.getItemMeta(); + assert basicConfigMeta != null; + + basicConfigMeta.setDisplayName("§aBasic Config Menu"); + basicConfigMeta.setLore(Collections.singletonList("§7Click here to open basic config menu")); + basicConfigItemstack.setItemMeta(basicConfigMeta); + + GuiItem basicConfigItem = GuiGlobalItems.goToGuiItem(basicConfigItemstack, new BasicConfigGui(packetManager)); pane.bindItem('1', basicConfigItem); // enchant level limit item - var enchantLimitItem = enchantLimitItem(new EnchantLimitConfigGui()); + ItemStack enchantLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta enchantLimitMeta = enchantLimitItemstack.getItemMeta(); + assert enchantLimitMeta != null; + + enchantLimitMeta.setDisplayName("§aEnchantment Level Limit"); + enchantLimitMeta.setLore(Collections.singletonList("§7Click here to open enchantment level limit menu")); + enchantLimitItemstack.setItemMeta(enchantLimitMeta); + + GuiItem enchantLimitItem = GuiGlobalItems.goToGuiItem(enchantLimitItemstack, new EnchantLimitConfigGui()); pane.bindItem('2', enchantLimitItem); // enchant level limit item - var enchantMergeLimitItem = enchantMergeLimitItem(new EnchantMergeLimitConfigGui()); + ItemStack enchantMergeLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta enchantMergeLimitMeta = enchantMergeLimitItemstack.getItemMeta(); + assert enchantMergeLimitMeta != null; + + enchantMergeLimitMeta.setDisplayName("§aEnchantment Merge Limit"); + enchantMergeLimitMeta.setLore(Collections.singletonList("§7Click here to open enchantment merge limit menu")); + enchantMergeLimitItemstack.setItemMeta(enchantMergeLimitMeta); + + GuiItem enchantMergeLimitItem = GuiGlobalItems.goToGuiItem(enchantMergeLimitItemstack, new EnchantMergeLimitConfigGui()); pane.bindItem('3', enchantMergeLimitItem); // enchant cost item - var enchantCostItem = enchantCostItem(new EnchantCostConfigGui()); + ItemStack enchantCostItemstack = new ItemStack(Material.EXPERIENCE_BOTTLE); + ItemMeta enchantCostMeta = enchantCostItemstack.getItemMeta(); + assert enchantCostMeta != null; + + enchantCostMeta.setDisplayName("§aEnchantment Cost"); + enchantCostMeta.setLore(Collections.singletonList("§7Click here to open enchantment costs menu")); + enchantCostItemstack.setItemMeta(enchantCostMeta); + + GuiItem enchantCostItem = GuiGlobalItems.goToGuiItem(enchantCostItemstack, new EnchantCostConfigGui()); pane.bindItem('4', enchantCostItem); // Enchantment Conflicts item - var enchantConflictItem = enchantConflictItem(EnchantConflictGui.getInstance()); + ItemStack enchantConflictItemstack = new ItemStack(Material.OAK_FENCE); + ItemMeta enchantConflictMeta = enchantConflictItemstack.getItemMeta(); + assert enchantConflictMeta != null; + + enchantConflictMeta.setDisplayName("§aEnchantment Conflict"); + enchantConflictMeta.setLore(Collections.singletonList("§7Click here to open enchantment conflict menu")); + enchantConflictItemstack.setItemMeta(enchantConflictMeta); + + GuiItem enchantConflictItem = GuiGlobalItems.goToGuiItem(enchantConflictItemstack, EnchantConflictGui.getInstance()); pane.bindItem('5', enchantConflictItem); // Group config items - var groupConfigItem = groupConfigItem(GroupConfigGui.getInstance()); + ItemStack groupItemstack = new ItemStack(Material.CHEST); + ItemMeta groupMeta = groupItemstack.getItemMeta(); + assert groupMeta != null; + + groupMeta.setDisplayName("§aItem Groups"); + groupMeta.setLore(Collections.singletonList("§7Click here to open item group menu")); + groupItemstack.setItemMeta(groupMeta); + + GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(groupItemstack, GroupConfigGui.getInstance()); + pane.bindItem('6', groupConfigItem); // Unit repair item - var unitRepairItem = unitRepairItem(UnitRepairConfigGui.getInstance()); + ItemStack unirRepairItemstack = new ItemStack(Material.DIAMOND); + ItemMeta unitRepairMeta = unirRepairItemstack.getItemMeta(); + assert unitRepairMeta != null; + + unitRepairMeta.setDisplayName("§aUnit Repair"); + unitRepairMeta.setLore(Collections.singletonList("§7Click here to open anvil unit repair menu")); + unirRepairItemstack.setItemMeta(unitRepairMeta); + + GuiItem unitRepairItem = GuiGlobalItems.goToGuiItem(unirRepairItemstack, UnitRepairConfigGui.getInstance()); pane.bindItem('7', unitRepairItem); // Custom recipe item - var customRecipeItem = customRecipeItem(CustomRecipeConfigGui.getInstance()); + ItemStack customRecipeItemstack = new ItemStack(Material.CRAFTING_TABLE); + ItemMeta customRecipeMeta = customRecipeItemstack.getItemMeta(); + assert customRecipeMeta != null; + + customRecipeMeta.setDisplayName("§aCustom recipes"); + customRecipeMeta.setLore(Collections.singletonList("§7Click here to open anvil custom recipe menu")); + customRecipeItemstack.setItemMeta(customRecipeMeta); + + GuiItem customRecipeItem = GuiGlobalItems.goToGuiItem(customRecipeItemstack, CustomRecipeConfigGui.getInstance()); pane.bindItem('8', customRecipeItem); // quit item - pane.bindItem('Q', quitItem()); - } + ItemStack quitItemstack = new ItemStack(Material.BARRIER); + ItemMeta quitMeta = quitItemstack.getItemMeta(); + assert quitMeta != null; - public static GuiItem basicConfigItem(Gui target) { - var item = new ItemStack(Material.COMMAND_BLOCK); - var meta = item.getItemMeta(); - assert meta != null; + quitMeta.setDisplayName("§cQuit"); + quitItemstack.setItemMeta(quitMeta); - meta.setDisplayName("§aBasic Config Menu"); - meta.setLore(Collections.singletonList("§7Click here to open basic config menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem enchantLimitItem(Gui target) { - var item = new ItemStack(Material.ENCHANTED_BOOK); - var meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aEnchantment Level Limit"); - meta.setLore(Collections.singletonList("§7Click here to open enchantment level limit menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem enchantMergeLimitItem(Gui target) { - ItemStack item = new ItemStack(Material.ENCHANTED_BOOK); - ItemMeta meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aEnchantment Merge Limit"); - meta.setLore(Collections.singletonList("§7Click here to open enchantment merge limit menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem enchantCostItem(Gui target) { - ItemStack item = new ItemStack(Material.EXPERIENCE_BOTTLE); - ItemMeta meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aEnchantment Cost"); - meta.setLore(Collections.singletonList("§7Click here to open enchantment costs menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem enchantConflictItem(Gui target) { - var item = new ItemStack(Material.OAK_FENCE); - var meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aEnchantment Conflict"); - meta.setLore(Collections.singletonList("§7Click here to open enchantment conflict menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem groupConfigItem(Gui target) { - var item = new ItemStack(Material.CHEST); - var meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aItem Groups"); - meta.setLore(Collections.singletonList("§7Click here to open item group menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem unitRepairItem(Gui target) { - var item = new ItemStack(Material.DIAMOND); - var meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aUnit Repair"); - meta.setLore(Collections.singletonList("§7Click here to open anvil unit repair menu")); - item.setItemMeta(meta); - - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem customRecipeItem(Gui target) { - var item = new ItemStack(Material.CRAFTING_TABLE); - var meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§aCustom recipes"); - meta.setLore(Collections.singletonList("§7Click here to open anvil custom recipe menu")); - item.setItemMeta(meta); - return GuiGlobalItems.goToGuiItem(item, target); - } - - public static GuiItem quitItem() { - var item = new ItemStack(Material.BARRIER); - var meta = item.getItemMeta(); - assert meta != null; - - meta.setDisplayName("§cQuit"); - item.setItemMeta(meta); - - return new GuiItem(item, event -> { + GuiItem quitItem = new GuiItem(quitItemstack, event -> { event.setCancelled(true); event.getWhoClicked().closeInventory(); }, CustomAnvil.instance); + pane.bindItem('Q', quitItem); + } } 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 5583b382..6bd7ea34 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,11 +1,11 @@ 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; import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry; +import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; @@ -31,17 +31,13 @@ public abstract class AbstractEnchantConfigGui getEveryInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { return CAEnchantmentRegistry.getInstance().getNameSortedEnchantments(); } @@ -77,7 +73,7 @@ public abstract class AbstractEnchantConfigGui getEveryInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { return ConfigHolder.CUSTOM_RECIPE_HOLDER.getRecipeManager().getRecipeList(); } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConfigGui.java deleted file mode 100644 index 817aa7ac..00000000 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConfigGui.java +++ /dev/null @@ -1,196 +0,0 @@ -package xyz.alexcrea.cuanvil.gui.config.global; - -import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; -import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; -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.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import xyz.alexcrea.cuanvil.api.EnchantmentApi; -import xyz.alexcrea.cuanvil.config.ConfigHolder; -import xyz.alexcrea.cuanvil.enchant.CAEnchantment; -import xyz.alexcrea.cuanvil.group.EnchantConflictGroup; -import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; -import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; - -import java.util.HashMap; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -public class EnchantConfigGui extends ChestGui implements ValueUpdatableGui { - - private final Set 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" - ); - pane = new PatternPane(0, 0, 9, 3, pattern); - addPane(pane); - - GuiGlobalItems.addBackgroundItem(pane); - - ItemStack displayItemstack = new ItemStack(Material.ENCHANTED_BOOK); - ItemMeta displayMeta = displayItemstack.getItemMeta(); - assert displayMeta != null; - - displayMeta.setDisplayName("§aConfiguring Enchantments:"); - displayItemstack.setItemMeta(displayMeta); - - // Set enchantments - HashMap enchantmentMap = new HashMap<>(); - for (CAEnchantment enchantment : enchantments) { - enchantmentMap.put(enchantment, 1); - } - EnchantmentApi.setEnchantments(displayItemstack, enchantmentMap); - - pane.bindItem('D', new GuiItem(displayItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); - - updateGuiValues(); - - // Enchantment Conflicts item - var enchantConflictItem = MainConfigGui.enchantConflictItem(getEnchantConflictGui()); - pane.bindItem('5', enchantConflictItem); - - // Group config items - 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() { - return group -> group.getEnchants() - .stream() - .anyMatch(enchantments::contains); - } - - private EnchantConflictGui getEnchantConflictGui() { - if (enchantConflictGui == null) { - enchantConflictGui = new EnchantConflictGui(this); - enchantConflictGui.setFilter(getGroupFilter()); - enchantConflictGui.init(); - } - - return enchantConflictGui; - } - - private GroupConfigGui getGroupConfigGui() { - if (groupConfigGui == null) { - groupConfigGui = new GroupConfigGui(this); - - // Get all the conflict related to this enchantment - var groups = ConfigHolder.CONFLICT_HOLDER - .getConflictManager() - .getConflictList() - .stream() - .filter(getGroupFilter()) - .map(EnchantConflictGroup::getCantConflictGroup) - .collect(Collectors.toSet()); - - groupConfigGui.setFilter(group -> - groups.stream().anyMatch(other -> other.isReferencing(group)) - ); - groupConfigGui.init(); - } - - 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/EnchantConflictGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java index 3c28e7c5..912e6cb3 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java @@ -1,7 +1,6 @@ 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.configuration.file.FileConfiguration; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -25,30 +24,26 @@ public class EnchantConflictGui extends MappedGuiListConfigGui getEveryInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { return ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList(); } 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 677ca54d..a6145368 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.gui.ValueUpdatableGui; +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.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,29 +37,18 @@ 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 1d5c9ec5..e9edbebf 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,13 +1,11 @@ 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; @@ -38,22 +36,14 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui getEveryInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { ArrayList includeGroups = new ArrayList<>(); for (AbstractMaterialGroup group : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java deleted file mode 100644 index 35ad5bf1..00000000 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java +++ /dev/null @@ -1,132 +0,0 @@ -package xyz.alexcrea.cuanvil.gui.config.global; - -import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; -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.NamespacedKey; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import xyz.alexcrea.cuanvil.config.ConfigHolder; -import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; -import xyz.alexcrea.cuanvil.util.CasedStringUtil; -import xyz.alexcrea.cuanvil.util.MaterialUtil; -import xyz.alexcrea.cuanvil.util.UnitRepairUtil; - -public class ItemConfigGui extends ChestGui { - - private EnchantConflictGui enchantConflictGui; - private GroupConfigGui groupConfigGui; - private UnitRepairConfigGui unitRepairConfigGui; - private CustomRecipeConfigGui customRecipeConfigGui; - - public ItemConfigGui(@NotNull Material display, @NotNull NamespacedKey material) { - super(3, - CasedStringUtil.snakeToUpperSpacedCase( - material.getKey().toLowerCase() - ) + " Config", - CustomAnvil.instance); - - Pattern pattern = new Pattern( - "0000D0000", - "056000780", - "Q00000000" - ); - PatternPane pane = new PatternPane(0, 0, 9, 3, pattern); - addPane(pane); - - GuiGlobalItems.addBackgroundItem(pane); - - ItemStack displayItemstack = new ItemStack(display); - ItemMeta displayMeta = displayItemstack.getItemMeta(); - assert displayMeta != null; - - displayMeta.setDisplayName("§aConfiguring " + material); - displayItemstack.setItemMeta(displayMeta); - pane.bindItem('D', new GuiItem(displayItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); - - // Enchantment Conflicts item - GuiItem enchantConflictItem = MainConfigGui.enchantConflictItem(getEnchantConflictGui(material)); - pane.bindItem('5', enchantConflictItem); - - // Group config items - GuiItem groupConfigItem = MainConfigGui.groupConfigItem(getGroupConfigGui(material)); - pane.bindItem('6', groupConfigItem); - - // Unit repair item - GuiItem unitRepairItem = MainConfigGui.unitRepairItem(getUnitRepairConfigGui(material)); - pane.bindItem('7', unitRepairItem); - - // Custom recipe item - GuiItem customRecipeItem = MainConfigGui.customRecipeItem(getCustomRecipeConfigGui(material)); - pane.bindItem('8', customRecipeItem); - - // quit item - pane.bindItem('Q', MainConfigGui.quitItem()); - } - - private EnchantConflictGui getEnchantConflictGui(@NotNull NamespacedKey material) { - if (enchantConflictGui == null) { - enchantConflictGui = new EnchantConflictGui(this); - enchantConflictGui.setFilter(group -> - group.getCantConflictGroup().contain(material) - ); - enchantConflictGui.init(); - } - - return enchantConflictGui; - } - - private GroupConfigGui getGroupConfigGui(@NotNull NamespacedKey material) { - if (groupConfigGui == null) { - groupConfigGui = new GroupConfigGui(this); - groupConfigGui.setFilter(group -> - group.contain(material) - ); - groupConfigGui.init(); - } - - return groupConfigGui; - } - - private UnitRepairConfigGui getUnitRepairConfigGui(@NotNull NamespacedKey material) { - if (unitRepairConfigGui == null) { - unitRepairConfigGui = new UnitRepairConfigGui(this); - unitRepairConfigGui.setFilter(otherMat -> - otherMat.equals(material) || UnitRepairUtil.INSTANCE.findRawRepairValue( - material, otherMat, ConfigHolder.UNIT_REPAIR_HOLDER.getConfig()) != null - ); - unitRepairConfigGui.init(); - } - - return unitRepairConfigGui; - } - - private CustomRecipeConfigGui getCustomRecipeConfigGui(@NotNull NamespacedKey material) { - if (customRecipeConfigGui == null) { - customRecipeConfigGui = new CustomRecipeConfigGui(this); - customRecipeConfigGui.setFilter(recipe -> { - if (isMaterial(recipe.getLeftItem(), material)) return true; - if (isMaterial(recipe.getRightItem(), material)) return true; - return isMaterial(recipe.getResultItem(), material); - } - ); - customRecipeConfigGui.init(); - } - - return customRecipeConfigGui; - } - - private boolean isMaterial(@Nullable ItemStack item, @NotNull NamespacedKey material) { - if (item == null) return false; - - return material.equals(MaterialUtil.INSTANCE.getCustomType(item)); - } - -} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java index 54c4ce13..0e366ae6 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java @@ -1,10 +1,9 @@ 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.CustomAnvil; import org.bukkit.Material; -import org.bukkit.NamespacedKey; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -14,25 +13,24 @@ import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; import xyz.alexcrea.cuanvil.util.CasedStringUtil; -import xyz.alexcrea.cuanvil.util.MaterialUtil; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.HashSet; public class UnitRepairConfigGui extends - MappedGuiListConfigGui> { + MappedGuiListConfigGui> { private static UnitRepairConfigGui INSTANCE; @Nullable - public static UnitRepairConfigGui getCurrentInstance() { + public static UnitRepairConfigGui getCurrentInstance(){ return INSTANCE; } @NotNull - public static UnitRepairConfigGui getInstance() { - if (INSTANCE == null) INSTANCE = new UnitRepairConfigGui(); + public static UnitRepairConfigGui getInstance(){ + if(INSTANCE == null) INSTANCE = new UnitRepairConfigGui(); return INSTANCE; } @@ -43,12 +41,8 @@ public class UnitRepairConfigGui extends init(); } - public UnitRepairConfigGui(Gui parent) { - super("Unit Repair Config", parent); - } - @Override - protected LazyElement newInstanceOfGui(NamespacedKey material, GuiItem item) { + protected LazyElement newInstanceOfGui(Material material, GuiItem item) { return new LazyElement<>(item, () -> { UnitRepairElementListGui element = new UnitRepairElementListGui(material, this); element.init(); @@ -57,34 +51,23 @@ public class UnitRepairConfigGui extends } @Override - protected ItemStack createItemForGeneric(@NotNull NamespacedKey material) { - var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - var section = unitConfig.getConfigurationSection(material.toString().toLowerCase()); - var legacySection = unitConfig.getConfigurationSection(material.getKey().toLowerCase()); + protected ItemStack createItemForGeneric(Material material) { + ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(material.name().toLowerCase()); + String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()); - String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.getKey().toLowerCase()); - - var display = MaterialUtil.INSTANCE.getMatFromKey(material); - - if (display == null || display.isAir()) { - display = Material.BARRIER; + if(material.isAir()){ + material = Material.BARRIER; } - var reparable = new HashSet(); - if (section != null) - reparable.addAll(section.getKeys(false)); - if (legacySection != null) - reparable.addAll(legacySection.getKeys(false)); + int reparableItemCount = materialSection == null ? 0 : materialSection.getKeys(false).size(); // Probably an expensive call but... why not - var reparableItemCount = reparable.size(); - - ItemStack item = new ItemStack(display); + ItemStack item = new ItemStack(material); ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("§eRepaired by " + materialName); + meta.setDisplayName("§eRepaired by " +materialName); meta.setLore(Arrays.asList( - "§7There is currently §e" + reparableItemCount + " §7reparable item with " + materialName, + "§7There is currently §e" +reparableItemCount+ " §7reparable item with "+materialName, "§7Click here to open the menu to edit reparable item by " + materialName )); @@ -94,16 +77,13 @@ public class UnitRepairConfigGui extends } @Override - protected Collection getEveryInstanceOfGeneric() { - var materials = new HashSet(); - var config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); + protected Collection getEveryDisplayableInstanceOfGeneric() { + ArrayList materials = new ArrayList<>(); - for (String matName : config.getKeys(false)) { - if(!config.isConfigurationSection(matName)) continue; - - NamespacedKey material = NamespacedKey.fromString(matName.toLowerCase()); - if (material != null) { - materials.add(material); + for (String matName : ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getKeys(false)) { + Material mat = Material.getMaterial(matName.toUpperCase()); + if(mat != null){ + materials.add(mat); } } return materials; @@ -133,7 +113,7 @@ public class UnitRepairConfigGui extends "§7You like to be an unit repair item", this, (itemStack, player) -> { - NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); + Material type = itemStack.getType(); // Add new material updateValueForGeneric(type, true); @@ -146,9 +126,9 @@ public class UnitRepairConfigGui extends } @NotNull - public LazyElement getInstanceOrCreate(NamespacedKey mat) { + public LazyElement getInstanceOrCreate(Material mat){ LazyElement element = this.elementGuiMap.get(mat); - if (element == null) { + if(element == null){ updateValueForGeneric(mat, false); element = this.elementGuiMap.get(mat); @@ -161,10 +141,8 @@ public class UnitRepairConfigGui extends protected String genericDisplayedName() { return "this function Should not be used."; } - @Override // Not used in this implementation. - protected NamespacedKey createAndSaveNewEmptyGeneric(String name) { + protected Material createAndSaveNewEmptyGeneric(String name) { return null; } - } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java index 19d31d9f..f3cc0b46 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java @@ -23,21 +23,17 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.UUID; -import java.util.function.Predicate; -public abstract class ElementListConfigGui extends ChestGui implements ValueUpdatableGui { - - public static final int LIST_FILLER_START_X = 1; - public static final int LIST_FILLER_START_Y = 1; - public static final int LIST_FILLER_LENGTH = 7; - public static final int LIST_FILLER_HEIGHT = 4; +public abstract class ElementListConfigGui< T > extends ChestGui implements ValueUpdatableGui { private final String namePrefix; protected PatternPane backgroundPane; - private Predicate filter = (t) -> true; - private boolean hasDefaultFilter = true; + public static final int LIST_FILLER_START_X = 1; + public static final int LIST_FILLER_START_Y = 1; + public static final int LIST_FILLER_LENGTH = 7; + public static final int LIST_FILLER_HEIGHT = 4; protected ElementListConfigGui(@NotNull String title, Gui parent) { super(6, title, CustomAnvil.instance); @@ -50,12 +46,7 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU } - public void setFilter(Predicate filter) { - this.filter = filter; - this.hasDefaultFilter = false; - } - - protected Pattern getBackgroundPattern() { + protected Pattern getBackgroundPattern(){ return new Pattern( GuiSharedConstant.UPPER_FILLER_FULL_PLANE, GuiSharedConstant.EMPTY_FILLER_FULL_LINE, @@ -70,7 +61,7 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU protected ArrayList pages; protected HashMap pageMap; - public void init() { + public void init() { // Why I'm using an init function ? //TODO determine why is it using a init function and not used on constructor. GuiGlobalItems.addBackgroundItem(this.backgroundPane); this.backgroundPane.bindItem('1', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM); addPane(this.backgroundPane); @@ -90,7 +81,7 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU protected GuiItem goLeftItem; protected GuiItem goRightItem; - protected void prepareStaticValues() { + protected void prepareStaticValues(){ // Left item creation for consumer & bind this.goLeftItem = new GuiItem(new ItemStack(Material.RED_STAINED_GLASS_PANE), event -> { HumanEntity viewer = event.getWhoClicked(); @@ -121,23 +112,17 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU viewer.setItemOnCursor(cursor); }, CustomAnvil.instance); - GuiItem createNew; - if(hasDefaultFilter) - createNew = prepareCreateNewItem(); - else - createNew = GuiSharedConstant.SECONDARY_BACKGROUND_ITEM; - - if (createNew != null) { + GuiItem createNew = prepareCreateNewItem(); + if(createNew != null){ this.backgroundPane.bindItem('C', createNew); } } - - protected void reloadValues() { + protected void reloadValues(){ this.firstPage.clear(); this.pages.clear(); this.pages.add(this.firstPage); - for (T generic : getDisplayableInstanceOfGeneric()) { + for (T generic : getEveryDisplayableInstanceOfGeneric()) { updateValueForGeneric(generic, false); } @@ -262,7 +247,7 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU // set title StringBuilder title = new StringBuilder(this.namePrefix); int pagesSize = this.pages.size(); - if (pagesSize > 1) { + if(pagesSize > 1){ title.append(" (").append(pageID + 1).append('/').append(pagesSize).append(')'); } setTitle(title.toString()); @@ -303,7 +288,7 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU public void removeGeneric(T generic) { GuiItem item = findGuiItemForRemoval(generic); - if (item == null) return; + if(item == null) return; removeFromPage(item); update(); @@ -315,11 +300,7 @@ public abstract class ElementListConfigGui extends ChestGui implements ValueU protected abstract void updateGeneric(T generic, ItemStack usedItem); - protected abstract Collection getEveryInstanceOfGeneric(); - - protected Collection getDisplayableInstanceOfGeneric() { - return getEveryInstanceOfGeneric().stream().filter(filter).toList(); - } + protected abstract Collection getEveryDisplayableInstanceOfGeneric(); @Override public void updateGuiValues() { diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java index 9b6c6100..31ab7184 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java @@ -1,7 +1,6 @@ package xyz.alexcrea.cuanvil.gui.config.list; import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import io.delilaheve.CustomAnvil; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; @@ -15,32 +14,27 @@ import java.util.Arrays; import java.util.HashMap; import java.util.function.Consumer; -public abstract class MappedElementListConfigGui extends ElementListConfigGui { +public abstract class MappedElementListConfigGui< T, S > extends ElementListConfigGui< T > { protected final HashMap elementGuiMap; - - protected MappedElementListConfigGui(@NotNull String title, @NotNull Gui parent) { - super(title, parent); + protected MappedElementListConfigGui(@NotNull String title) { + super(title, MainConfigGui.getInstance()); this.elementGuiMap = new HashMap<>(); } - protected MappedElementListConfigGui(@NotNull String title) { - this(title, MainConfigGui.getInstance()); - } - @Override - protected GuiItem prepareCreateNewItem() { + protected GuiItem prepareCreateNewItem(){ // Create new conflict item ItemStack createItem = new ItemStack(Material.PAPER); ItemMeta createMeta = createItem.getItemMeta(); assert createMeta != null; - createMeta.setDisplayName("§aCreate new " + genericDisplayedName()); + createMeta.setDisplayName("§aCreate new "+genericDisplayedName()); createMeta.setLore(Arrays.asList( - "§7Create a new " + genericDisplayedName() + ".", - "§7You will be asked to name the " + genericDisplayedName() + " in chat.", - "§7Then, you should edit the " + genericDisplayedName() + " config as you need" + "§7Create a new "+genericDisplayedName()+".", + "§7You will be asked to name the "+genericDisplayedName()+" in chat.", + "§7Then, you should edit the "+genericDisplayedName()+" config as you need" )); createItem.setItemMeta(createMeta); @@ -57,8 +51,8 @@ public abstract class MappedElementListConfigGui extends ElementListConfig } player.closeInventory(); - player.sendMessage("§eWrite the " + genericDisplayedName() + " name you want to create in the chat.\n" + - "§eOr write §ccancel §eto go back to " + genericDisplayedName() + " config menu"); + player.sendMessage("§eWrite the "+genericDisplayedName()+" name you want to create in the chat.\n" + + "§eOr write §ccancel §eto go back to "+genericDisplayedName()+" config menu"); CustomAnvil.Companion.getChatListener().setListenedCallback(player, prepareCreateItemConsumer(player)); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java index 8180694e..3aa18e0b 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java @@ -1,7 +1,6 @@ package xyz.alexcrea.cuanvil.gui.config.list; import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import io.delilaheve.CustomAnvil; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryClickEvent; @@ -15,22 +14,19 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Supplier; -public abstract class MappedGuiListConfigGui> - extends MappedElementListConfigGui { +public abstract class MappedGuiListConfigGui< T, S extends MappedGuiListConfigGui.LazyElement> + extends MappedElementListConfigGui< T, S > { protected MappedGuiListConfigGui(@NotNull String title) { super(title); - } - protected MappedGuiListConfigGui(@NotNull String title, @NotNull Gui parent) { - super(title, parent); } @Override public void reloadValues() { this.elementGuiMap.forEach((conflict, element) -> { ElementMappedToListGui gui = element.getStored(); - if (gui != null) gui.cleanAndBeUnusable(); + if(gui != null) gui.cleanAndBeUnusable(); }); this.elementGuiMap.clear(); @@ -53,7 +49,7 @@ public abstract class MappedGuiListConfigGui prepareCreateItemConsumer(HumanEntity player) { + protected Consumer prepareCreateItemConsumer(HumanEntity player){ AtomicReference> selfRef = new AtomicReference<>(); Consumer selfCallback = (message) -> { if (message == null) return; @@ -75,7 +71,7 @@ public abstract class MappedGuiListConfigGui> lazyOpenConsumer; - public LazyElement(GuiItem parentItem, Supplier valueSupplier) { super(valueSupplier); this.parentItem = parentItem; @@ -136,7 +131,7 @@ public abstract class MappedGuiListConfigGui openAction() { + public Consumer openAction(){ return event -> lazyOpenConsumer.get().accept(event); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java index cb55ed08..f0e7cb0e 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java @@ -15,11 +15,10 @@ import java.util.HashMap; import java.util.List; import java.util.function.Consumer; -public abstract class SettingGuiListConfigGui extends ElementListConfigGui { +public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGuiFactory> extends ElementListConfigGui< T >{ protected HashMap guiItemMap; protected HashMap factoryMap; - protected SettingGuiListConfigGui(@NotNull String title, Gui parent) { super(title, parent); this.guiItemMap = new HashMap<>(); @@ -45,7 +44,7 @@ public abstract class SettingGuiListConfigGui 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/list/UnitRepairElementListGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java index 9b879fdc..35f8ebb9 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java @@ -3,14 +3,12 @@ package xyz.alexcrea.cuanvil.gui.config.list; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; @@ -19,25 +17,26 @@ import xyz.alexcrea.cuanvil.gui.config.settings.DoubleSettingGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.CasedStringUtil; -import xyz.alexcrea.cuanvil.util.MaterialUtil; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; import java.util.function.Consumer; -public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { +public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { - private final NamespacedKey parentMaterial; + private final Material parentMaterial; private final UnitRepairConfigGui parentGui; private final String materialName; private boolean shouldWork = true; - - public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial, + public UnitRepairElementListGui(@NotNull Material parentMaterial, @NotNull UnitRepairConfigGui parentGui) { - super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()) + " §rUnit repair"); + super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " §rUnit repair"); this.parentMaterial = parentMaterial; this.parentGui = parentGui; - this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()); + this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()); GuiGlobalItems.addBackItem(this.backgroundPane, parentGui); } @@ -55,7 +54,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getCreateClickConsumer() { return event -> { event.setCancelled(true); - if (!this.shouldWork) { + if(!this.shouldWork){ return; } event.setCancelled(true); @@ -67,28 +66,28 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui { ItemMeta meta = itemStack.getItemMeta(); - NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); + Material type = itemStack.getType(); - if (!(meta instanceof Damageable)) { + if(!(meta instanceof Damageable) || (type.getMaxDurability() <= 0)) { player.sendMessage("§cThis item can't be damaged, so it can't be repaired."); return; } - if (type.equals(this.parentMaterial)) { + if(type == this.parentMaterial){ player.sendMessage("§cItem can't repair something of the same type."); return; } - String materialName = type.toString(); + String materialName = type.name().toLowerCase(); // Add new material - ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.toString().toLowerCase() + "." + materialName, 0.25); + ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.name().toLowerCase() + "." + materialName,0.25); if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); } // Update gui - updateValueForGeneric(type, true); + updateValueForGeneric(materialName, true); this.parentGui.updateValueForGeneric(this.parentMaterial, true); @@ -107,17 +106,17 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getEveryInstanceOfGeneric() { - Set keys = new HashSet<>(); - if (!this.shouldWork) { + protected Collection getEveryDisplayableInstanceOfGeneric() { + ArrayList keys = new ArrayList<>(); + if(!this.shouldWork){ return keys; } - ConfigurationSection legacySection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.getKey().toLowerCase()); - ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.toString().toLowerCase()); - - addAllKeys(legacySection, keys); - addAllKeys(materialSection, keys); - + ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.name().toLowerCase()); + if(materialSection == null){ + return keys; + } + keys.addAll(materialSection.getKeys(false)); return keys; } - private void addAllKeys(@Nullable ConfigurationSection section, @NotNull Set keys) { - if (section == null) return; - for (var key : section.getKeys(false)) { - var material = NamespacedKey.fromString(key); - if (material == null) continue; - - keys.add(material); - } - } - - private Material materialFromName(NamespacedKey material) { - Material mat = MaterialUtil.INSTANCE.getMatFromKey(material); - if (mat == null || mat.isAir()) return Material.BARRIER; + private Material materialFromName(String materialName){ + Material mat = Material.getMaterial(materialName.toUpperCase()); + if(mat == null || mat.isAir()) return Material.BARRIER; return mat; } @@ -175,8 +163,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getEveryInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { Stream toDisplayStream; if(this.displayUnselected){ toDisplayStream = CAEnchantmentRegistry.getInstance().getNameSortedEnchantments().stream(); 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 c32d22ca..73121a64 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; } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java index 1869ad34..fc519ff1 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java @@ -217,7 +217,7 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui getEveryInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { return this.defaultMaterials; } diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21.java b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21.java index bbe35589..3aa60730 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21.java @@ -1,5 +1,6 @@ package xyz.alexcrea.cuanvil.update.minecraft; +import io.delilaheve.CustomAnvil; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.update.UpdateUtils; import xyz.alexcrea.cuanvil.update.Version; diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_11.java b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_11.java index 6dd8b5ba..d6395966 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_11.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_11.java @@ -38,26 +38,26 @@ public class Update_1_21_11 extends MCUpdate{ addAbsentToList(conflictConfig, "restriction_fire_aspect.notAffectedGroups", "spears"); // Unit repair for spears - unitConfig.set("minecraft:gold_ingot.minecraft:golden_spear", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_spear", 0.25); - unitConfig.set("minecraft:iron_ingot.minecraft:iron_spear", 0.25); - unitConfig.set("minecraft:diamond.minecraft:diamond_spear", 0.25); - unitConfig.set("minecraft:netherite_ingot.minecraft:netherite_spear", 0.25); + unitConfig.set("gold_ingot.golden_spear", 0.25); + unitConfig.set("copper_ingot.copper_spear", 0.25); + unitConfig.set("iron_ingot.iron_spear", 0.25); + unitConfig.set("diamond.diamond_spear", 0.25); + unitConfig.set("netherite_ingot.netherite_spear", 0.25); - unitConfig.set("minecraft:cobblestone.stone_spear", 0.25); - unitConfig.set("minecraft:cobbled_deepslate.stone_spear", 0.25); + unitConfig.set("cobblestone.stone_spear", 0.25); + unitConfig.set("cobbled_deepslate.stone_spear", 0.25); - unitConfig.set("minecraft:oak_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:spruce_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:birch_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:jungle_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:acacia_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:dark_oak_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:mangrove_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:cherry_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:bamboo_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:crimson_planks.minecraft:wooden_spear", 0.25); - unitConfig.set("minecraft:warped_planks.minecraft:wooden_spear", 0.25); + unitConfig.set("oak_planks.wooden_spear", 0.25); + unitConfig.set("spruce_planks.wooden_spear", 0.25); + unitConfig.set("birch_planks.wooden_spear", 0.25); + unitConfig.set("jungle_planks.wooden_spear", 0.25); + unitConfig.set("acacia_planks.wooden_spear", 0.25); + unitConfig.set("dark_oak_planks.wooden_spear", 0.25); + unitConfig.set("mangrove_planks.wooden_spear", 0.25); + unitConfig.set("cherry_planks.wooden_spear", 0.25); + unitConfig.set("bamboo_planks.wooden_spear", 0.25); + unitConfig.set("crimson_planks.wooden_spear", 0.25); + unitConfig.set("warped_planks.wooden_spear", 0.25); // Create lunge enchant value and group baseConfig.set("enchant_limits.minecraft:lunge", 3); diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_9.java b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_9.java index ec464ba1..d289b9bf 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_9.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_21_9.java @@ -49,16 +49,16 @@ public class Update_1_21_9 extends MCUpdate{ public static void addCopperUnitRepair(FileConfiguration unitConfig) { // Add unit repair - unitConfig.set("minecraft:copper_ingot.minecraft:copper_helmet", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_chestplate", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_leggings", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_boots", 0.25); + unitConfig.set("copper_ingot.copper_helmet", 0.25); + unitConfig.set("copper_ingot.copper_chestplate", 0.25); + unitConfig.set("copper_ingot.copper_leggings", 0.25); + unitConfig.set("copper_ingot.copper_boots", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_pickaxe", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_shovel", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_hoe", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_axe", 0.25); - unitConfig.set("minecraft:copper_ingot.minecraft:copper_sword", 0.25); + unitConfig.set("copper_ingot.copper_pickaxe", 0.25); + unitConfig.set("copper_ingot.copper_shovel", 0.25); + unitConfig.set("copper_ingot.copper_hoe", 0.25); + unitConfig.set("copper_ingot.copper_axe", 0.25); + unitConfig.set("copper_ingot.copper_sword", 0.25); } } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt index 9287a7c7..8bd1d827 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt @@ -20,7 +20,6 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter { private val helpCommand = HelpExecutor() private val commands = ImmutableMap.of( "gui", editConfigCommand, - "config", editConfigCommand, "reload", ReloadExecutor(), "diagnostic", DiagnosticExecutor(), "debug", DebugToggleExecutor(), @@ -43,16 +42,12 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter { ): Boolean { // Find sub command to execute based on the provided command name val subcmd: CASubCommand? - val subcmdStr: String - val newargs: Array if(args.isEmpty()) { - subcmdStr = "config" subcmd = editConfigCommand newargs = args }else { - subcmdStr = args[0].lowercase() - subcmd = commands[subcmdStr] + subcmd = commands[args[0].lowercase()] newargs = args.copyOfRange(1, args.size) } @@ -62,7 +57,7 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter { } try { - return subcmd.executeCommand(sender, cmd, subcmdStr, newargs) + return subcmd.executeCommand(sender, cmd, cmdstr, newargs) } catch (e: Throwable) { MetricsUtil.trackError(e) sender.sendMessage("§cError running this command") @@ -80,7 +75,6 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter { if(args.size < 2) { for ((key, cmd) in commands) { if(!cmd.allowed(sender)) continue - if("gui".contentEquals(key)) continue result.add(key) } } else { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt index b11bfb4a..d26db8c2 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt @@ -4,18 +4,35 @@ import io.delilaheve.CustomAnvil import org.bukkit.command.Command import org.bukkit.command.CommandSender import org.bukkit.entity.HumanEntity -import xyz.alexcrea.cuanvil.api.EnchantmentApi import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil -import xyz.alexcrea.cuanvil.enchant.CAEnchantment -import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry import xyz.alexcrea.cuanvil.gui.config.MainConfigGui -import xyz.alexcrea.cuanvil.gui.config.global.EnchantConfigGui -import xyz.alexcrea.cuanvil.gui.config.global.ItemConfigGui import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions -import xyz.alexcrea.cuanvil.util.MaterialUtil.customType -import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir -class EditConfigExecutor : CASubCommand() { +class EditConfigExecutor: CASubCommand() { + + override fun executeCommand(sender: CommandSender, + cmd: Command, + cmdstr: String, + args: Array): Boolean { + if (sender !is HumanEntity) return false + + if (!allowed(sender)) { + sender.sendMessage(GuiGlobalActions.NO_EDIT_PERM) + return false + } + if(PlatformUtil.isFolia){ + sender.sendMessage("§cIt look like you are using Folia. Sadly Custom Anvil do not support Config gui for Folia.") + sender.sendMessage("§eIt is may come in a future version.") + sender.sendMessage("") + sender.sendMessage("§eCurrently you need to edit manually the config or copy from another server (spigot or better)") + sender.sendMessage("§eThen /ca reload after config file is edited") + return false + } + + MainConfigGui.getInstance().show(sender) + + return true + } override fun allowed(sender: CommandSender): Boolean { return sender.hasPermission(CustomAnvil.editConfigPermission) @@ -25,109 +42,4 @@ class EditConfigExecutor : CASubCommand() { return "Gui to edit the plugin's config" } - override fun executeCommand( - sender: CommandSender, - cmd: Command, - cmdstr: String, - args: Array - ): Boolean { - if (sender !is HumanEntity) return false - - if (!allowed(sender)) { - sender.sendMessage(GuiGlobalActions.NO_EDIT_PERM) - return false - } - if (PlatformUtil.isFolia) { - sender.sendMessage("§cIt look like you are using Folia. Sadly Custom Anvil do not support Config gui for Folia.") - sender.sendMessage("§eIt is may come in a future version.") - sender.sendMessage("") - sender.sendMessage("§eCurrently you need to edit manually the config or copy from another server (spigot or better)") - sender.sendMessage("§eThen /ca reload after config file is edited") - return false - } - - if ("gui".equals(cmdstr, ignoreCase = true)) { - sender.sendMessage("§c/ca gui has been moved to /ca config") - } - - if (args.isEmpty()) - processOpen(sender) - else when (args[0].lowercase()) { - "open" -> processOpen(sender) - "enchant" -> processEnchant(sender, args) - "item" -> processItem(sender) - else -> sender.sendMessage("Unknown subcommand \"${args[0]}\"") - } - - return true - } - - private fun processEnchant(sender: HumanEntity, args: Array) { - val enchantToFilter: Set - if (args.size <= 1) { - val item = sender.inventory.itemInMainHand - - enchantToFilter = EnchantmentApi.getEnchantments(item).keys - if (enchantToFilter.isEmpty()) { - sender.sendMessage("No enchantment found in the item you are holding") - return - } - } else { - enchantToFilter = HashSet(EnchantmentApi.getListByName(args[1].lowercase())) - - if (enchantToFilter.isEmpty()) { - sender.sendMessage("No enchantment found with the name \"${args[1]}\"") - return - } - } - - EnchantConfigGui(enchantToFilter).show(sender) - - } - - private fun processItem(sender: HumanEntity) { - val item = sender.inventory.itemInMainHand - if (item.isAir) { - sender.sendMessage("Cannot configure the item in hand") - return - } - - ItemConfigGui(item.type, item.customType).show(sender) - } - - private fun processOpen(sender: HumanEntity) { - MainConfigGui.getInstance().show(sender) - } - - // --------------- - // Tab completer - // --------------- - - private fun allEnchantmentsByName(): Collection { - val names = mutableSetOf() - for (enchantment in CAEnchantmentRegistry.getInstance().values()) { - names.add(enchantment.name) - names.add(enchantment.key.toString()) - } - - return names - } - - override fun tabCompleter(sender: CommandSender, args: Array, list: MutableList) { - list.addAll( - when (args.size) { - 1 -> listOf("item", "enchant", "open") - 2 -> { - when (args[0].lowercase()) { - "enchant" -> allEnchantmentsByName() - else -> listOf() - } - } - - else -> listOf() - } - ) - - } - } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt index dc1e25a9..6b55662f 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt @@ -6,7 +6,6 @@ import org.bukkit.NamespacedKey import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.dependency.plugins.EcoItemDependencyUtil -import javax.annotation.Nullable object MaterialUtil { @@ -36,13 +35,11 @@ object MaterialUtil { return this.type.key } - @Nullable private fun bukkitMaterialFromKey(key: NamespacedKey): Material? { //TODO on paper only transition Registry.MATERIAL.get(key) return Material.matchMaterial(key.toString()) } - @Nullable fun getMatFromKey(key: NamespacedKey): Material? { if(DependencyManager.ecoEnchantCompatibility != null) { val result = EcoItemDependencyUtil.ecoItemMaterialFromKey(key) diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt index 5d059870..8463e27e 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt @@ -1,8 +1,6 @@ package xyz.alexcrea.cuanvil.util -import org.bukkit.NamespacedKey import org.bukkit.configuration.ConfigurationSection -import org.bukkit.configuration.file.FileConfiguration import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.config.ConfigHolder import xyz.alexcrea.cuanvil.util.MaterialUtil.customType @@ -13,7 +11,7 @@ object UnitRepairUtil { private const val DEFAULT_DEFAULT_UNIT_REPAIR = 0.25 // Path to user default unit repair value - public const val UNIT_REPAIR_DEFAULT_PATH = "default_repair_amount" + private const val UNIT_REPAIR_DEFAULT_PATH = "default_repair_amount" /** * Get the % of repair by unit [other] will do to this [ItemStack]. @@ -24,56 +22,40 @@ object UnitRepairUtil { ): Double? { if (other == null) return null val config = ConfigHolder.UNIT_REPAIR_HOLDER.config + // Get configuration section if exist + val otherName = other.customType.key.lowercase() + var section = config.getConfigurationSection(otherName) + if (section == null) { + section = config.getConfigurationSection(otherName.uppercase()) + if (section == null) return null - val result = findRawRepairValue(this, other, config) ?: return null + } + // Get repair amount + var userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR) + if (userDefault <= 0) { + userDefault = DEFAULT_DEFAULT_UNIT_REPAIR + } - if(result > 0) return result - - // Get default - val userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR) - if (userDefault <= 0) - return DEFAULT_DEFAULT_UNIT_REPAIR - return userDefault + return getRepairAmount(this, section, userDefault) } - private fun findRawRepairValue( - self: ItemStack, - other: ItemStack, - config: FileConfiguration - ): Double? { - val material = other.customType - val selfType = self.customType - - val result = checkSection(config, material.toString(), selfType) - if (result != null) return result - - return checkSection(config, material.key, selfType) - } - - fun findRawRepairValue( - self: NamespacedKey, - other: NamespacedKey, - config: FileConfiguration - ): Double? { - val result = checkSection(config, other.toString(), self) - if (result != null) return result - - return checkSection(config, other.key, self) - } - - fun checkSection( - config: FileConfiguration, - path: String, - material: NamespacedKey - ): Double? { - val section = config.getConfigurationSection(path) ?: return null - - if (section.isDouble(material.toString())) - return section.getDouble(material.toString()) - if (section.isDouble(material.key)) - return section.getDouble(material.key) - - return null + /** + * Get the item % repaired by this configuration section of a unit repair. + * null if not found. + * If value is set to less than or equal to 0 then it will be set to default + */ + private fun getRepairAmount(item: ItemStack, section: ConfigurationSection, default: Double): Double? { + val itemName = item.customType.key.lowercase() + val repairValue = if (section.isDouble(itemName)) { + section.getDouble(itemName) + } else if (section.isDouble(itemName.uppercase())) { + section.getDouble(itemName.uppercase()) + } else { + return null + } + if (repairValue <= 0) + return default + return repairValue } } \ No newline at end of file