diff --git a/pom.xml b/pom.xml
index 1c9a571..2d2e3c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
tech.sbdevelopment
MapReflectionAPI
- 1.6.1
+ 1.6.2
jar
MapReflectionAPI
diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java
index b964af9..1c063b7 100644
--- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java
+++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java
@@ -344,7 +344,7 @@ public class MapWrapper extends AbstractMapWrapper {
ReflectionUtil.ListParam list = new ReflectionUtil.ListParam<>();
Object packet;
- if (supports(19, 2)) { //1.19.3
+ if (supports(19, 3)) { //1.19.3
Class> dataWatcherRecordClass = getNMSClass("network.syncher", "DataWatcher$b");
// Sadly not possible to use ReflectionUtil (in its current state), because of the Object parameter
Object dataWatcherItem;
diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java
index f1a04be..616d620 100644
--- a/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java
+++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java
@@ -47,6 +47,16 @@ public class PacketListener implements Listener {
private static final Class> packetPlayInSetCreativeSlotClass = getNMSClass("network.protocol.game", "PacketPlayInSetCreativeSlot");
private static final Class> vec3DClass = getNMSClass("world.phys", "Vec3D");
private static final Class> craftStackClass = getCraftClass("inventory.CraftItemStack");
+ private static final Class> playerCommonConnection;
+
+ static {
+ if (supports(20) && supportsPatch(2)) {
+ // The packet send method has been abstracted from ServerGamePacketListenerImpl to ServerCommonPacketListenerImpl in 1.20.2
+ playerCommonConnection = getNMSClass("server.network", "ServerCommonPacketListenerImpl");
+ } else {
+ playerCommonConnection = getNMSClass("server.network", "PlayerConnection");
+ }
+ }
@EventHandler
public void onJoin(PlayerJoinEvent e) {
@@ -116,7 +126,7 @@ public class PacketListener implements Listener {
} else if (packet.getClass().isAssignableFrom(packetPlayInSetCreativeSlotClass)) {
Object packetPlayInSetCreativeSlot = packetPlayInSetCreativeSlotClass.cast(packet);
- int slot = (int) ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, supports(19, 3) ? "a" : supports(13) ? "b" : "a"); //1.19.4 = a, 1.19.3 - 1.13 = b, 1.12 = a
+ int slot = (int) ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, supports(19, 4) ? "a" : supports(13) ? "b" : "a"); //1.19.4 = a, 1.19.3 - 1.13 = b, 1.12 = a
Object nmsStack = ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, supports(20, 2) ? "d" : supports(18) ? "c" : "getItemStack"); //1.20.2 = d, >= 1.18 = c, 1.17 = getItemStack
ItemStack craftStack = (ItemStack) ReflectionUtil.callMethod(craftStackClass, "asBukkitCopy", nmsStack);
@@ -144,13 +154,7 @@ public class PacketListener implements Listener {
private Channel getChannel(Player player) {
Object playerHandle = getHandle(player);
Object playerConnection = getDeclaredField(playerHandle, supports(20) ? "c" : supports(17) ? "b" : "playerConnection"); //1.20 = c, 1.17-1.19 = b, 1.16 = playerConnection
-
- Object networkManager;
- if (supports(20, 2))
- networkManager = getSuperDeclaredField(playerConnection, "c"); //1.20.2 = c
- else
- networkManager = getDeclaredField(playerConnection, supports(19, 3) ? "h" : supports(19) ? "b" : supports(17) ? "a" : "networkManager"); //1.20 & 1.19.4 = h, >= 1.19.3 = b, 1.18 = a, 1.16 = networkManager
-
+ Object networkManager = getDeclaredField(playerCommonConnection, playerConnection, supports(20, 2) ? "c" : supports(19, 4) ? "h" : supports(19) ? "b" : supports(17) ? "a" : "networkManager"); //1.20.2 = ServerCommonPacketListenerImpl#c, 1.20(.1) & 1.19.4 = h, >= 1.19.3 = b, 1.18 - 1.17 = a, 1.16 = networkManager
return (Channel) getDeclaredField(networkManager, supports(20, 2) ? "n" : supports(18) ? "m" : supports(17) ? "k" : "channel"); //1.20.2 = n, 1.20(.1), 1.19 & 1.18 = m, 1.17 = k, 1.16 = channel
}
@@ -164,4 +168,4 @@ public class PacketListener implements Listener {
return new Vector(x, y, z);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java
index 4fb2aea..a1cbe13 100644
--- a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java
+++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java
@@ -300,15 +300,15 @@ public class ReflectionUtil {
}
@Nullable
- public static Object getSuperDeclaredField(Object object, String field) {
+ public static Object getDeclaredField(Class> clazz, Object object, String field) {
try {
- String cacheKey = "SuperDeclaredField:" + object.getClass().getSuperclass().getName() + ":" + field;
+ String cacheKey = "DeclaredField:" + clazz.getName() + ":" + field;
if (fieldCache.containsKey(cacheKey)) {
Field cachedField = fieldCache.get(cacheKey);
return cachedField.get(object);
} else {
- Field f = object.getClass().getSuperclass().getDeclaredField(field);
+ Field f = clazz.getDeclaredField(field);
f.setAccessible(true);
fieldCache.put(cacheKey, f);
return f.get(object);
diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtils.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtils.java
index 1edf971..804a628 100644
--- a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtils.java
+++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtils.java
@@ -107,7 +107,7 @@ public final class ReflectionUtils {
public static final int MINOR_NUMBER;
/**
* The raw patch version number.
- * E.g. {@code v1_17_R1} to {@code 1}
+ * E.g. {@code 1.19.2} to {@code 2}
*
* I'd not recommend developers to support individual patches at all. You should always support the latest patch.
* For example, between v1.14.0, v1.14.1, v1.14.2, v1.14.3 and v1.14.4 you should only support v1.14.4
@@ -254,7 +254,7 @@ public final class ReflectionUtils {
v(20, "c").v(17, "b").orElse("playerConnection"), playerConnection);
getHandle = lookup.findVirtual(craftPlayer, "getHandle", MethodType.methodType(entityPlayer));
getHandleWorld = lookup.findVirtual(craftWorld, "getHandle", MethodType.methodType(worldServer));
- sendPacket = lookup.findVirtual(playerConnection,
+ sendPacket = lookup.findVirtual(playerCommonConnection,
v(20, 2, "b").v(18, "a").orElse("sendPacket"),
MethodType.methodType(void.class, getNMSClass("network.protocol", "Packet")));
} catch (NoSuchMethodException | NoSuchFieldException | IllegalAccessException ex) {