From b310a57b643bbeb697a983819c41abe239efe93a Mon Sep 17 00:00:00 2001 From: Michael Primm Date: Sun, 20 Aug 2023 14:38:38 -0500 Subject: [PATCH] Shift old spigot/paper support to dynamic load to handle pedantic Paper loader --- DynmapCore/build.gradle | 2 + bukkit-helper-113-2/build.gradle | 2 + bukkit-helper-114-1/build.gradle | 2 + bukkit-helper-115/build.gradle | 2 + bukkit-helper-116-2/build.gradle | 2 + bukkit-helper-116-3/build.gradle | 2 + bukkit-helper-116-4/build.gradle | 2 + bukkit-helper-116/build.gradle | 2 + .../org.eclipse.buildship.core.prefs | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 2 +- bukkit-helper/build.gradle | 2 + dynmap-api/build.gradle | 2 + .../forge_1_18_2/ForgeMapChunkCache.java | 28 +++++++++ spigot/build.gradle | 2 + .../main/java/org/dynmap/bukkit/Helper.java | 62 +++++++++---------- 15 files changed, 81 insertions(+), 35 deletions(-) diff --git a/DynmapCore/build.gradle b/DynmapCore/build.gradle index 1828a41b..5d731e32 100644 --- a/DynmapCore/build.gradle +++ b/DynmapCore/build.gradle @@ -8,6 +8,8 @@ eclipse { } } +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':DynmapCoreAPI') implementation 'javax.servlet:javax.servlet-api:3.1' diff --git a/bukkit-helper-113-2/build.gradle b/bukkit-helper-113-2/build.gradle index 2b8a16f3..c15ea7a2 100644 --- a/bukkit-helper-113-2/build.gradle +++ b/bukkit-helper-113-2/build.gradle @@ -8,6 +8,8 @@ eclipse { description = 'bukkit-helper-1.13.2' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper-114-1/build.gradle b/bukkit-helper-114-1/build.gradle index 0560b82d..2b3f7f24 100644 --- a/bukkit-helper-114-1/build.gradle +++ b/bukkit-helper-114-1/build.gradle @@ -6,6 +6,8 @@ eclipse { description = 'bukkit-helper-1.14.1' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper-115/build.gradle b/bukkit-helper-115/build.gradle index 7b0075f9..1cafc4a3 100644 --- a/bukkit-helper-115/build.gradle +++ b/bukkit-helper-115/build.gradle @@ -6,6 +6,8 @@ eclipse { description = 'bukkit-helper-1.15' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper-116-2/build.gradle b/bukkit-helper-116-2/build.gradle index 43779510..8f610250 100644 --- a/bukkit-helper-116-2/build.gradle +++ b/bukkit-helper-116-2/build.gradle @@ -6,6 +6,8 @@ eclipse { description = 'bukkit-helper-1.16.2' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper-116-3/build.gradle b/bukkit-helper-116-3/build.gradle index 3d553290..9a7dcf19 100644 --- a/bukkit-helper-116-3/build.gradle +++ b/bukkit-helper-116-3/build.gradle @@ -6,6 +6,8 @@ eclipse { description = 'bukkit-helper-1.16.3' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper-116-4/build.gradle b/bukkit-helper-116-4/build.gradle index 3a11a19e..6a0df89b 100644 --- a/bukkit-helper-116-4/build.gradle +++ b/bukkit-helper-116-4/build.gradle @@ -6,6 +6,8 @@ eclipse { description = 'bukkit-helper-1.16.4' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper-116/build.gradle b/bukkit-helper-116/build.gradle index 3f963948..c3e81f89 100644 --- a/bukkit-helper-116/build.gradle +++ b/bukkit-helper-116/build.gradle @@ -6,6 +6,8 @@ eclipse { description = 'bukkit-helper-1.16' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':bukkit-helper') implementation project(':dynmap-api') diff --git a/bukkit-helper/.settings/org.eclipse.buildship.core.prefs b/bukkit-helper/.settings/org.eclipse.buildship.core.prefs index 24ef279f..310c7e29 100644 --- a/bukkit-helper/.settings/org.eclipse.buildship.core.prefs +++ b/bukkit-helper/.settings/org.eclipse.buildship.core.prefs @@ -2,7 +2,7 @@ arguments= auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(6.3)) -connection.project.dir=.. +connection.project.dir=../bukkit-helper-119-4 eclipse.preferences.version=1 gradle.user.home= java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home diff --git a/bukkit-helper/.settings/org.eclipse.jdt.core.prefs b/bukkit-helper/.settings/org.eclipse.jdt.core.prefs index 119203f5..6f9f9f89 100644 --- a/bukkit-helper/.settings/org.eclipse.jdt.core.prefs +++ b/bukkit-helper/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,5 @@ # -#Tue Jun 20 20:08:06 CDT 2023 +#Sat Aug 19 16:59:43 CDT 2023 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.nullReference=warning eclipse.preferences.version=1 diff --git a/bukkit-helper/build.gradle b/bukkit-helper/build.gradle index 615fb2c8..9263aef6 100644 --- a/bukkit-helper/build.gradle +++ b/bukkit-helper/build.gradle @@ -8,6 +8,8 @@ eclipse { description = 'bukkit-helper' +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation project(':dynmap-api') implementation project(path: ':DynmapCore', configuration: 'shadow') diff --git a/dynmap-api/build.gradle b/dynmap-api/build.gradle index a61c1c06..23304f68 100644 --- a/dynmap-api/build.gradle +++ b/dynmap-api/build.gradle @@ -8,6 +8,8 @@ eclipse { description = "dynmap-api" +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { compileOnly group: 'org.bukkit', name: 'bukkit', version:'1.7.10-R0.1-SNAPSHOT' compileOnly project(":DynmapCoreAPI") diff --git a/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java b/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java index 4db3eac8..1ccf265f 100644 --- a/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java +++ b/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java @@ -1,5 +1,6 @@ package org.dynmap.forge_1_18_2; +import java.util.HashMap; import java.util.List; import net.minecraft.world.level.biome.Biome; @@ -10,6 +11,7 @@ import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; +import org.dynmap.utils.TileFlags; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerChunkCache; @@ -65,6 +67,8 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { super.setChunks(dw, chunks); } + private static HashMap tmap = new HashMap(); + private CompoundTag readChunk(int x, int z) { try { CompoundTag rslt = cps.chunkMap.read(new ChunkPos(x, z)); @@ -82,6 +86,30 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { rslt = null; } } + if (rslt != null) { + int version = rslt.getInt("DataVersion"); + if (version < 2975) { + boolean doIt = false; + synchronized(tmap) { + TileFlags tf = tmap.get(dw.getName()); + if (tf == null) { + tf = new TileFlags(); + tmap.put(dw.getName(), tf); + } + if (!tf.getFlag(x, z)) { + tf.setFlag(x, z, true); + doIt = true; + } + } + if (doIt) { + ChunkPos pos = new ChunkPos(x, z); + CompoundTag newrec = cps.chunkMap.readChunk(pos); + if (rslt != null) { + cps.chunkMap.write(pos, newrec.copy()); + } + } + } + } // Log.info(String.format("loadChunk(%d,%d)=%s", x, z, (rslt != null) ? // rslt.toString() : "null")); return rslt; diff --git a/spigot/build.gradle b/spigot/build.gradle index dbf08623..9c2129f6 100644 --- a/spigot/build.gradle +++ b/spigot/build.gradle @@ -16,6 +16,8 @@ repositories { } } +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. + dependencies { implementation('org.bukkit:bukkit:1.10.2-R0.1-SNAPSHOT') { transitive = false } compileOnly('com.nijikokun.bukkit:Permissions:3.1.6') { transitive = false } diff --git a/spigot/src/main/java/org/dynmap/bukkit/Helper.java b/spigot/src/main/java/org/dynmap/bukkit/Helper.java index c38868df..99eb9252 100644 --- a/spigot/src/main/java/org/dynmap/bukkit/Helper.java +++ b/spigot/src/main/java/org/dynmap/bukkit/Helper.java @@ -1,27 +1,23 @@ package org.dynmap.bukkit; +import java.lang.reflect.Constructor; + import org.bukkit.Bukkit; import org.dynmap.Log; import org.dynmap.bukkit.helper.BukkitVersionHelper; -import org.dynmap.bukkit.helper.BukkitVersionHelperCB; -import org.dynmap.bukkit.helper.BukkitVersionHelperGlowstone; -import org.dynmap.bukkit.helper.v113_2.BukkitVersionHelperSpigot113_2; -import org.dynmap.bukkit.helper.v114_1.BukkitVersionHelperSpigot114_1; -import org.dynmap.bukkit.helper.v115.BukkitVersionHelperSpigot115; -import org.dynmap.bukkit.helper.v116.BukkitVersionHelperSpigot116; -import org.dynmap.bukkit.helper.v116_2.BukkitVersionHelperSpigot116_2; -import org.dynmap.bukkit.helper.v116_3.BukkitVersionHelperSpigot116_3; -import org.dynmap.bukkit.helper.v116_4.BukkitVersionHelperSpigot116_4; -import org.dynmap.bukkit.helper.v117.BukkitVersionHelperSpigot117; -import org.dynmap.bukkit.helper.v118.BukkitVersionHelperSpigot118; -import org.dynmap.bukkit.helper.v118_2.BukkitVersionHelperSpigot118_2; -import org.dynmap.bukkit.helper.v119.BukkitVersionHelperSpigot119; -import org.dynmap.bukkit.helper.v119_3.BukkitVersionHelperSpigot119_3; -import org.dynmap.bukkit.helper.v119_4.BukkitVersionHelperSpigot119_4; -import org.dynmap.bukkit.helper.v120.BukkitVersionHelperSpigot120; public class Helper { + 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(); @@ -42,57 +38,57 @@ public class Helper { } else if(Bukkit.getServer().getClass().getName().contains("GlowServer")) { Log.info("Loading Glowstone support"); - BukkitVersionHelper.helper = new BukkitVersionHelperGlowstone(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.BukkitVersionHelperGlowstone"); } else if (v.contains("(MC: 1.20")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot120(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v120.BukkitVersionHelperSpigot120"); } else if (v.contains("(MC: 1.19)") || v.contains("(MC: 1.19.1)") || v.contains("(MC: 1.19.2)")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot119(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v119.BukkitVersionHelperSpigot119"); } else if (v.contains("(MC: 1.19.3)")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot119_3(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v119_3.BukkitVersionHelperSpigot119_3"); } else if (v.contains("(MC: 1.19.")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot119_4(); + 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 = new BukkitVersionHelperSpigot118(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v118.BukkitVersionHelperSpigot118"); } else if (v.contains("(MC: 1.18")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot118_2(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v118_2.BukkitVersionHelperSpigot118_2"); } else if (v.contains("(MC: 1.17")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot117(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v117.BukkitVersionHelperSpigot117"); } else if (v.contains("(MC: 1.16.1")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot116(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116.BukkitVersionHelperSpigot116"); } else if (v.contains("(MC: 1.16.2)")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot116_2(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116_2.BukkitVersionHelperSpigot116_2"); } else if (v.contains("(MC: 1.16.3)")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot116_3(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116_3.BukkitVersionHelperSpigot116_3"); } else if (v.contains("(MC: 1.16.")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot116_4(); + 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 = new BukkitVersionHelperSpigot116(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v116.BukkitVersionHelperSpigot116"); } else if (v.contains("(MC: 1.15)") || v.contains("(MC: 1.15.")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot115(); + 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 = new BukkitVersionHelperSpigot114_1(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v114_1.BukkitVersionHelperSpigot114_1"); } else if (v.contains("(MC: 1.13.2)")) { - BukkitVersionHelper.helper = new BukkitVersionHelperSpigot113_2(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.v113_2.BukkitVersionHelperSpigot113_2"); } else { - BukkitVersionHelper.helper = new BukkitVersionHelperCB(); + BukkitVersionHelper.helper = loadVersionHelper("org.dynmap.bukkit.helper.BukkitVersionHelperCB"); } } return BukkitVersionHelper.helper;