From c26da546c4b227a87aaab3475f96fd266d9e81d5 Mon Sep 17 00:00:00 2001 From: oleg Date: Mon, 30 Mar 2026 18:56:24 +0300 Subject: [PATCH 1/2] v26 --- .github/workflows/build.yml | 4 +- pom.xml | 14 ++--- .../net/coreprotect/bukkit/BukkitAdapter.java | 6 ++- .../net/coreprotect/bukkit/Bukkit_v26.java | 11 ++++ .../net/coreprotect/config/ConfigHandler.java | 3 +- .../net/coreprotect/paper/PaperAdapter.java | 6 ++- .../java/net/coreprotect/paper/Paper_v26.java | 10 ++++ .../services/VersionCheckService.java | 51 ++++++++++++++++--- .../net/coreprotect/spigot/SpigotAdapter.java | 2 + 9 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 src/main/java/net/coreprotect/bukkit/Bukkit_v26.java create mode 100644 src/main/java/net/coreprotect/paper/Paper_v26.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 081507f94..c68fbaa8c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,10 +13,10 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 21 + - name: Set up JDK 25 uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - name: Cache Maven packages uses: actions/cache@v4 diff --git a/pom.xml b/pom.xml index bb0a96a5e..b408dde18 100755 --- a/pom.xml +++ b/pom.xml @@ -4,11 +4,11 @@ CoreProtect 23.1 - + development UTF-8 true - 11 - 11 + 25 + 25 @@ -28,8 +28,8 @@ maven-compiler-plugin 3.8.1 - 11 - 11 + 25 + 25 @@ -59,7 +59,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.6.1 package @@ -216,7 +216,7 @@ io.papermc.paper paper-api - 1.21.11-R0.1-SNAPSHOT + 26.1-R0.1-SNAPSHOT provided diff --git a/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java b/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java index dcd42baa4..03bfa2513 100644 --- a/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java +++ b/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java @@ -56,6 +56,7 @@ public class BukkitAdapter implements BukkitInterface { public static final int BUKKIT_V1_19 = 19; public static final int BUKKIT_V1_20 = 20; public static final int BUKKIT_V1_21 = 21; + public static final int BUKKIT_V26 = 26; /** * Initializes the appropriate Bukkit adapter based on the server version. @@ -82,9 +83,12 @@ public static void loadAdapter() { ADAPTER = new Bukkit_v1_20(); break; case BUKKIT_V1_21: - default: ADAPTER = new Bukkit_v1_21(); break; + case BUKKIT_V26: + default: + ADAPTER = new Bukkit_v26(); + break; } } diff --git a/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java b/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java new file mode 100644 index 000000000..a9f1a79c1 --- /dev/null +++ b/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java @@ -0,0 +1,11 @@ +package net.coreprotect.bukkit; + +/** + * Bukkit adapter for Minecraft 26.x. + * + *

26.1 keeps the feature surface CoreProtect uses from 1.21, so this adapter + * currently reuses the 1.21 implementation while version detection and adapter + * selection move to the new release-number format. + */ +public final class Bukkit_v26 extends Bukkit_v1_21 { +} diff --git a/src/main/java/net/coreprotect/config/ConfigHandler.java b/src/main/java/net/coreprotect/config/ConfigHandler.java index 0275d0d61..2db60518f 100644 --- a/src/main/java/net/coreprotect/config/ConfigHandler.java +++ b/src/main/java/net/coreprotect/config/ConfigHandler.java @@ -51,9 +51,10 @@ public enum CacheType { public static final String EDITION_NAME = VersionUtils.getPluginName(); public static final String COMMUNITY_EDITION = "Community Edition"; public static final String JAVA_VERSION = "11.0"; + public static final String JAVA_VERSION_26 = "25.0"; public static final String MINECRAFT_VERSION = "1.16"; public static final String PATCH_VERSION = "23.1"; - public static final String LATEST_VERSION = "1.21.11"; + public static final String LATEST_VERSION = "26.1"; public static String path = "plugins/CoreProtect/"; public static String sqlite = "database.db"; public static String host = "127.0.0.1"; diff --git a/src/main/java/net/coreprotect/paper/PaperAdapter.java b/src/main/java/net/coreprotect/paper/PaperAdapter.java index e9d00311f..6e1b6f3e4 100644 --- a/src/main/java/net/coreprotect/paper/PaperAdapter.java +++ b/src/main/java/net/coreprotect/paper/PaperAdapter.java @@ -27,6 +27,7 @@ public class PaperAdapter implements PaperInterface { public static final int PAPER_V1_19 = BukkitAdapter.BUKKIT_V1_19; public static final int PAPER_V1_20 = BukkitAdapter.BUKKIT_V1_20; public static final int PAPER_V1_21 = BukkitAdapter.BUKKIT_V1_21; + public static final int PAPER_V26 = BukkitAdapter.BUKKIT_V26; public static void loadAdapter() { int paperVersion = ConfigHandler.SERVER_VERSION; @@ -51,9 +52,12 @@ public static void loadAdapter() { break; case PAPER_V1_20: case PAPER_V1_21: - default: PaperAdapter.ADAPTER = new Paper_v1_20(); break; + case PAPER_V26: + default: + PaperAdapter.ADAPTER = new Paper_v26(); + break; } } diff --git a/src/main/java/net/coreprotect/paper/Paper_v26.java b/src/main/java/net/coreprotect/paper/Paper_v26.java new file mode 100644 index 000000000..805de86e2 --- /dev/null +++ b/src/main/java/net/coreprotect/paper/Paper_v26.java @@ -0,0 +1,10 @@ +package net.coreprotect.paper; + +/** + * Paper adapter for 26.x. + * + *

Paper 26.1 remains compatible with the Paper-specific APIs currently used + * by CoreProtect, so this adapter reuses the 1.20+ implementation path. + */ +public final class Paper_v26 extends Paper_v1_20 { +} diff --git a/src/main/java/net/coreprotect/services/VersionCheckService.java b/src/main/java/net/coreprotect/services/VersionCheckService.java index 68aeb64fc..6845b26a8 100644 --- a/src/main/java/net/coreprotect/services/VersionCheckService.java +++ b/src/main/java/net/coreprotect/services/VersionCheckService.java @@ -1,5 +1,8 @@ package net.coreprotect.services; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.bukkit.Bukkit; import net.coreprotect.config.ConfigHandler; @@ -14,6 +17,8 @@ */ public class VersionCheckService { + private static final Pattern MINECRAFT_VERSION_PATTERN = Pattern.compile("(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); + private VersionCheckService() { throw new IllegalStateException("Utility class"); } @@ -26,21 +31,24 @@ private VersionCheckService() { public static boolean performVersionChecks() { try { // Check Minecraft version compatibility - String[] bukkitVersion = Bukkit.getServer().getBukkitVersion().split("[-.]"); - if (VersionUtils.newVersion(bukkitVersion[0] + "." + bukkitVersion[1], ConfigHandler.MINECRAFT_VERSION)) { + String bukkitVersion = Bukkit.getServer().getBukkitVersion(); + String minecraftVersion = parseMinecraftVersion(bukkitVersion); + if (minecraftVersion == null || VersionUtils.newVersion(minecraftVersion, ConfigHandler.MINECRAFT_VERSION)) { Chat.console(Phrase.build(Phrase.VERSION_REQUIRED, "Minecraft", ConfigHandler.MINECRAFT_VERSION)); return false; } - if (VersionUtils.newVersion(ConfigHandler.LATEST_VERSION, bukkitVersion[0] + "." + bukkitVersion[1] + (bukkitVersion.length > 2 && bukkitVersion[2].matches("\\d+") ? "." + bukkitVersion[2] : "")) && VersionUtils.isCommunityEdition()) { - Chat.console(Phrase.build(Phrase.VERSION_INCOMPATIBLE, "Minecraft", bukkitVersion[0] + "." + bukkitVersion[1] + (bukkitVersion.length > 2 ? "." + bukkitVersion[2] : ""))); + if (VersionUtils.newVersion(ConfigHandler.LATEST_VERSION, minecraftVersion) && VersionUtils.isCommunityEdition()) { + Chat.console(Phrase.build(Phrase.VERSION_INCOMPATIBLE, "Minecraft", minecraftVersion)); return false; } + String requiredJavaVersion = parseCompatibilityVersion(minecraftVersion) >= 26 ? ConfigHandler.JAVA_VERSION_26 : ConfigHandler.JAVA_VERSION; + // Check Java version compatibility String[] javaVersion = (System.getProperty("java.version").replaceAll("[^0-9.]", "") + ".0").split("\\."); - if (VersionUtils.newVersion(javaVersion[0] + "." + javaVersion[1], ConfigHandler.JAVA_VERSION)) { - Chat.console(Phrase.build(Phrase.VERSION_REQUIRED, "Java", ConfigHandler.JAVA_VERSION)); + if (VersionUtils.newVersion(javaVersion[0] + "." + javaVersion[1], requiredJavaVersion)) { + Chat.console(Phrase.build(Phrase.VERSION_REQUIRED, "Java", requiredJavaVersion)); return false; } @@ -59,8 +67,8 @@ public static boolean performVersionChecks() { return false; } - // Store Minecraft server version for later use - ConfigHandler.SERVER_VERSION = Integer.parseInt(bukkitVersion[1]); + // Support both legacy 1.x versioning and the new year-based 26.x format. + ConfigHandler.SERVER_VERSION = parseCompatibilityVersion(minecraftVersion); } catch (Exception e) { e.printStackTrace(); @@ -69,4 +77,31 @@ public static boolean performVersionChecks() { return true; } + + private static String parseMinecraftVersion(String bukkitVersion) { + Matcher matcher = MINECRAFT_VERSION_PATTERN.matcher(bukkitVersion); + if (!matcher.find()) { + return null; + } + + StringBuilder version = new StringBuilder(matcher.group(1)).append('.').append(matcher.group(2)); + if (matcher.group(3) != null) { + version.append('.').append(matcher.group(3)); + } + + return version.toString(); + } + + private static int parseCompatibilityVersion(String minecraftVersion) { + String[] versionParts = minecraftVersion.split("\\."); + if (versionParts.length < 2) { + throw new IllegalArgumentException("Unsupported Minecraft version: " + minecraftVersion); + } + + if ("1".equals(versionParts[0])) { + return Integer.parseInt(versionParts[1]); + } + + return Integer.parseInt(versionParts[0]); + } } diff --git a/src/main/java/net/coreprotect/spigot/SpigotAdapter.java b/src/main/java/net/coreprotect/spigot/SpigotAdapter.java index 669bc0b6d..85b105b45 100644 --- a/src/main/java/net/coreprotect/spigot/SpigotAdapter.java +++ b/src/main/java/net/coreprotect/spigot/SpigotAdapter.java @@ -22,6 +22,7 @@ public class SpigotAdapter implements SpigotInterface { public static final int SPIGOT_V1_19 = BukkitAdapter.BUKKIT_V1_19; public static final int SPIGOT_V1_20 = BukkitAdapter.BUKKIT_V1_20; public static final int SPIGOT_V1_21 = BukkitAdapter.BUKKIT_V1_21; + public static final int SPIGOT_V26 = BukkitAdapter.BUKKIT_V26; public static void loadAdapter() { int spigotVersion = ConfigHandler.SERVER_VERSION; @@ -42,6 +43,7 @@ public static void loadAdapter() { case SPIGOT_V1_19: case SPIGOT_V1_20: case SPIGOT_V1_21: + case SPIGOT_V26: default: SpigotAdapter.ADAPTER = new SpigotHandler(); break; From 93b5c24871e074e496b293fdeafdcf13c0b73b14 Mon Sep 17 00:00:00 2001 From: oleg Date: Sat, 4 Apr 2026 19:17:25 +0300 Subject: [PATCH 2/2] Support the Paper 26.1.1 patch line --- pom.xml | 2 +- src/main/java/net/coreprotect/bukkit/Bukkit_v26.java | 2 +- src/main/java/net/coreprotect/config/ConfigHandler.java | 2 +- src/main/java/net/coreprotect/paper/Paper_v26.java | 2 +- src/main/java/net/coreprotect/services/VersionCheckService.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index b408dde18..43f5951cd 100755 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ io.papermc.paper paper-api - 26.1-R0.1-SNAPSHOT + 26.1.1.build.15-alpha provided diff --git a/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java b/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java index a9f1a79c1..1e54f191b 100644 --- a/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java +++ b/src/main/java/net/coreprotect/bukkit/Bukkit_v26.java @@ -3,7 +3,7 @@ /** * Bukkit adapter for Minecraft 26.x. * - *

26.1 keeps the feature surface CoreProtect uses from 1.21, so this adapter + *

26.1.x keeps the feature surface CoreProtect uses from 1.21, so this adapter * currently reuses the 1.21 implementation while version detection and adapter * selection move to the new release-number format. */ diff --git a/src/main/java/net/coreprotect/config/ConfigHandler.java b/src/main/java/net/coreprotect/config/ConfigHandler.java index 2db60518f..319e2cf73 100644 --- a/src/main/java/net/coreprotect/config/ConfigHandler.java +++ b/src/main/java/net/coreprotect/config/ConfigHandler.java @@ -54,7 +54,7 @@ public enum CacheType { public static final String JAVA_VERSION_26 = "25.0"; public static final String MINECRAFT_VERSION = "1.16"; public static final String PATCH_VERSION = "23.1"; - public static final String LATEST_VERSION = "26.1"; + public static final String LATEST_VERSION = "26.1.1"; public static String path = "plugins/CoreProtect/"; public static String sqlite = "database.db"; public static String host = "127.0.0.1"; diff --git a/src/main/java/net/coreprotect/paper/Paper_v26.java b/src/main/java/net/coreprotect/paper/Paper_v26.java index 805de86e2..95c3ff136 100644 --- a/src/main/java/net/coreprotect/paper/Paper_v26.java +++ b/src/main/java/net/coreprotect/paper/Paper_v26.java @@ -3,7 +3,7 @@ /** * Paper adapter for 26.x. * - *

Paper 26.1 remains compatible with the Paper-specific APIs currently used + *

Paper 26.1.x remains compatible with the Paper-specific APIs currently used * by CoreProtect, so this adapter reuses the 1.20+ implementation path. */ public final class Paper_v26 extends Paper_v1_20 { diff --git a/src/main/java/net/coreprotect/services/VersionCheckService.java b/src/main/java/net/coreprotect/services/VersionCheckService.java index 6845b26a8..3d048aebd 100644 --- a/src/main/java/net/coreprotect/services/VersionCheckService.java +++ b/src/main/java/net/coreprotect/services/VersionCheckService.java @@ -67,7 +67,7 @@ public static boolean performVersionChecks() { return false; } - // Support both legacy 1.x versioning and the new year-based 26.x format. + // Support both legacy 1.x versioning and the new year-based 26.x/26.1.x format. ConfigHandler.SERVER_VERSION = parseCompatibilityVersion(minecraftVersion); } catch (Exception e) {