From 2fc4c2faf9feb577a84969e0803454b9164caefb Mon Sep 17 00:00:00 2001 From: piexel Date: Sun, 11 Oct 2026 17:05:27 +0200 Subject: [PATCH] Skip other versions' NMS bindings when preloading classes on disable Older servers such as Paper 1.20.1 cannot read the Java 25 classes of the 26.x binding and logged a conversion error for each of them on shutdown. Bindings for other versions are never used, so they are not loaded at all. Model used: Claude Opus 5.5 --- core/src/main/java/com/volmit/iris/Iris.java | 11 ++++++++++- .../main/java/com/volmit/iris/util/io/JarScanner.java | 7 ++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 710e5f020..7b324e6d6 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -94,6 +94,7 @@ public class Iris extends VolmitPlugin implements Listener { private static VolmitSender sender; private static Thread shutdownHook; private static final String STUDIO_WORLDS_FOLDER = "iris"; + private static final String NMS_BINDINGS_PACKAGE = "com.volmit.iris.core.nms.v"; static { try { @@ -569,7 +570,15 @@ public class Iris extends VolmitPlugin implements Listener { postShutdown.forEach(Runnable::run); super.onDisable(); - J.attempt(new JarScanner(instance.getJarFile(), "", false)::scanAll); + J.attempt(() -> new JarScanner(instance.getJarFile(), "", false).scanAll(Iris::isForRunningServer)); + } + + private static boolean isForRunningServer(String className) { + // Older servers log errors for the bindings compiled for a newer Java version. + if (!className.startsWith(NMS_BINDINGS_PACKAGE)) { + return true; + } + return className.startsWith(INMS.get().getClass().getPackageName() + "."); } private static boolean isPaperServer() { diff --git a/core/src/main/java/com/volmit/iris/util/io/JarScanner.java b/core/src/main/java/com/volmit/iris/util/io/JarScanner.java index cf8aa3271..2c93eff31 100644 --- a/core/src/main/java/com/volmit/iris/util/io/JarScanner.java +++ b/core/src/main/java/com/volmit/iris/util/io/JarScanner.java @@ -24,6 +24,7 @@ import com.volmit.iris.util.collection.KSet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.function.Predicate; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -84,6 +85,10 @@ public class JarScanner { } public void scanAll() throws IOException { + scanAll(c -> true); + } + + public void scanAll(Predicate classFilter) throws IOException { classes.clear(); FileInputStream fin = new FileInputStream(jar); ZipInputStream zip = new ZipInputStream(fin); @@ -91,7 +96,7 @@ public class JarScanner { if (!entry.isDirectory() && entry.getName().endsWith(".class")) { String c = entry.getName().replaceAll("/", ".").replace(".class", ""); - if (c.startsWith(superPackage)) { + if (c.startsWith(superPackage) && classFilter.test(c)) { try { Class clazz = Class.forName(c); classes.add(clazz);