From e8ab59f0704d804efc08899211931ed8d778a8e6 Mon Sep 17 00:00:00 2001 From: SBDeveloper Date: Tue, 20 Dec 2022 20:00:52 +0100 Subject: [PATCH 1/3] Updated to 1.19.3 --- pom.xml | 2 +- .../mapreflectionapi/api/MapWrapper.java | 36 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 56eaa0f..ca7ec3f 100644 --- a/pom.xml +++ b/pom.xml @@ -188,7 +188,7 @@ org.spigotmc spigot-api - 1.19.2-R0.1-SNAPSHOT + 1.19.3-R0.1-SNAPSHOT provided diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java index aaf671c..6ae84d8 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java @@ -317,14 +317,6 @@ public class MapWrapper extends AbstractMapWrapper { private void sendItemFramePacket(Player player, int entityId, ItemStack stack, int mapId) { Object nmsStack = createCraftItemStack(stack, mapId); - Object dataWatcher = ReflectionUtil.callConstructorNull(dataWatcherClass, entityClass); - - Object packet = ReflectionUtil.callConstructor(entityMetadataPacketClass, - entityId, - dataWatcher, //dummy watcher! - true - ); - String dataWatcherObjectName; if (ReflectionUtil.supports(19)) { //1.19, same as 1.17 and 1.18(.2) dataWatcherObjectName = "ao"; @@ -340,10 +332,32 @@ public class MapWrapper extends AbstractMapWrapper { dataWatcherObjectName = "c"; } Object dataWatcherObject = ReflectionUtil.getDeclaredField(entityItemFrameClass, dataWatcherObjectName); - Object dataWatcherItem = ReflectionUtil.callFirstConstructor(dataWatcherItemClass, dataWatcherObject, nmsStack); + List list = new ArrayList<>(); - list.add(dataWatcherItem); - ReflectionUtil.setDeclaredField(packet, "b", list); + + Object packet; + if (ReflectionUtil.supports(19, 3)) { //1.19.3 + Object dataWatcherField = ReflectionUtil.getDeclaredField(dataWatcherClass, "b"); + Object dataWatcherItem = ReflectionUtil.callDeclaredMethod(dataWatcherField, "a", dataWatcherObject, nmsStack); + list.add(dataWatcherItem); + + packet = ReflectionUtil.callConstructor(entityMetadataPacketClass, + entityId, + list + ); + } else { //1.19.2 or lower + Object dataWatcher = ReflectionUtil.callConstructorNull(dataWatcherClass, entityClass); + + packet = ReflectionUtil.callConstructor(entityMetadataPacketClass, + entityId, + dataWatcher, //dummy watcher! + true + ); + + Object dataWatcherItem = ReflectionUtil.callFirstConstructor(dataWatcherItemClass, dataWatcherObject, nmsStack); + list.add(dataWatcherItem); + ReflectionUtil.setDeclaredField(packet, "b", list); + } ReflectionUtil.sendPacketSync(player, packet); } From 2735fbeb1cea154a4a8d04a23a15f459df291dbc Mon Sep 17 00:00:00 2001 From: SBDeveloper Date: Tue, 20 Dec 2022 20:44:14 +0100 Subject: [PATCH 2/3] Updated deployment to new repo --- README.md | 5 +++-- pom.xml | 33 +++------------------------------ 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index b32cf4c..3c4881d 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ First, include the API using Maven: ```xml - sbdevelopment-repo - https://repo.sbdevelopment.tech/repository/maven-releases/ + sbdevelopment-releases + SBDevelopment Repository + https://repo.sbdevelopment.tech/releases diff --git a/pom.xml b/pom.xml index ca7ec3f..c3b7699 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ tech.sbdevelopment MapReflectionAPI - 1.4.1 + 1.4.2 jar MapReflectionAPI @@ -38,8 +38,8 @@ - nexus-releases - https://repo.sbdevelopment.tech/repository/maven-releases/ + sbdevelopment-repo + https://repo.sbdevelopment.tech/releases @@ -86,33 +86,6 @@ - - org.apache.maven.plugins - maven-deploy-plugin - 3.0.0 - - true - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.13 - - - default-deploy - deploy - - deploy - - - - - nexus-releases - https://repo.sbdevelopment.tech/ - true - - org.projectlombok lombok-maven-plugin From d3badb5fd35524b6636bf0842c70a7cc187199a8 Mon Sep 17 00:00:00 2001 From: SBDeveloper Date: Thu, 22 Dec 2022 20:19:58 +0100 Subject: [PATCH 3/3] Fixed 1.19.3 support --- .../mapreflectionapi/api/MapSender.java | 6 ++-- .../mapreflectionapi/api/MapWrapper.java | 23 +++++++++++---- .../utils/ReflectionUtil.java | 28 +++++++++++++++---- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java index f5f3393..56fcaed 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java @@ -123,7 +123,7 @@ public class MapSender { id, //ID (byte) 0, //Scale, 0 = 1 block per pixel false, //Show icons - new ArrayList<>(), //Icons + new ReflectionUtil.CollectionParam<>(), //Icons updateData ); } else if (ReflectionUtil.supports(14)) { //1.16-1.14 @@ -132,7 +132,7 @@ public class MapSender { (byte) 0, //Scale, 0 = 1 block per pixel false, //Tracking position false, //Locked - new ArrayList<>(), //Icons + new ReflectionUtil.CollectionParam<>(), //Icons content.array, //Data content.minX, //X pos content.minY, //Y pos @@ -144,7 +144,7 @@ public class MapSender { id, //ID (byte) 0, //Scale, 0 = 1 block per pixel false, //??? - new ArrayList<>(), //Icons + new ReflectionUtil.CollectionParam<>(), //Icons content.array, //Data content.minX, //X pos content.minY, //Y pos diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java index 6ae84d8..d572ec4 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java @@ -31,7 +31,11 @@ import tech.sbdevelopment.mapreflectionapi.api.exceptions.MapLimitExceededExcept import tech.sbdevelopment.mapreflectionapi.managers.Configuration; import tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil; -import java.util.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; /** * A {@link MapWrapper} wraps one image. @@ -333,12 +337,21 @@ public class MapWrapper extends AbstractMapWrapper { } Object dataWatcherObject = ReflectionUtil.getDeclaredField(entityItemFrameClass, dataWatcherObjectName); - List list = new ArrayList<>(); + ReflectionUtil.ListParam list = new ReflectionUtil.ListParam<>(); Object packet; - if (ReflectionUtil.supports(19, 3)) { //1.19.3 - Object dataWatcherField = ReflectionUtil.getDeclaredField(dataWatcherClass, "b"); - Object dataWatcherItem = ReflectionUtil.callDeclaredMethod(dataWatcherField, "a", dataWatcherObject, nmsStack); + if (ReflectionUtil.supports(19, 2)) { //1.19.3 + Class dataWatcherRecordClass = ReflectionUtil.getNMSClass("network.syncher", "DataWatcher$b"); + // Sadly not possible to use ReflectionUtil (in its current state), because of the Object parameter + Object dataWatcherItem; + try { + Method m = dataWatcherRecordClass.getMethod("a", dataWatcherObject.getClass(), Object.class); + m.setAccessible(true); + dataWatcherItem = m.invoke(null, dataWatcherObject, nmsStack); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + ex.printStackTrace(); + return; + } list.add(dataWatcherItem); packet = ReflectionUtil.callConstructor(entityMetadataPacketClass, diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java index 19ee0d9..324a27f 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java @@ -31,10 +31,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Objects; +import java.util.*; import java.util.concurrent.CompletableFuture; /** @@ -200,6 +197,24 @@ public class ReflectionUtil { return VER >= major && VER_MINOR >= minor; } + /** + * Helper class converted to {@link List} + * + * @param The storage type + */ + public static class ListParam extends ArrayList { + + } + + /** + * Helper class converted to {@link Collection} + * + * @param The storage type + */ + public static class CollectionParam extends ArrayList { + + } + private static Class wrapperToPrimitive(Class clazz) { if (clazz == Boolean.class) return boolean.class; if (clazz == Integer.class) return int.class; @@ -210,7 +225,10 @@ public class ReflectionUtil { if (clazz == Byte.class) return byte.class; if (clazz == Void.class) return void.class; if (clazz == Character.class) return char.class; - if (clazz == ArrayList.class) return Collection.class; + if (clazz == CollectionParam.class) return Collection.class; + if (clazz == ListParam.class) return List.class; + if (clazz == ArrayList.class) return Collection.class; //LEGACY! + if (clazz == HashMap.class) return Map.class; return clazz; }