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 56eaa0f..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
@@ -188,7 +161,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/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 aaf671c..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.
@@ -317,14 +321,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 +336,41 @@ 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);
+
+ ReflectionUtil.ListParam list = new ReflectionUtil.ListParam<>();
+
+ Object packet;
+ 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,
+ 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);
}
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;
}