v1.6.2: More version fixes (1.20.2 and 1.19.2)
This commit is contained in:
parent
2af12469be
commit
293c239fb8
5 changed files with 20 additions and 16 deletions
2
pom.xml
2
pom.xml
|
@ -24,7 +24,7 @@
|
|||
|
||||
<groupId>tech.sbdevelopment</groupId>
|
||||
<artifactId>MapReflectionAPI</artifactId>
|
||||
<version>1.6.1</version>
|
||||
<version>1.6.2</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>MapReflectionAPI</name>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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}
|
||||
* <p>
|
||||
* 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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue