From 2412ac11bbb8047c15a387457ad1b11b54313caa Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 26 Apr 2025 17:20:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(core):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=A3=80=E6=B5=8B=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 只要调用这个VersionHelper理论上就可以获取到版本不会出现npe --- .../craftengine/core/plugin/CraftEngine.java | 1 - .../craftengine/core/util/VersionHelper.java | 22 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index c17e81849..4ad572a53 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -83,7 +83,6 @@ public abstract class CraftEngine implements Plugin { protected CraftEngine(Consumer reloadEventDispatcher) { instance = this; this.reloadEventDispatcher = reloadEventDispatcher; - VersionHelper.init(serverVersion()); } public static CraftEngine instance() { diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java index e937a18ac..be8105062 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java @@ -1,6 +1,28 @@ package net.momirealms.craftengine.core.util; +import java.lang.reflect.Field; + +import static java.util.Objects.requireNonNull; + public class VersionHelper { + private static final Class clazz$DetectedVersion = requireNonNull( + ReflectionUtils.getClazz("net.minecraft.DetectedVersion", "net.minecraft.MinecraftVersion")); + private static final Class clazz$WorldVersion = requireNonNull( + ReflectionUtils.getClazz("net.minecraft.WorldVersion")); + public static final Field field$DetectedVersion$BUILT_IN = requireNonNull( + ReflectionUtils.getDeclaredField(clazz$DetectedVersion, clazz$WorldVersion, 0)); + public static final Field field$DetectedVersion$name = requireNonNull( + ReflectionUtils.getDeclaredField(clazz$DetectedVersion, String.class, 1)); + static { + try { + Object detectedVersion = field$DetectedVersion$BUILT_IN.get(null); + String name = (String) field$DetectedVersion$name.get(detectedVersion); + init(name); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + private static float version; private static boolean mojmap; private static boolean folia; From 9b20aa78196343d02e289d4fa7dfd0deef6f80c9 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 26 Apr 2025 17:25:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(VersionHelper):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E7=89=88=E6=9C=AC=E8=BE=85=E5=8A=A9=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 全部final --- .../craftengine/core/util/VersionHelper.java | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java index be8105062..ee2b17ae4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java @@ -13,83 +13,83 @@ public class VersionHelper { ReflectionUtils.getDeclaredField(clazz$DetectedVersion, clazz$WorldVersion, 0)); public static final Field field$DetectedVersion$name = requireNonNull( ReflectionUtils.getDeclaredField(clazz$DetectedVersion, String.class, 1)); + + private static final float version; + private static final boolean mojmap; + private static final boolean folia; + private static final boolean paper; + + private static final boolean v1_20; + private static final boolean v1_20_1; + private static final boolean v1_20_2; + private static final boolean v1_20_3; + private static final boolean v1_20_4; + private static final boolean v1_20_5; + private static final boolean v1_20_6; + private static final boolean v1_21; + private static final boolean v1_21_1; + private static final boolean v1_21_2; + private static final boolean v1_21_3; + private static final boolean v1_21_4; + private static final boolean v1_21_5; + static { try { Object detectedVersion = field$DetectedVersion$BUILT_IN.get(null); String name = (String) field$DetectedVersion$name.get(detectedVersion); - init(name); + String[] split = name.split("\\."); + version = Float.parseFloat(split[1] + "." + (split.length == 3 ? split[2] : "0")); + mojmap = checkMojMap(); + folia = checkFolia(); + paper = checkPaper(); + v1_20 = version >= 20f; + v1_20_1 = version >= 20.1f; + v1_20_2 = version >= 20.2f; + v1_20_3 = version >= 20.3f; + v1_20_4 = version >= 20.4f; + v1_20_5 = version >= 20.5f; + v1_20_6 = version >= 20.6f; + v1_21 = version >= 21f; + v1_21_1 = version >= 21.1f; + v1_21_2 = version >= 21.2f; + v1_21_3 = version >= 21.3f; + v1_21_4 = version >= 21.4f; + v1_21_5 = version >= 21.5f; } catch (ReflectiveOperationException e) { throw new RuntimeException(e); } } - private static float version; - private static boolean mojmap; - private static boolean folia; - private static boolean paper; - - private static boolean v1_20; - private static boolean v1_20_1; - private static boolean v1_20_2; - private static boolean v1_20_3; - private static boolean v1_20_4; - private static boolean v1_20_5; - private static boolean v1_20_6; - private static boolean v1_21; - private static boolean v1_21_1; - private static boolean v1_21_2; - private static boolean v1_21_3; - private static boolean v1_21_4; - private static boolean v1_21_5; - - public static void init(String serverVersion) { - String[] split = serverVersion.split("\\."); - version = Float.parseFloat(split[1] + "." + (split.length == 3 ? split[2] : "0")); - checkMojMap(); - checkFolia(); - checkPaper(); - v1_20 = version >= 20f; - v1_20_1 = version >= 20.1f; - v1_20_2 = version >= 20.2f; - v1_20_3 = version >= 20.3f; - v1_20_4 = version >= 20.4f; - v1_20_5 = version >= 20.5f; - v1_20_6 = version >= 20.6f; - v1_21 = version >= 21f; - v1_21_1 = version >= 21.1f; - v1_21_2 = version >= 21.2f; - v1_21_3 = version >= 21.3f; - v1_21_4 = version >= 21.4f; - v1_21_5 = version >= 21.5f; - } - public static float version() { return version; } - private static void checkMojMap() { + private static boolean checkMojMap() { // Check if the server is Mojmap try { Class.forName("net.minecraft.network.protocol.game.ClientboundBossEventPacket"); - mojmap = true; + return true; } catch (ClassNotFoundException ignored) { } + return false; } - private static void checkFolia() { + private static boolean checkFolia() { try { Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); - folia = true; + return true; } catch (ClassNotFoundException ignored) { } + return false; } - private static void checkPaper() { + private static boolean checkPaper() { try { Class.forName("io.papermc.paper.adventure.PaperAdventure"); - paper = true; + return true; } catch (ClassNotFoundException ignored) { } + return false; } public static boolean isFolia() {