From f1c3cf46e16919e386d0840dc6dc2162cc8a09f5 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Wed, 1 Jul 2026 12:13:13 +0200 Subject: [PATCH] fix turtle scule unit repair and force migratation of sweeping edge --- build.gradle.kts | 2 +- defaultconfigs/1.21.11/config.yml | 6 +- defaultconfigs/1.21.11/enchant_conflict.yml | 1 - defaultconfigs/1.21.9/config.yml | 4 - defaultconfigs/1.21.9/enchant_conflict.yml | 1 - defaultconfigs/1.21/config.yml | 4 - defaultconfigs/1.21/enchant_conflict.yml | 2 +- .../cuanvil/update/UpdateHandler.java | 9 +- .../alexcrea/cuanvil/update/UpdateUtils.java | 17 ++++ .../update/minecraft/Update_1_20_5.java | 98 +++++++++++++++++++ .../cuanvil/update/plugin/PUpdate_1_17_7.java | 21 ++++ 11 files changed, 143 insertions(+), 22 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_20_5.java create mode 100644 src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_17_7.java diff --git a/build.gradle.kts b/build.gradle.kts index 4436e29e..76ab4c00 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.17.6" +version = "1.17.7" val isDevBuild = System.getenv("SMALL_COMMIT_HASH") != null val isPreRelease = System.getenv("IS_GITHUB_PRERELEASE") == "true" diff --git a/defaultconfigs/1.21.11/config.yml b/defaultconfigs/1.21.11/config.yml index c756ad11..8b5747b1 100644 --- a/defaultconfigs/1.21.11/config.yml +++ b/defaultconfigs/1.21.11/config.yml @@ -154,7 +154,6 @@ 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 @@ -293,9 +292,6 @@ enchant_values: minecraft:swift_sneak: item: 8 book: 4 - minecraft:sweeping: - item: 4 - book: 2 minecraft:sweeping_edge: item: 4 book: 2 @@ -489,5 +485,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.15.5 +configVersion: 1.17.7 lowMinecraftVersion: 1.21.11 diff --git a/defaultconfigs/1.21.11/enchant_conflict.yml b/defaultconfigs/1.21.11/enchant_conflict.yml index 874698ca..18341d36 100644 --- a/defaultconfigs/1.21.11/enchant_conflict.yml +++ b/defaultconfigs/1.21.11/enchant_conflict.yml @@ -270,7 +270,6 @@ restriction_soul_speed: restriction_sweeping_edge: enchantments: - - minecraft:sweeping - minecraft:sweeping_edge notAffectedGroups: - enchanted_book diff --git a/defaultconfigs/1.21.9/config.yml b/defaultconfigs/1.21.9/config.yml index 55431386..c7700969 100644 --- a/defaultconfigs/1.21.9/config.yml +++ b/defaultconfigs/1.21.9/config.yml @@ -152,7 +152,6 @@ 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 @@ -290,9 +289,6 @@ 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 4db5c912..8ab9e3bc 100644 --- a/defaultconfigs/1.21.9/enchant_conflict.yml +++ b/defaultconfigs/1.21.9/enchant_conflict.yml @@ -267,7 +267,6 @@ restriction_soul_speed: restriction_sweeping_edge: enchantments: - - minecraft:sweeping - minecraft:sweeping_edge notAffectedGroups: - enchanted_book diff --git a/defaultconfigs/1.21/config.yml b/defaultconfigs/1.21/config.yml index 5b23efbf..1ef0d102 100644 --- a/defaultconfigs/1.21/config.yml +++ b/defaultconfigs/1.21/config.yml @@ -152,7 +152,6 @@ 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 @@ -287,9 +286,6 @@ 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 0af1be6e..d3b5d33c 100644 --- a/defaultconfigs/1.21/enchant_conflict.yml +++ b/defaultconfigs/1.21/enchant_conflict.yml @@ -157,7 +157,7 @@ restriction_soul_speed: notAffectedGroups: [ enchanted_book, boots ] restriction_sweeping_edge: - enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ] + enchantments: [ minecraft:sweeping_edge ] notAffectedGroups: [ enchanted_book, swords ] restriction_swift_sneak: diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java index 660accb0..c548f228 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateHandler.java @@ -2,10 +2,7 @@ package xyz.alexcrea.cuanvil.update; import io.delilaheve.CustomAnvil; import xyz.alexcrea.cuanvil.config.ConfigHolder; -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.minecraft.*; import xyz.alexcrea.cuanvil.update.plugin.*; import javax.annotation.Nonnull; @@ -32,10 +29,12 @@ 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, 15, 6), PUpdate_1_15_6::handleUpdate, + new Version(1, 17, 7), PUpdate_1_17_7::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 2907fefb..4577b7a5 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.update; import org.bukkit.Bukkit; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import java.util.ArrayList; @@ -33,4 +34,20 @@ 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 new file mode 100644 index 00000000..53b996a6 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/update/minecraft/Update_1_20_5.java @@ -0,0 +1,98 @@ +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/plugin/PUpdate_1_17_7.java b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_17_7.java new file mode 100644 index 00000000..972825dd --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_17_7.java @@ -0,0 +1,21 @@ +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); + } + +}