From 14a6c330d29f541138c72a55032042a600f36284 Mon Sep 17 00:00:00 2001 From: SBDeveloper Date: Thu, 27 Mar 2025 19:55:31 +0100 Subject: [PATCH] v1.6.6: 1.21.5 support (#50) Reviewed-on: https://git.sbdevelopment.tech/SBDevelopment/MapReflectionAPI/pulls/50 Co-authored-by: SBDeveloper Co-committed-by: SBDeveloper --- pom.xml | 16 ++++++++++------ .../mapreflectionapi/api/MapSender.java | 6 +++--- .../mapreflectionapi/api/MapWrapper.java | 10 ++++------ .../mapreflectionapi/api/MultiMapWrapper.java | 8 ++------ .../listeners/PacketListener.java | 10 +++------- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/pom.xml b/pom.xml index 3bb09ab..d830bee 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ tech.sbdevelopment MapReflectionAPI - 1.6.4 + 1.6.6 jar MapReflectionAPI @@ -48,7 +48,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 11 @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.11.1 + 3.11.2 11 ${maven.lombok.delombok-target} @@ -166,13 +166,17 @@ dmulloy2-repo https://repo.dmulloy2.net/repository/public/ + + jitpack.io + https://jitpack.io + org.spigotmc spigot-api - 1.21-R0.1-SNAPSHOT + 1.21.5-R0.1-SNAPSHOT provided @@ -190,7 +194,7 @@ com.github.cryptomorin XSeries - 11.3.0 + 13.1.0 @@ -203,7 +207,7 @@ io.netty netty-transport - 4.1.114.Final + 4.1.118.Final provided diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java index 9e46c98..b43f148 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java @@ -86,8 +86,8 @@ public class MapSender { } private static final Class packetPlayOutMapClass = getNMSClass("network.protocol.game", "PacketPlayOutMap"); - private static final Class worldMapData = supports(17) ? getNMSClass("world.level.saveddata.maps", "WorldMap$b") : null; - private static final Class mapId = supports(21) ? getNMSClass("world.level.saveddata.maps", "MapId") : null; + private static final Class worldMapData = supports(17) ? getNMSClass("world.level.saveddata.maps", supports(21, 2) ? "WorldMap$c" : "WorldMap$b") : null; //1.21.2+ uses WorldMap$c, 1.17+ uses WorldMap$b + private static final Class mapIdClazz = supports(21) ? getNMSClass("world.level.saveddata.maps", "MapId") : null; /** * Send a map to a player @@ -124,7 +124,7 @@ public class MapSender { content.array //Data ); - Object mapId = ReflectionUtil.callConstructor(getNMSClass("world.level.saveddata.maps", "MapId"), id); + Object mapId = ReflectionUtil.callConstructor(mapIdClazz, id); packet = ReflectionUtil.callConstructor(packetPlayOutMapClass, mapId, //ID diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java index 534728c..c2b6edd 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java @@ -69,8 +69,6 @@ public class MapWrapper extends AbstractMapWrapper { private static final Class entityMetadataPacketClass = getNMSClass("network.protocol.game", "PacketPlayOutEntityMetadata"); private static final Class entityItemFrameClass = getNMSClass("world.entity.decoration", "EntityItemFrame"); private static final Class dataWatcherItemClass = getNMSClass("network.syncher", "DataWatcher$Item"); - private static final Class minecraftKeyClass = getNMSClass("resources", "MinecraftKey"); - private static final Class builtInRegistriesClass = getNMSClass("core.registries", "BuiltInRegistries"); protected MapController controller = new MapController() { private final Map viewers = new HashMap<>(); @@ -169,8 +167,8 @@ public class MapWrapper extends AbstractMapWrapper { String inventoryMenuName; if (supports(21)) { - //1.21 = cc - inventoryMenuName = "cc"; + //1.21.5 = bQ, 1.21 - 1.21.4 = cc + inventoryMenuName = supports(21, 4) ? "bQ" : "cc"; } else if (supports(20)) { //1.20.5 = cb, 1.20.2 - 1.20.4 = bR, 1.20(.1) = bQ inventoryMenuName = supports(20, 4) ? "cb" : supports(20, 2) ? "bR" : "bQ"; @@ -295,7 +293,7 @@ public class MapWrapper extends AbstractMapWrapper { //1.20.5 uses new NBT compound system if (supports(20, 4)) { - Object mapIdComponent = ReflectionUtil.getDeclaredField(getNMSClass("core.component", "DataComponents"), "B"); + Object mapIdComponent = ReflectionUtil.getDeclaredField(getNMSClass("core.component", "DataComponents"), supports(21, 4) ? "M" : supports(21, 2) ? "L" : "B"); //1.21.2+ uses L, otherwise B Object mapId1 = ReflectionUtil.callConstructor(getNMSClass("world.level.saveddata.maps", "MapId"), mapId); // Use generic reflection because of generics @@ -330,7 +328,7 @@ public class MapWrapper extends AbstractMapWrapper { String dataWatcherObjectName; if (supports(21)) { //1.21 - dataWatcherObjectName = "f"; + dataWatcherObjectName = supports(21, 2) ? "e" : "f"; //1.21.2+ = e, 1.21(.1) = f } else if (supports(19, 3)) { //1.19.3 and 1.20(.1) dataWatcherObjectName = "g"; } else if (supports(19)) { //1.19-1.19.2 diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MultiMapWrapper.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MultiMapWrapper.java index 795a2be..be6efd7 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MultiMapWrapper.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MultiMapWrapper.java @@ -64,10 +64,8 @@ public class MultiMapWrapper extends AbstractMapWrapper { * Creates a new {@link MultiMapWrapper} from the given image. * * @param imageMatrix The image matrix to wrap - * @deprecated Use {@link #MultiMapWrapper(ArrayImage, int, int)} instead, this method is meant for internal use only. */ - @Deprecated(since = "1.6", forRemoval = true) - public MultiMapWrapper(ArrayImage[][] imageMatrix) { + protected MultiMapWrapper(ArrayImage[][] imageMatrix) { wrapperMatrix = new MapWrapper[imageMatrix.length][imageMatrix[0].length]; for (int row = 0; row < imageMatrix.length; row++) { @@ -85,10 +83,8 @@ public class MultiMapWrapper extends AbstractMapWrapper { * Creates a new {@link MultiMapWrapper} from the given image. * * @param imageMatrix The image matrix to wrap - * @deprecated Use {@link #MultiMapWrapper(BufferedImage, int, int)} instead, this method is meant for internal use only. */ - @Deprecated(since = "1.6", forRemoval = true) - public MultiMapWrapper(BufferedImage[][] imageMatrix) { + protected MultiMapWrapper(BufferedImage[][] imageMatrix) { wrapperMatrix = new MapWrapper[imageMatrix.length][imageMatrix[0].length]; for (int row = 0; row < imageMatrix.length; row++) { diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java index ec3daf2..eef5b61 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java @@ -30,19 +30,15 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import sun.misc.Unsafe; import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI; import tech.sbdevelopment.mapreflectionapi.api.events.CreativeInventoryMapUpdateEvent; import tech.sbdevelopment.mapreflectionapi.api.events.MapCancelEvent; import tech.sbdevelopment.mapreflectionapi.api.events.MapInteractEvent; import tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.concurrent.TimeUnit; import static com.cryptomorin.xseries.reflection.minecraft.MinecraftConnection.getConnection; -import static com.cryptomorin.xseries.reflection.minecraft.MinecraftConnection.getHandle; import static tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil.*; import static com.cryptomorin.xseries.reflection.XReflection.*; @@ -207,9 +203,9 @@ public class PacketListener implements Listener { if (!(vec3d.getClass().isAssignableFrom(vec3DClass))) return new Vector(0, 0, 0); Object vec3dNMS = vec3DClass.cast(vec3d); - double x = (double) getDeclaredField(vec3dNMS, supports(19) ? "c" : supports(17) ? "b" : "x"); //1.19 = c, 1.18 = b, 1.16 = x - double y = (double) getDeclaredField(vec3dNMS, supports(19) ? "d" : supports(17) ? "c" : "y"); //1.19 = d, 1.18 = c, 1.16 = y - double z = (double) getDeclaredField(vec3dNMS, supports(19) ? "e" : supports(17) ? "d" : "z"); //1.19 = e, 1.18 = d, 1.16 = z + double x = (double) getDeclaredField(vec3dNMS, supports(21, 2) ? "d" : supports(19) ? "c" : supports(17) ? "b" : "x"); //1.21.2+ = d, 1.19 = c, 1.18 = b, 1.16 = x + double y = (double) getDeclaredField(vec3dNMS, supports(21, 2) ? "e" : supports(19) ? "d" : supports(17) ? "c" : "y"); //1.21.2+ = e, 1.19 = d, 1.18 = c, 1.16 = y + double z = (double) getDeclaredField(vec3dNMS, supports(21, 2) ? "f" : supports(19) ? "e" : supports(17) ? "d" : "z"); //1.21.2+ = f, 1.19 = e, 1.18 = d, 1.16 = z return new Vector(x, y, z); }