From a9c65dfddc5ca8ff92917dfa7cca95e262d7725e Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Fri, 14 Jun 2024 19:14:46 +0200 Subject: [PATCH] Add support for 1.21 --- .../enchant/EnchantmentProperties.java | 6 +- .../alexcrea/cuanvil/update/UpdateUtils.java | 29 ++++++ .../alexcrea/cuanvil/update/Update_1_21.java | 98 +++++++++++++++++++ src/main/kotlin/io/delilaheve/CustomAnvil.kt | 4 + 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java create mode 100644 src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java index 3651e87..1137feb 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentProperties.java @@ -7,7 +7,9 @@ public enum EnchantmentProperties { BANE_OF_ARTHROPODS(EnchantmentRarity.UNCOMMON), BINDING_CURSE(EnchantmentRarity.VERY_RARE), BLAST_PROTECTION(EnchantmentRarity.RARE), + BREACH(EnchantmentRarity.RARE), CHANNELING(EnchantmentRarity.VERY_RARE), + DENSITY(EnchantmentRarity.UNCOMMON), DEPTH_STRIDER(EnchantmentRarity.RARE), EFFICIENCY(EnchantmentRarity.COMMON), FLAME(EnchantmentRarity.RARE), @@ -42,7 +44,9 @@ public enum EnchantmentProperties { SWEEPING_EDGE(EnchantmentRarity.RARE), THORNS(EnchantmentRarity.VERY_RARE), UNBREAKING(EnchantmentRarity.UNCOMMON), - VANISHING_CURSE(EnchantmentRarity.VERY_RARE); + VANISHING_CURSE(EnchantmentRarity.VERY_RARE), + WIND_BURST(EnchantmentRarity.RARE), + ; private final EnchantmentRarity rarity; diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java new file mode 100644 index 0000000..6448ced --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/update/UpdateUtils.java @@ -0,0 +1,29 @@ +package xyz.alexcrea.cuanvil.update; + +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class UpdateUtils { + public final static String MINECRAFT_VERSION_PATH = "lowMinecraftVersion"; + + static int[] readVersionFromString(String versionString){ + String[] partialVersion = versionString.split("\\."); + int[] versionParts = new int[]{0, 0, 0}; + + for (int i = 0; i < Math.min(3, partialVersion.length); i++) { + versionParts[i] = Integer.parseInt(partialVersion[i]); + } + return versionParts; + } + + static void addToStringList(FileConfiguration config, String path, String... toAdd){ + List groups = new ArrayList<>(config.getStringList(path)); + groups.addAll(Arrays.asList(toAdd)); + config.set(path, groups); + + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java b/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java new file mode 100644 index 0000000..dca039a --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java @@ -0,0 +1,98 @@ +package xyz.alexcrea.cuanvil.update; + +import io.delilaheve.CustomAnvil; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import xyz.alexcrea.cuanvil.config.ConfigHolder; + +import static xyz.alexcrea.cuanvil.update.UpdateUtils.addToStringList; + +// This is a temporary class that aim to handle 1.21 update. +// It will be replaced by a better system later. +public class Update_1_21 { + + public static void handleUpdate(){ + // Assume if version path is not null then it's 1.21 + String oldVersion = ConfigHolder.DEFAULT_CONFIG.getConfig().getString(UpdateUtils.MINECRAFT_VERSION_PATH); + if(oldVersion != null){ + int[] versionParts = UpdateUtils.readVersionFromString(oldVersion); + + // Test 1.21 + if((versionParts[0] >= 1) && (versionParts[1] >= 21)){ + return; + } + } + + String versionString = Bukkit.getServer().getBukkitVersion().split("-")[0]; + int[] versionParts = UpdateUtils.readVersionFromString(versionString); + + // Test 1.21 + if((versionParts[0] >= 1) && (versionParts[1] >= 21)){ + doUpdate(); + } + + } + + private static void doUpdate() { + CustomAnvil.instance.getLogger().info("Updating config to support 1.21 ..."); + + FileConfiguration baseConfig = ConfigHolder.DEFAULT_CONFIG.getConfig(); + FileConfiguration groupConfig = ConfigHolder.ITEM_GROUP_HOLDER.getConfig(); + FileConfiguration conflictConfig = ConfigHolder.CONFLICT_HOLDER.getConfig(); + + // Add mace to groups + groupConfig.set("mace.type", "include"); + addToStringList(groupConfig, "mace.items", "mace"); + + addToStringList(groupConfig, "can_unbreak.groups", "mace"); + + // Add new enchant conflicts + addToStringList(conflictConfig, "restriction_density.enchantments", "density"); + addToStringList(conflictConfig, "restriction_density.notAffectedGroups", "mace"); + + addToStringList(conflictConfig, "restriction_breach.enchantments", "breach"); + addToStringList(conflictConfig, "restriction_breach.notAffectedGroups", "mace"); + + addToStringList(conflictConfig, "restriction_wind_burst.enchantments", "wind_burst"); + addToStringList(conflictConfig, "restriction_wind_burst.notAffectedGroups", "mace"); + + // Add mace to conflicts + addToStringList(conflictConfig, "restriction_fire_aspect.notAffectedGroups", "mace"); + addToStringList(conflictConfig, "restriction_smite.notAffectedGroups", "mace"); + addToStringList(conflictConfig, "restriction_bane_of_arthropods.notAffectedGroups", "mace"); + + addToStringList(conflictConfig, "mace_enchant_conflict.enchantments", "density", "breach", "smite", "bane_of_arthropods"); + conflictConfig.set("mace_enchant_conflict.maxEnchantmentBeforeConflict", 1); + + // Add level limit + baseConfig.set("enchant_limits.density", 5); + baseConfig.set("enchant_limits.breach", 4); + baseConfig.set("enchant_limits.wind_burst", 3); + + // Add enchant values + baseConfig.set("enchant_values.density.item", 1); + baseConfig.set("enchant_values.density.book", 1); + + baseConfig.set("enchant_values.breach.item", 4); + baseConfig.set("enchant_values.breach.book", 2); + + baseConfig.set("enchant_values.wind_burst.item", 4); + baseConfig.set("enchant_values.wind_burst.book", 2); + + // Set version string as 1.21 + baseConfig.set(UpdateUtils.MINECRAFT_VERSION_PATH, "1.21"); + + // Save + ConfigHolder.DEFAULT_CONFIG.saveToDisk(true); + ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true); + ConfigHolder.CONFLICT_HOLDER.saveToDisk(true); + + // imply reload of CONFLICT_HOLDER + // We also do not need to reload base config as there is no object related to it. + ConfigHolder.ITEM_GROUP_HOLDER.reload(); + + CustomAnvil.instance.getLogger().info("Updating Done !"); + + } + +} diff --git a/src/main/kotlin/io/delilaheve/CustomAnvil.kt b/src/main/kotlin/io/delilaheve/CustomAnvil.kt index ea4dcf3..75fcbfa 100644 --- a/src/main/kotlin/io/delilaheve/CustomAnvil.kt +++ b/src/main/kotlin/io/delilaheve/CustomAnvil.kt @@ -13,6 +13,7 @@ import xyz.alexcrea.cuanvil.listener.ChatEventListener import xyz.alexcrea.cuanvil.packet.NoProtocoLib import xyz.alexcrea.cuanvil.packet.PacketManager import xyz.alexcrea.cuanvil.packet.ProtocoLibWrapper +import xyz.alexcrea.cuanvil.update.Update_1_21 import xyz.alexcrea.cuanvil.util.Metrics import xyz.alexcrea.cuanvil.util.MetricsUtil import java.io.File @@ -107,6 +108,9 @@ class CustomAnvil : JavaPlugin() { val success = ConfigHolder.loadConfig() if (!success) return + // temporary: handle 1.21 update + Update_1_21.handleUpdate() + // Load gui constants //TODO maybe something better later MainConfigGui.getInstance().init(this.packetManager) GuiSharedConstant.loadConstants()