diff --git a/COMPATIBILITY.md b/COMPATIBILITY.md
index d3cfd8b3..9d37521c 100644
--- a/COMPATIBILITY.md
+++ b/COMPATIBILITY.md
@@ -17,7 +17,7 @@ These plugins have compatibility handled by custom anvil. seek help on custom an
Also use ExcellentEnchant max enchant limit
- [EcoEnchant](https://www.spigotmc.org/resources/ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/) by Auxilor:
- Need to use /ca reload or a server restart to add newly added enchantment.
+ Need to use /anvilconfigreload or a server restart to add newly added enchantment.
Use EcoEnchant restriction system but new restriction can be added in custom anvil
- [Enchantment²](https://www.spigotmc.org/resources/enchants-squared-the-enchantsplus-rewrite-custom-enchantments-that-act-like-vanilla-ones.86747/) by Athlaeos:
diff --git a/README.md b/README.md
index d568fde1..49895bbb 100644
--- a/README.md
+++ b/README.md
@@ -39,8 +39,7 @@ ca.bypass.level: Allow player to bypass every level limit (no custom limit)
# Command permissions
ca.command.reload: Allow administrator to reload the plugin's configs
-ca.command.diagnostic: Get debug information about the plugin and server
-ca.command.enchantment: Allows to set enchantment to holden item
+ca.command.diagnostic: Allow adminastator to diagnistic some simple problem with the plugin
ca.config.edit: Allow administrator to edit the plugin's config in game
# -----------------------------------------------------------------------------
diff --git a/defaultconfigs/1.21.11/config.yml b/defaultconfigs/1.21.11/config.yml
index 8b5747b1..98f9a94d 100644
--- a/defaultconfigs/1.21.11/config.yml
+++ b/defaultconfigs/1.21.11/config.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# What service of metric should custom anvil use
@@ -154,6 +154,7 @@ enchant_limits:
minecraft:knockback: 2
minecraft:fire_aspect: 2
minecraft:looting: 3
+ minecraft:sweeping: 3
minecraft:sweeping_edge: 3
minecraft:efficiency: 5
minecraft:unbreaking: 3
@@ -292,6 +293,9 @@ enchant_values:
minecraft:swift_sneak:
item: 8
book: 4
+ minecraft:sweeping:
+ item: 4
+ book: 2
minecraft:sweeping_edge:
item: 4
book: 2
@@ -485,5 +489,5 @@ debug_log_verbose: false
# Whether to show inside the console or require to run /ca debug get
display_debug_in_console: false
-configVersion: 1.17.7
+configVersion: 1.15.5
lowMinecraftVersion: 1.21.11
diff --git a/defaultconfigs/1.21.11/enchant_conflict.yml b/defaultconfigs/1.21.11/enchant_conflict.yml
index 18341d36..3d62daeb 100644
--- a/defaultconfigs/1.21.11/enchant_conflict.yml
+++ b/defaultconfigs/1.21.11/enchant_conflict.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# material conflicts
@@ -270,6 +270,7 @@ restriction_soul_speed:
restriction_sweeping_edge:
enchantments:
+ - minecraft:sweeping
- minecraft:sweeping_edge
notAffectedGroups:
- enchanted_book
diff --git a/defaultconfigs/1.21.11/item_groups.yml b/defaultconfigs/1.21.11/item_groups.yml
index 5d24cacf..9f2a877e 100644
--- a/defaultconfigs/1.21.11/item_groups.yml
+++ b/defaultconfigs/1.21.11/item_groups.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Please note this config use spigot material names.
diff --git a/defaultconfigs/1.21.11/unit_repair_item.yml b/defaultconfigs/1.21.11/unit_repair_item.yml
index d742a056..ed981b18 100644
--- a/defaultconfigs/1.21.11/unit_repair_item.yml
+++ b/defaultconfigs/1.21.11/unit_repair_item.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Unit repair configuration
@@ -104,7 +104,7 @@ leather:
phantom_membrane:
elytra: 0.25
-turtle_scute:
+scute:
turtle_helmet: 0.25
oak_planks:
diff --git a/defaultconfigs/1.21.9/config.yml b/defaultconfigs/1.21.9/config.yml
index c7700969..7b3afce1 100644
--- a/defaultconfigs/1.21.9/config.yml
+++ b/defaultconfigs/1.21.9/config.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# What service of metric should custom anvil use
@@ -152,6 +152,7 @@ enchant_limits:
minecraft:knockback: 2
minecraft:fire_aspect: 2
minecraft:looting: 3
+ minecraft:sweeping: 3
minecraft:sweeping_edge: 3
minecraft:efficiency: 5
minecraft:unbreaking: 3
@@ -289,6 +290,9 @@ enchant_values:
minecraft:swift_sneak:
item: 8
book: 4
+ minecraft:sweeping:
+ item: 4
+ book: 2
minecraft:sweeping_edge:
item: 4
book: 2
diff --git a/defaultconfigs/1.21.9/enchant_conflict.yml b/defaultconfigs/1.21.9/enchant_conflict.yml
index 8ab9e3bc..9205061e 100644
--- a/defaultconfigs/1.21.9/enchant_conflict.yml
+++ b/defaultconfigs/1.21.9/enchant_conflict.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# material conflicts
@@ -267,6 +267,7 @@ restriction_soul_speed:
restriction_sweeping_edge:
enchantments:
+ - minecraft:sweeping
- minecraft:sweeping_edge
notAffectedGroups:
- enchanted_book
diff --git a/defaultconfigs/1.21.9/item_groups.yml b/defaultconfigs/1.21.9/item_groups.yml
index f7a00bcc..2dbd5db6 100644
--- a/defaultconfigs/1.21.9/item_groups.yml
+++ b/defaultconfigs/1.21.9/item_groups.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Please note this config use spigot material names.
diff --git a/defaultconfigs/1.21.9/unit_repair_item.yml b/defaultconfigs/1.21.9/unit_repair_item.yml
index 122b9657..0ce2bce5 100644
--- a/defaultconfigs/1.21.9/unit_repair_item.yml
+++ b/defaultconfigs/1.21.9/unit_repair_item.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Unit repair configuration
@@ -98,7 +98,7 @@ leather:
phantom_membrane:
elytra: 0.25
-turtle_scute:
+scute:
turtle_helmet: 0.25
oak_planks:
diff --git a/defaultconfigs/1.21/config.yml b/defaultconfigs/1.21/config.yml
index 1ef0d102..cb7e382b 100644
--- a/defaultconfigs/1.21/config.yml
+++ b/defaultconfigs/1.21/config.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# What service of metric should custom anvil use
@@ -152,6 +152,7 @@ enchant_limits:
minecraft:knockback: 2
minecraft:fire_aspect: 2
minecraft:looting: 3
+ minecraft:sweeping: 3
minecraft:sweeping_edge: 3
minecraft:efficiency: 5
minecraft:unbreaking: 3
@@ -286,6 +287,9 @@ enchant_values:
minecraft:swift_sneak:
item: 8
book: 4
+ minecraft:sweeping:
+ item: 4
+ book: 2
minecraft:sweeping_edge:
item: 4
book: 2
diff --git a/defaultconfigs/1.21/enchant_conflict.yml b/defaultconfigs/1.21/enchant_conflict.yml
index d3b5d33c..45d62c34 100644
--- a/defaultconfigs/1.21/enchant_conflict.yml
+++ b/defaultconfigs/1.21/enchant_conflict.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# material conflicts
@@ -157,10 +157,13 @@ restriction_soul_speed:
notAffectedGroups: [ enchanted_book, boots ]
restriction_sweeping_edge:
- enchantments: [ minecraft:sweeping_edge ]
+ enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ]
notAffectedGroups: [ enchanted_book, swords ]
+# Do not exist in 1.18, that mean useInFuture will be set to true
+# useInFuture set to true also mean it will not warn if there is an issue
restriction_swift_sneak:
+ useInFuture: true
enchantments: [ minecraft:swift_sneak ]
notAffectedGroups: [ enchanted_book, leggings ]
diff --git a/defaultconfigs/1.21/item_groups.yml b/defaultconfigs/1.21/item_groups.yml
index 6963d2e4..3c1eb5d0 100644
--- a/defaultconfigs/1.21/item_groups.yml
+++ b/defaultconfigs/1.21/item_groups.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Please note this config use spigot material names.
diff --git a/defaultconfigs/1.21/unit_repair_item.yml b/defaultconfigs/1.21/unit_repair_item.yml
index b7873a12..2902cce4 100644
--- a/defaultconfigs/1.21/unit_repair_item.yml
+++ b/defaultconfigs/1.21/unit_repair_item.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Unit repair configuration
@@ -98,7 +98,7 @@ leather:
phantom_membrane:
elytra: 0.25
-turtle_scute:
+scute:
turtle_helmet: 0.25
oak_planks:
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 fed90277..5c747faf 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/UpdateHandler.java b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java
index c548f228..660accb0 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java
@@ -2,7 +2,10 @@ package xyz.alexcrea.cuanvil.update;
import io.delilaheve.CustomAnvil;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
-import xyz.alexcrea.cuanvil.update.minecraft.*;
+import xyz.alexcrea.cuanvil.update.minecraft.MCUpdate;
+import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21;
+import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21_11;
+import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21_9;
import xyz.alexcrea.cuanvil.update.plugin.*;
import javax.annotation.Nonnull;
@@ -29,12 +32,10 @@ public class UpdateHandler {
new Version(1, 8, 0), PUpdate_1_8_0::handleUpdate,
new Version(1, 11, 0), PUpdate_1_11_0::handleUpdate,
new Version(1, 15, 5), PUpdate_1_15_5::handleUpdate,
- new Version(1, 15, 6), PUpdate_1_15_6::handleUpdate,
- new Version(1, 17, 7), PUpdate_1_17_7::handleUpdate
+ new Version(1, 15, 6), PUpdate_1_15_6::handleUpdate
);
private static final List mcUpdateMap = List.of(
- new Update_1_20_5(),
new Update_1_21(),
new Update_1_21_9(),
new Update_1_21_11()
diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java
index 4577b7a5..2907fefb 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java
@@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.update;
import org.bukkit.Bukkit;
-import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import java.util.ArrayList;
@@ -34,20 +33,4 @@ public class UpdateUtils {
}
- public static boolean removeFromList(FileConfiguration config, String path, String toRemove) {
- List groups = new ArrayList<>(config.getStringList(path));
- if (!groups.remove(toRemove)) return false;
-
- config.set(path, groups);
- return true;
- }
-
- public static void mergeSections(ConfigurationSection source, ConfigurationSection target) {
- for (String key : source.getKeys(false)) {
- if(target.contains(key)) continue;
- target.set(key, source.get(key));
- }
- }
-
-
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_20_5.java b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_20_5.java
deleted file mode 100644
index 53b996a6..00000000
--- a/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_20_5.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package xyz.alexcrea.cuanvil.update.minecraft;
-
-import org.bukkit.configuration.file.FileConfiguration;
-import org.jetbrains.annotations.NotNull;
-import xyz.alexcrea.cuanvil.config.ConfigHolder;
-import xyz.alexcrea.cuanvil.update.Version;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static xyz.alexcrea.cuanvil.update.UpdateUtils.*;
-
-public class Update_1_20_5 extends MCUpdate {
-
- public Update_1_20_5() {
- super(new Version(1, 20, 5));
- }
-
- @Override
- protected void doUpdate() {
- var tosave = new HashSet();
- updateName(tosave);
-
- for (ConfigHolder holder : tosave) {
- holder.saveToDisk(true);
- }
- }
-
- private static String SWEEPING_ENCHANTS = "restriction_sweeping_edge.enchantments";
-
- public static void updateName(@NotNull Set tosave) {
- var config = ConfigHolder.DEFAULT_CONFIG.getConfig();
- var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
- var conflict = ConfigHolder.CONFLICT_HOLDER.getConfig();
-
- // Rename sweeping to sweeping_edge
- migrateEnchantLimit(config, "minecraft:sweeping");
- migrateEnchantLimit(config, "sweeping");
-
- migrateEnchantValues(config, "minecraft:sweeping");
- migrateEnchantValues(config, "sweeping");
-
- if (removeFromList(conflict, SWEEPING_ENCHANTS, "minecraft:sweeping"))
- addAbsentToList(conflict, SWEEPING_ENCHANTS, "minecraft:sweeping_edge");
- if (removeFromList(conflict, SWEEPING_ENCHANTS, "sweeping"))
- addAbsentToList(conflict, SWEEPING_ENCHANTS, "minecraft:sweeping_edge");
-
- // Rename scute to turtle_scute
- migrateUnitRepair(unitConfig, "minecraft:scute");
- migrateUnitRepair(unitConfig, "scute");
-
- ConfigHolder.ITEM_GROUP_HOLDER.reload();
-
- tosave.add(ConfigHolder.DEFAULT_CONFIG);
- tosave.add(ConfigHolder.UNIT_REPAIR_HOLDER);
- tosave.add(ConfigHolder.CONFLICT_HOLDER);
- }
-
- private static void migrateEnchantLimit(FileConfiguration config, String path) {
- var finalPath = "enchant_limits." + path;
- if (!config.isInt(finalPath)) return;
- var value = config.getInt(finalPath);
-
- config.set(finalPath, null);
- if (!config.contains("enchant_limits.minecraft:sweeping_edge")) return;
- if (!config.contains("enchant_limits.sweeping_edge")) return;
-
- config.set("enchant_limits.minecraft:sweeping_edge", value);
- }
-
- private static void migrateEnchantValues(FileConfiguration config, String path) {
- migrateEnchantValues(config, path, "item");
- migrateEnchantValues(config, path, "book");
- }
-
- private static void migrateEnchantValues(FileConfiguration config, String path, String child) {
- var finalPath = "enchant_values." + path + "." + child;
- if (config.isInt(finalPath)) return;
- var value = config.getInt(finalPath);
-
- config.set(finalPath, null);
- if (!config.contains("enchant_values.minecraft:sweeping_edge." + child)) return;
- if (!config.contains("enchant_values.sweeping_edge." + child)) return;
-
- config.set("enchant_values.minecraft:sweeping_edge." + child, value);
- }
-
- private static void migrateUnitRepair(FileConfiguration config, String path) {
- var section = config.getConfigurationSection(path);
- if (section == null) return;
-
- config.set(path, null);
- var turtle_scute = config.getConfigurationSection("minecraft:turtle_scute");
- if (turtle_scute == null) config.set("minecraft:turtle_scute", section);
- else mergeSections(section, turtle_scute);
- }
-
-}
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/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_17_7.java b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_17_7.java
deleted file mode 100644
index 972825dd..00000000
--- a/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_17_7.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package xyz.alexcrea.cuanvil.update.plugin;
-
-import xyz.alexcrea.cuanvil.config.ConfigHolder;
-import xyz.alexcrea.cuanvil.update.UpdateUtils;
-import xyz.alexcrea.cuanvil.update.Version;
-import xyz.alexcrea.cuanvil.update.minecraft.Update_1_20_5;
-
-import javax.annotation.Nonnull;
-import java.util.Set;
-
-public class PUpdate_1_17_7 {
-
- public static void handleUpdate(@Nonnull Set toSave) {
- // fix only needed for 1.20.5 and above
- Version current = UpdateUtils.currentMinecraftVersion();
- if (new Version(1, 20, 5).greaterThan(current)) return;
-
- Update_1_20_5.updateName(toSave);
- }
-
-}
diff --git a/src/main/kotlin/io/delilaheve/CustomAnvil.kt b/src/main/kotlin/io/delilaheve/CustomAnvil.kt
index a119bfc7..5abf1719 100644
--- a/src/main/kotlin/io/delilaheve/CustomAnvil.kt
+++ b/src/main/kotlin/io/delilaheve/CustomAnvil.kt
@@ -24,7 +24,6 @@ import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
import xyz.alexcrea.cuanvil.update.ModrinthUpdateChecker
import xyz.alexcrea.cuanvil.update.PluginSetDefault
import xyz.alexcrea.cuanvil.update.UpdateHandler
-import xyz.alexcrea.cuanvil.update.UpdateUtils
import xyz.alexcrea.cuanvil.util.MetricsUtil
import java.io.File
import java.io.FileReader
@@ -57,8 +56,6 @@ open class CustomAnvil : JavaPlugin() {
// Permission string required to edit the plugin's config
const val editConfigPermission = "ca.config.edit"
- // Permission string required to edit the plugin's config
- const val giveEnchantmentPermission = "ca.command.enchantment"
// Command Name to reload the config
const val commandReloadName = "anvilconfigreload"
@@ -226,8 +223,7 @@ open class CustomAnvil : JavaPlugin() {
val version = description.version
val featured = if(version.contains("dev")) null else true
- ModrinthUpdateChecker(modrinthPluginID, loader,
- UpdateUtils.currentMinecraftVersion().toString())
+ ModrinthUpdateChecker(modrinthPluginID, loader, null)
.setFeatured(featured)
.setOnError {
logger.log(Level.WARNING, "error trying to fetch latest update", it)
diff --git a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt
index 9b0c4cd0..fc8a53a9 100644
--- a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt
+++ b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt
@@ -86,7 +86,6 @@ object ConfigOptions {
// Keys for specific enchantment values
private const val KEY_BOOK = "book"
- private const val KEY_BOOK_ON_BOOK = "book_on_book"
private const val KEY_ITEM = "item"
// Debug flag
@@ -579,15 +578,14 @@ object ConfigOptions {
*/
fun enchantmentValue(
enchantment: CAEnchantment,
- isToBook: Boolean,
- isFromBook: Boolean,
+ isFromBook: Boolean
): Int {
// Test namespace
- var limit = enchantmentValue(enchantment.key.toString(), isToBook, isFromBook)
+ var limit = enchantmentValue(enchantment.key.toString(), isFromBook)
if (limit != null) return limit
// Test legacy (name only)
- limit = enchantmentValue(enchantment.enchantmentName, isToBook, isFromBook)
+ limit = enchantmentValue(enchantment.enchantmentName, isFromBook)
if (limit != null) return limit
// get default (and test old legacy if present)
@@ -601,22 +599,13 @@ object ConfigOptions {
*/
private fun enchantmentValue(
enchantmentName: String,
- isToBook: Boolean,
- isFromBook: Boolean,
+ isFromBook: Boolean
): Int? {
val typeKey = if (isFromBook) KEY_BOOK else KEY_ITEM
val path = "${ENCHANT_VALUES_ROOT}.${enchantmentName}.$typeKey"
-
- val config = ConfigHolder.DEFAULT_CONFIG.config
- if(isFromBook && isToBook) {
- val specialPath = "${ENCHANT_VALUES_ROOT}.${enchantmentName}.$KEY_BOOK_ON_BOOK"
-
- if(config.isInt(specialPath))
- return config.getInt(specialPath)
- .takeIf { it >= DEFAULT_ENCHANT_VALUE }
- }
-
- return config.getInt(path, DEFAULT_ENCHANT_VALUE - 1)
+ return CustomAnvil.instance
+ .config
+ .getInt(path, DEFAULT_ENCHANT_VALUE - 1)
.takeIf { it >= DEFAULT_ENCHANT_VALUE }
}
@@ -624,9 +613,20 @@ object ConfigOptions {
* Get default value if enchantment do not exist on config
*/
private fun getDefaultValue(
- enchantment: CAEnchantment,
+ enchantment: CAEnchantment, // compatibility with 1.20.5. TODO better update system
isFromBook: Boolean
): Int {
+
+ val enchantmentName = enchantment.key.toString()
+ if (enchantmentName == "minecraft:sweeping_edge") {
+ var limit = enchantmentValue("minecraft:sweeping", isFromBook)
+ if (limit != null) return limit
+
+ // legacy name
+ limit = enchantmentValue("sweeping", isFromBook)
+ if (limit != null) return limit
+ }
+
val rarity = enchantment.defaultRarity()
return if (isFromBook)
rarity.bookValue
@@ -648,6 +648,15 @@ object ConfigOptions {
value = maxBeforeMergeDisabled(legacy)
if (value >= 0) return value
+ if (key == "minecraft:sweeping_edge") {
+ value = maxBeforeMergeDisabled("minecraft:sweeping")
+ if (value >= 0) return value
+
+ // legacy name of legacy enchantment name
+ value = maxBeforeMergeDisabled("sweeping")
+ if (value >= 0) return value
+ }
+
return DEFAULT_MAX_BEFORE_MERGE_DISABLED
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/CASubCommand.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/CASubCommand.kt
index ede87e9a..e76009ad 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/CASubCommand.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/CASubCommand.kt
@@ -2,7 +2,6 @@ package xyz.alexcrea.cuanvil.command
import org.bukkit.command.Command
import org.bukkit.command.CommandSender
-import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry
interface CASubCommand {
@@ -23,14 +22,4 @@ interface CASubCommand {
fun description(): String
- fun allEnchantmentsByName(): Collection {
- val names = mutableSetOf()
- for (enchantment in CAEnchantmentRegistry.getInstance().values()) {
- names.add(enchantment.name)
- names.add(enchantment.key.toString())
- }
-
- return names
- }
-
}
\ No newline at end of file
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt
index 1cae583f..ca635a03 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/CustomAnvilCommand.kt
@@ -17,14 +17,12 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
private val editConfigCommand = EditConfigExecutor()
private val helpCommand = HelpExecutor()
- private val commands: ImmutableMap = ImmutableMap.of(
+ private val commands = ImmutableMap.of(
"gui", editConfigCommand,
- "config", editConfigCommand,
"reload", ReloadExecutor(),
"diagnostic", DiagnosticExecutor(),
"debug", DebugToggleExecutor(),
"help", helpCommand,
- "enchant", EnchantExecutor(),
)
init {
@@ -43,16 +41,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 +56,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,8 +74,7 @@ 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)
+ result.add(key)
}
} else {
val subcmd = commands[args[0].lowercase()]
@@ -95,11 +88,9 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
}
//assumed all provided tab completed string are lowercase
- val prefix = args[args.size - 1]
return result.stream()
- .filter { it.startsWith(prefix) }
+ .filter { it.startsWith(args[args.size - 1]) }
.sorted()
.toList()
}
-
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt
index 79151cd3..53608818 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt
@@ -4,26 +4,12 @@ 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.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 {
- override fun allowed(sender: CommandSender): Boolean {
- return sender.hasPermission(CustomAnvil.editConfigPermission)
- }
-
- override fun description(): String {
- return "Gui to edit the plugin's config"
- }
-
override fun executeCommand(
sender: CommandSender,
cmd: Command,
@@ -41,81 +27,28 @@ class EditConfigExecutor : CASubCommand {
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")
+ sender.sendMessage("§eThen /anvilconfigreload 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]}\"")
- }
+ MainConfigGui.getInstance().show(sender)
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.getByName(args[1].lowercase()))
-
- if (enchantToFilter.isEmpty()) {
- sender.sendMessage("No enchantment found with the name \"${args[1]}\"")
- return
- }
- }
-
- EnchantConfigGui(enchantToFilter).show(sender)
-
+ override fun allowed(sender: CommandSender): Boolean {
+ return sender.hasPermission(CustomAnvil.editConfigPermission)
}
- 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)
+ override fun tabCompleter(
+ sender: CommandSender,
+ args: Array,
+ list: MutableList
+ ) {
}
- private fun processOpen(sender: HumanEntity) {
- MainConfigGui.getInstance().show(sender)
- }
-
- // ---------------
- // Tab completer
- // ---------------
-
- 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()
- }
- )
+ override fun description(): String {
+ return "Gui to edit the plugin's config"
}
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt
deleted file mode 100644
index fdae6b04..00000000
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-package xyz.alexcrea.cuanvil.command
-
-import io.delilaheve.CustomAnvil
-import io.delilaheve.util.ConfigOptions
-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.util.MaterialUtil.isAir
-
-class EnchantExecutor : CASubCommand {
-
-
- override fun allowed(sender: CommandSender): Boolean {
- return sender.hasPermission(CustomAnvil.giveEnchantmentPermission)
- }
-
- override fun description(): String {
- return "Allows to set enchantment to holden item"
- }
-
- override fun executeCommand(
- sender: CommandSender,
- cmd: Command,
- cmdstr: String,
- args: Array
- ): Boolean {
- if (sender !is HumanEntity) return true
-
- if (!allowed(sender)) {
- sender.sendMessage("No permission to execute this command")
- return true
- }
-
- when (args.size) {
- 0 -> {
- sender.sendMessage("Missing enchantment parameter")
- return true
- }
-
- 1 -> {
- sender.sendMessage("Missing level parameter")
- return true
- }
- }
-
- val enchants = EnchantmentApi.getByName(args[0].lowercase())
- if (enchants.isEmpty()) {
- sender.sendMessage("Enchantment not found: ${args[0]}")
- return true
- }
-
- val enchant = enchants.iterator().next()
-
- val level = args[1].toIntOrNull()?.coerceIn(0, ConfigOptions.ENCHANT_LIMIT)
- if (level == null) {
- sender.sendMessage("Invalid number: ${args[1]}")
- return true
- }
-
- val inHand = sender.inventory.itemInMainHand
- if (inHand.isAir) {
- sender.sendMessage("Cannot enchant this item")
- return true
- }
-
- if (level == 0) {
- enchant.removeFrom(inHand)
- sender.sendMessage("${enchant.prettyName} removed")
- } else {
- enchant.addEnchantmentUnsafe(inHand, level)
- sender.sendMessage("${enchant.prettyName} set to level $level")
- }
-
- return true
- }
-
- override fun tabCompleter(sender: CommandSender, args: Array, list: MutableList) {
- if (sender !is HumanEntity) return
-
- list.addAll(
- when (args.size) {
- 1 -> allEnchantmentsByName()
- 2 -> findEnchantmentLevels(sender, args[0])
-
- else -> listOf()
- }
- )
- }
-
- private fun findEnchantmentLevels(
- sender: HumanEntity,
- name: String
- ): Collection {
- val enchants = EnchantmentApi.getByName(name.lowercase())
- if (enchants.isEmpty()) return listOf()
-
- val enchant = enchants.iterator().next()
- val limit = ConfigOptions.enchantLimit(enchant)
- val result = mutableListOf()
-
- for (i in 1 until limit + 1) {
- result.add(i.toString())
- }
-
- val inHand = sender.inventory.itemInMainHand
- if (enchant.isEnchantmentPresent(inHand))
- result.add("0")
-
- return result
- }
-
-}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt
index c235abd4..d1a49856 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt
@@ -38,6 +38,13 @@ class EnchantConflictManager {
// Default name for a joining group
const val DEFAULT_GROUP_NAME = "joinedGroup"
+
+ // 1.20.5 compatibility TODO better update system
+ private val SWEEPING_EDGE_ENCHANT = Collections.singletonList(
+ CAEnchantment.getByKey(NamespacedKey.minecraft("sweeping_edge"))
+ ?: CAEnchantment.getByKey(Enchantment.SWEEPING_EDGE.key)
+ )
+
}
lateinit var conflictList: ArrayList
@@ -164,6 +171,14 @@ class EnchantConflictManager {
}
+ // Temporary solution for 1.20.5
+ when (enchantName) {
+ "minecraft:sweeping", "sweeping",
+ "minecraft:sweeping_edge", "sweeping_edge" -> {
+ return SWEEPING_EDGE_ENCHANT
+ }
+ }
+
return CAEnchantment.getByName(enchantName)
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt
index af5020c7..10190591 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt
@@ -5,7 +5,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 {
@@ -35,13 +34,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
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilUseTypeUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilUseTypeUtil.kt
index 52630454..a9c7f396 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilUseTypeUtil.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilUseTypeUtil.kt
@@ -5,11 +5,16 @@ import io.delilaheve.util.ConfigOptions
object AnvilUseTypeUtil {
/*
- By kotlin not having static function outside of companion object I need to do another util class only for 1 function:
+ By stupidity of kotlin not allowing static function outside of companion object I need to do another util class only for 1 function:
Companion object on enum class seems to get initialized AFTER the enum itself
- that mean. if you want to call a static function on enum construction YOU CAN'T. you need to do this stupid thing,
- or you can make a stupid top level function or object that at least as bad as this
- I mean, this is still an unnecessary class that should not exist but as a class is better than a random function in my opinion
+ that mean. if you want to call a static function on the enum class itself YOU CAN'T. you need to do this stupid thing
+ or you can make a stupid top level function OR object that even worse because of global scope pollution
+ (btw was gpt ""solution"". fortunately I do not "vibe code" so I do what I know instead of stupid AI solution & code)
+ I mean, this is still global scope pollution bc of a USELESS class that SHOULD not exist but as a class is better than a random *ss function
+
+ sorry for the rent but this made me frustrated
+
+ Note: I still like a lot of part of kotlin compared to java but this part is one that I hate
*/
/**
* Get config path for normal anvil use
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt
index 433680b0..ae8a8035 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt
@@ -22,7 +22,6 @@ import xyz.alexcrea.cuanvil.dependency.economy.EconomyManager
import xyz.alexcrea.cuanvil.group.ConflictType
import xyz.alexcrea.cuanvil.util.AnvilTitleUtil
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
-import kotlin.math.sqrt
@Suppress("UnstableApiUsage")
object AnvilXpUtil {
@@ -35,9 +34,8 @@ object AnvilXpUtil {
fun setAnvilResult(
view: AnvilView,
player: Player,
- result: AnvilResult
- ) {
- if (result.item == null) {
+ result: AnvilResult) {
+ if(result.item == null) {
onNoResult(player, view)
return
}
@@ -240,8 +238,7 @@ object AnvilXpUtil {
fun getRightValues(left: ItemStack, right: ItemStack, result: ItemStack, cost: AnvilCost) {
// Calculate right value and illegal enchant penalty
- val isToBook = left.isEnchantedBook()
- val isFromBook = right.isEnchantedBook()
+ val rightIsFormBook = right.isEnchantedBook()
val rightEnchs = EnchantmentApi.getEnchantments(right)
val resultEnchs = EnchantmentApi.getEnchantments(result)
val resultEnchsKeys = HashMap(resultEnchs)
@@ -269,21 +266,22 @@ object AnvilXpUtil {
// We know "enchantment.key in resultEnchs" true
val resultLevel = resultEnchs[enchantment.key]!!
- val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, isFromBook, isToBook)
+ val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, rightIsFormBook)
val value = resultLevel * enchantmentMultiplier
CustomAnvil.log("Value for sacrifice item ${enchantment.key.enchantmentName} level ${enchantment.value} is $value ($resultLevel * $enchantmentMultiplier)")
rightValue += value
}
- if (ConfigOptions.includeLeftEnchantmentForCost) {
+ if(ConfigOptions.includeLeftEnchantmentForCost) {
+ val leftIsFormBook = left.isEnchantedBook()
val leftEnchs = EnchantmentApi.getEnchantments(left)
for (enchantment in leftEnchs) {
// Do not process enchantment that are present on the sacrifice
- if (rightEnchs.contains(enchantment.key)) continue
+ if(rightEnchs.contains(enchantment.key)) continue
val resultLevel = resultEnchs.getOrDefault(enchantment.key, 0)
- val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, isFromBook, isToBook)
+ val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, leftIsFormBook)
val value = resultLevel * enchantmentMultiplier
CustomAnvil.log("Value for left item ${enchantment.key.enchantmentName} level ${enchantment.value} is $value ($resultLevel * $enchantmentMultiplier)")
leftValue += value
@@ -306,15 +304,15 @@ object AnvilXpUtil {
*/
fun calculateLevelForXp(xp: Int): Int {
return when {
- xp <= 352 -> (sqrt((xp + 9).toDouble()) - 3).toInt()
+ xp <= 352 -> (Math.sqrt((xp + 9).toDouble()) - 3).toInt()
xp <= 1507 -> {
val inner = (2.0 / 5.0) * (xp - 7839.0 / 40.0)
- (81.0 / 10.0 + sqrt(inner)).toInt()
+ (81.0 / 10.0 + Math.sqrt(inner)).toInt()
}
else -> {
val inner = (2.0 / 9.0) * (xp - 54215.0 / 72.0)
- (325.0 / 18.0 + sqrt(inner)).toInt()
+ (325.0 / 18.0 + Math.sqrt(inner)).toInt()
}
}
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 0a0c5664..c8fefb53 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit most of these config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# What service of metric should custom anvil use
diff --git a/src/main/resources/enchant_conflict.yml b/src/main/resources/enchant_conflict.yml
index 0af1be6e..479273ee 100644
--- a/src/main/resources/enchant_conflict.yml
+++ b/src/main/resources/enchant_conflict.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# material conflicts
diff --git a/src/main/resources/item_groups.yml b/src/main/resources/item_groups.yml
index 1dd06a1d..0f3cd06f 100644
--- a/src/main/resources/item_groups.yml
+++ b/src/main/resources/item_groups.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Please note this config use spigot material names.
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 4828330b..199e0e51 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -31,9 +31,6 @@ permissions:
ca.command.diagnostic:
default: op
description: Get debug information about the plugin and server
- ca.command.enchantment:
- default: op
- description: Allows to set enchantment to holden item
ca.config.edit:
default: op
description: Allow administrator to edit the plugin's config in game
diff --git a/src/main/resources/unit_repair_item.yml b/src/main/resources/unit_repair_item.yml
index 98fd0bec..2902cce4 100644
--- a/src/main/resources/unit_repair_item.yml
+++ b/src/main/resources/unit_repair_item.yml
@@ -1,6 +1,6 @@
#
# It is recommended that you use /configanvil to edit theses config.
-# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
+# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
#
# Unit repair configuration
diff --git a/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java b/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java
index a92b1d71..ac3f73ea 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java
@@ -49,8 +49,8 @@ public class DefaultConfigTests extends SharedCustomAnvilTest {
CAEnchantment enchantment = CAEnchantmentRegistry.getInstance().getByKey(key);
Assertions.assertNotNull(enchantment, "Enchantment was somehow not found");
- int itemValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, false, false);
- int bookValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, false, true);
+ int itemValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, false);
+ int bookValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, true);
EnchantmentRarity rarity = enchantment.defaultRarity();