From f41b325f6115f014542befd05521683ccd04f40a Mon Sep 17 00:00:00 2001 From: Steven Van Ingelgem Date: Mon, 8 Dec 2025 21:18:01 +0100 Subject: [PATCH] Cleanup Helper class --- .../main/java/org/dynmap/bukkit/Helper.java | 203 ++++++++---------- 1 file changed, 93 insertions(+), 110 deletions(-) diff --git a/spigot/src/main/java/org/dynmap/bukkit/Helper.java b/spigot/src/main/java/org/dynmap/bukkit/Helper.java index 239c4d8c9..db627edc9 100644 --- a/spigot/src/main/java/org/dynmap/bukkit/Helper.java +++ b/spigot/src/main/java/org/dynmap/bukkit/Helper.java @@ -1,124 +1,107 @@ package org.dynmap.bukkit; -import java.lang.reflect.Constructor; - import org.bukkit.Bukkit; import org.dynmap.Log; import org.dynmap.bukkit.helper.BukkitVersionHelper; +import java.util.LinkedHashMap; +import java.util.Map; + public class Helper { + private static final Map EXACT_VERSION_HELPERS = new LinkedHashMap<>(); - private static BukkitVersionHelper loadVersionHelper(String classname) { - try { - Class c = Class.forName(classname); - Constructor cons = c.getConstructor(); - return (BukkitVersionHelper) cons.newInstance(); - } catch (Exception x) { - Log.severe("Error loading " + classname, x); - return null; - } - } - public static final BukkitVersionHelper getHelper() { - if (BukkitVersionHelper.helper == null) { - String v = Bukkit.getServer().getVersion(); - Log.info("version=" + v); - if (v.contains("MCPC")) { - Log.severe("*********************************************************************************"); - Log.severe("* MCPC-Plus is no longer supported via the Bukkit version of Dynmap. *"); - Log.severe("* Install the appropriate Forge version of Dynmap. *"); - Log.severe("* Add the DynmapCBBridge plugin to enable support for Dynmap-compatible plugins *"); - Log.severe("*********************************************************************************"); - } - else if(v.contains("BukkitForge")) { - Log.severe("*********************************************************************************"); - Log.severe("* BukkitForge is not supported via the Bukkit version of Dynmap. *"); - Log.severe("* Install the appropriate Forge version of Dynmap. *"); - Log.severe("* Add the DynmapCBBridge plugin to enable support for Dynmap-compatible plugins *"); - Log.severe("*********************************************************************************"); - } - else if(Bukkit.getServer().getClass().getName().contains("GlowServer")) { - Log.info("Loading Glowstone support"); - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.BukkitVersionHelperGlowstone"); - } - else if (v.contains("(MC: 1.21)") || v.contains("(MC: 1.21.1)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v121.BukkitVersionHelperSpigot121"); - } - else if (v.contains("(MC: 1.21.2)") || v.contains("(MC: 1.21.3)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v121_3.BukkitVersionHelperSpigot121_3"); - } - else if (v.contains("(MC: 1.21.4)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v121_4.BukkitVersionHelperSpigot121_4"); - } - else if (v.contains("(MC: 1.21.5)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v121_5.BukkitVersionHelperSpigot121_5"); - } - else if (v.contains("(MC: 1.21.6") || v.contains("(MC: 1.21.7") || v.contains("(MC: 1.21.8")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v121_6.BukkitVersionHelperSpigot121_6"); - } - else if (v.contains("(MC: 1.21.9)") || v.contains("(MC: 1.21.10)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v121_10.BukkitVersionHelperSpigot121_10"); - } - else if (v.contains("(MC: 1.20)") || v.contains("(MC: 1.20.1)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v120.BukkitVersionHelperSpigot120"); - } - else if (v.contains("(MC: 1.20.2)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v120_2.BukkitVersionHelperSpigot120_2"); - } - else if (v.contains("(MC: 1.20.3)") || v.contains("(MC: 1.20.4)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v120_4.BukkitVersionHelperSpigot120_4"); - } - else if (v.contains("(MC: 1.20.")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v120_5.BukkitVersionHelperSpigot120_5"); - } - else if (v.contains("(MC: 1.19)") || v.contains("(MC: 1.19.1)") || v.contains("(MC: 1.19.2)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v119.BukkitVersionHelperSpigot119"); - } - else if (v.contains("(MC: 1.19.3)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v119_3.BukkitVersionHelperSpigot119_3"); - } - else if (v.contains("(MC: 1.19.")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v119_4.BukkitVersionHelperSpigot119_4"); - } - else if (v.contains("(MC: 1.18)") || (v.contains("(MC: 1.18.1)"))) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v118.BukkitVersionHelperSpigot118"); - } - else if (v.contains("(MC: 1.18")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v118_2.BukkitVersionHelperSpigot118_2"); - } - else if (v.contains("(MC: 1.17")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v117.BukkitVersionHelperSpigot117"); - } - else if (v.contains("(MC: 1.16.1")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116.BukkitVersionHelperSpigot116"); - } - else if (v.contains("(MC: 1.16.2)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116_2.BukkitVersionHelperSpigot116_2"); - } - else if (v.contains("(MC: 1.16.3)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116_3.BukkitVersionHelperSpigot116_3"); - } - else if (v.contains("(MC: 1.16.")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116_4.BukkitVersionHelperSpigot116_4"); - } - // Loading last to prevent the 1.16 contains to match all newer versions and load older helper incorrectly. - else if (v.contains("(MC: 1.16")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116.BukkitVersionHelperSpigot116"); - } - else if (v.contains("(MC: 1.15)") || v.contains("(MC: 1.15.")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v115.BukkitVersionHelperSpigot115"); - } - else if (v.contains("(MC: 1.14)") || v.contains("(MC: 1.14.1)") || v.contains("(MC: 1.14.2)") || - v.contains("(MC: 1.14.3)") || v.contains("(MC: 1.14.4)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v114_1.BukkitVersionHelperSpigot114_1"); - } - else if (v.contains("(MC: 1.13.2)")) { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v113_2.BukkitVersionHelperSpigot113_2"); - } - else { - BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.BukkitVersionHelperCB"); + static { + EXACT_VERSION_HELPERS.put("(MC: 1.21.10)", "v121_10.BukkitVersionHelperSpigot121_10"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.9)", "v121_10.BukkitVersionHelperSpigot121_10"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.8)", "v121_6.BukkitVersionHelperSpigot121_6"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.7)", "v121_6.BukkitVersionHelperSpigot121_6"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.6)", "v121_6.BukkitVersionHelperSpigot121_6"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.5)", "v121_5.BukkitVersionHelperSpigot121_5"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.4)", "v121_4.BukkitVersionHelperSpigot121_4"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.3)", "v121_3.BukkitVersionHelperSpigot121_3"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.2)", "v121_3.BukkitVersionHelperSpigot121_3"); + EXACT_VERSION_HELPERS.put("(MC: 1.21.1)", "v121.BukkitVersionHelperSpigot121"); + EXACT_VERSION_HELPERS.put("(MC: 1.21)", "v121.BukkitVersionHelperSpigot121"); + EXACT_VERSION_HELPERS.put("(MC: 1.20.6)", "v120_5.BukkitVersionHelperSpigot120_5"); + EXACT_VERSION_HELPERS.put("(MC: 1.20.5)", "v120_5.BukkitVersionHelperSpigot120_5"); + EXACT_VERSION_HELPERS.put("(MC: 1.20.4)", "v120_4.BukkitVersionHelperSpigot120_4"); + EXACT_VERSION_HELPERS.put("(MC: 1.20.3)", "v120_4.BukkitVersionHelperSpigot120_4"); + EXACT_VERSION_HELPERS.put("(MC: 1.20.2)", "v120_2.BukkitVersionHelperSpigot120_2"); + EXACT_VERSION_HELPERS.put("(MC: 1.20.1)", "v120.BukkitVersionHelperSpigot120"); + EXACT_VERSION_HELPERS.put("(MC: 1.20)", "v120.BukkitVersionHelperSpigot120"); + EXACT_VERSION_HELPERS.put("(MC: 1.19.4)", "v119_4.BukkitVersionHelperSpigot119_4"); + EXACT_VERSION_HELPERS.put("(MC: 1.19.3)", "v119_3.BukkitVersionHelperSpigot119_3"); + EXACT_VERSION_HELPERS.put("(MC: 1.19.2)", "v119.BukkitVersionHelperSpigot119"); + EXACT_VERSION_HELPERS.put("(MC: 1.19.1)", "v119.BukkitVersionHelperSpigot119"); + EXACT_VERSION_HELPERS.put("(MC: 1.19)", "v119.BukkitVersionHelperSpigot119"); + EXACT_VERSION_HELPERS.put("(MC: 1.18.2)", "v118_2.BukkitVersionHelperSpigot118_2"); + EXACT_VERSION_HELPERS.put("(MC: 1.18.1)", "v118.BukkitVersionHelperSpigot118"); + EXACT_VERSION_HELPERS.put("(MC: 1.18)", "v118.BukkitVersionHelperSpigot118"); + EXACT_VERSION_HELPERS.put("(MC: 1.17.1)", "v117.BukkitVersionHelperSpigot117"); + EXACT_VERSION_HELPERS.put("(MC: 1.17)", "v117.BukkitVersionHelperSpigot117"); + EXACT_VERSION_HELPERS.put("(MC: 1.16.5)", "v116_4.BukkitVersionHelperSpigot116_4"); + EXACT_VERSION_HELPERS.put("(MC: 1.16.4)", "v116_4.BukkitVersionHelperSpigot116_4"); + EXACT_VERSION_HELPERS.put("(MC: 1.16.3)", "v116_3.BukkitVersionHelperSpigot116_3"); + EXACT_VERSION_HELPERS.put("(MC: 1.16.2)", "v116_2.BukkitVersionHelperSpigot116_2"); + EXACT_VERSION_HELPERS.put("(MC: 1.16.1)", "v116.BukkitVersionHelperSpigot116"); + EXACT_VERSION_HELPERS.put("(MC: 1.16)", "v116.BukkitVersionHelperSpigot116"); + EXACT_VERSION_HELPERS.put("(MC: 1.15.2)", "v115.BukkitVersionHelperSpigot115"); + EXACT_VERSION_HELPERS.put("(MC: 1.15.1)", "v115.BukkitVersionHelperSpigot115"); + EXACT_VERSION_HELPERS.put("(MC: 1.15)", "v115.BukkitVersionHelperSpigot115"); + EXACT_VERSION_HELPERS.put("(MC: 1.14.4)", "v114_1.BukkitVersionHelperSpigot114_1"); + EXACT_VERSION_HELPERS.put("(MC: 1.14.3)", "v114_1.BukkitVersionHelperSpigot114_1"); + EXACT_VERSION_HELPERS.put("(MC: 1.14.2)", "v114_1.BukkitVersionHelperSpigot114_1"); + EXACT_VERSION_HELPERS.put("(MC: 1.14.1)", "v114_1.BukkitVersionHelperSpigot114_1"); + EXACT_VERSION_HELPERS.put("(MC: 1.14)", "v114_1.BukkitVersionHelperSpigot114_1"); + EXACT_VERSION_HELPERS.put("(MC: 1.13.2)", "v113_2.BukkitVersionHelperSpigot113_2"); + } + + private static BukkitVersionHelper loadVersionHelper(String classname) { + try { + return (BukkitVersionHelper) Class.forName(classname) + .getConstructor() + .newInstance(); + } catch (Exception x) { + Log.severe("Error loading " + classname, x); + return null; + } + } + + public static BukkitVersionHelper getHelper() { + if (BukkitVersionHelper.helper != null) { + return BukkitVersionHelper.helper; + } + + String v = Bukkit.getServer().getVersion(); + Log.info("version=" + v); + + if (v.contains("MCPC") || v.contains("BukkitForge")) { + logForgeUnsupported(v.contains("MCPC") ? "MCPC-Plus" : "BukkitForge"); + return null; + } + + if (Bukkit.getServer().getClass().getName().contains("GlowServer")) { + Log.info("Loading Glowstone support"); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.BukkitVersionHelperGlowstone"); + return BukkitVersionHelper.helper; + } + + for (Map.Entry entry : EXACT_VERSION_HELPERS.entrySet()) { + if (v.contains(entry.getKey())) { + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper." + entry.getValue()); + return BukkitVersionHelper.helper; } } + + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.BukkitVersionHelperCB"); return BukkitVersionHelper.helper; } + private static void logForgeUnsupported(String platform) { + Log.severe("*********************************************************************************"); + Log.severe("* " + platform + " is not supported via the Bukkit version of Dynmap."); + Log.severe("* Install the appropriate Forge version of Dynmap. *"); + Log.severe("* Add the DynmapCBBridge plugin to enable support for Dynmap-compatible plugins *"); + Log.severe("*********************************************************************************"); + } }