From 408ec91769f773987eb6c3c357611e2eae2c142a Mon Sep 17 00:00:00 2001 From: timelordm1 Date: Sun, 17 May 2026 17:44:02 +0200 Subject: [PATCH] Fix version parsing for modern server versions --- .gitignore | 3 +- .../sulphate/chatcolor2/main/ChatColor.java | 17 +++++-- .../chatcolor2/utils/CompatabilityUtils.java | 48 +++++++++++++++---- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 82c1d36..2276d19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ target/ *.iml dependency-reduced-pom.xml -.idea/ \ No newline at end of file +.idea/ +.DS_Store diff --git a/src/main/java/com/sulphate/chatcolor2/main/ChatColor.java b/src/main/java/com/sulphate/chatcolor2/main/ChatColor.java index 1e1cac3..88fc5b2 100644 --- a/src/main/java/com/sulphate/chatcolor2/main/ChatColor.java +++ b/src/main/java/com/sulphate/chatcolor2/main/ChatColor.java @@ -132,11 +132,22 @@ public void onEnable() { @Override public void onDisable() { - guiManager.closeOpenGuis(); - playerDataStore.shutdown(); + if (guiManager != null) { + guiManager.closeOpenGuis(); + } + + if (playerDataStore != null) { + playerDataStore.shutdown(); + } + plugin = null; - console.sendMessage(M.PREFIX + M.SHUTDOWN.replace("[version]", getDescription().getVersion())); + if (M != null) { + console.sendMessage(M.PREFIX + M.SHUTDOWN.replace("[version]", getDescription().getVersion())); + } + else { + console.sendMessage(GeneralUtils.colourise("&b[ChatColor] &eChatColor 2 Version &b" + getDescription().getVersion() + " &ehas been &cdisabled&e.")); + } } private void setupObjects() { diff --git a/src/main/java/com/sulphate/chatcolor2/utils/CompatabilityUtils.java b/src/main/java/com/sulphate/chatcolor2/utils/CompatabilityUtils.java index 7390318..b1fe22b 100644 --- a/src/main/java/com/sulphate/chatcolor2/utils/CompatabilityUtils.java +++ b/src/main/java/com/sulphate/chatcolor2/utils/CompatabilityUtils.java @@ -5,10 +5,14 @@ import org.bukkit.inventory.ItemStack; import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; // Utils for managing cross-api-version compatability. public class CompatabilityUtils { + private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+(?:\\.\\d+)+)"); + private static boolean isMaterialLegacy; private static boolean isHexLegacy; private static HashMap blockColourToDataMap; @@ -19,14 +23,7 @@ private CompatabilityUtils() { } public static void init() { - // Parse minor version to check for hex compatability. - String version = Bukkit.getBukkitVersion(); - version = version.substring(0, version.indexOf('-')); - - int dotIndex = version.indexOf('.'); - float minorVersion = Float.parseFloat(version.substring(dotIndex + 1)); - - isHexLegacy = minorVersion < 16; + isHexLegacy = isHexLegacyVersion(Bukkit.getBukkitVersion()); isMaterialLegacy = Material.getMaterial("INK_SAC") == null; blockColourToDataMap = new HashMap<>(); @@ -43,6 +40,41 @@ public static void init() { } } + private static boolean isHexLegacyVersion(String version) { + int[] versionParts = parseVersionParts(version); + + if (versionParts.length < 2) { + return false; + } + + return versionParts[0] == 1 && versionParts[1] < 16; + } + + private static int[] parseVersionParts(String version) { + if (version == null) { + return new int[0]; + } + + Matcher matcher = VERSION_PATTERN.matcher(version); + if (!matcher.find()) { + return new int[0]; + } + + String[] rawParts = matcher.group(1).split("\\."); + int[] versionParts = new int[rawParts.length]; + + for (int i = 0; i < rawParts.length; i++) { + try { + versionParts[i] = Integer.parseInt(rawParts[i]); + } + catch (NumberFormatException ex) { + return new int[0]; + } + } + + return versionParts; + } + public static ItemStack getColouredItem(String materialName) { if (!isMaterialLegacy) { return new ItemStack(Material.getMaterial(materialName), 1);