Fix WrappedPacketInCustomPayload

This commit is contained in:
retrooper committed 2024-05-28 20:32:15 +02:00
1 parent 7ff578e1c6
commit a2e19f7020
2 files changed
+46 -22

No files matched your search

@@ -58,13 +58,11 @@ public class PacketEventsPlugin extends JavaPlugin {
ItemStack stack = new ItemStack(Material.STICK);
WrappedPacketOutSetSlot setSlot = new WrappedPacketOutSetSlot(0, 37, stack);
PacketEvents.get().getPlayerUtils().sendPacket(event.getPlayer(), setSlot);
}
else if (event.getPacketId() == PacketType.Play.Client.CUSTOM_PAYLOAD) {
} else if (event.getPacketId() == PacketType.Play.Client.CUSTOM_PAYLOAD) {
WrappedPacketInCustomPayload cp = new WrappedPacketInCustomPayload(event.getNMSPacket());
System.out.println("name: " + cp.getChannelName());
if (cp.getChannelName().contains("brand")) {
System.out.println("Data: " + ((new String(cp.getData(), StandardCharsets.UTF_8))));
}
String name = cp.getChannelName();
System.out.println("name play: " + name);
System.out.println("Data: " + ((new String(cp.getData(), StandardCharsets.UTF_8))));
}
}
@@ -72,10 +70,9 @@ public class PacketEventsPlugin extends JavaPlugin {
public void onPacketConfigReceive(PacketConfigReceiveEvent event) {
if (event.getPacketId() == PacketType.Play.Client.CUSTOM_PAYLOAD) {
WrappedPacketInCustomPayload cp = new WrappedPacketInCustomPayload(event.getNMSPacket());
System.out.println("name: " + cp.getChannelName());
if (cp.getChannelName().contains("brand")) {
System.out.println("Data: " + ((new String(cp.getData(), StandardCharsets.UTF_8))));
}
String name = cp.getChannelName();
System.out.println("name: " + name);
System.out.println("Data: " + ((new String(cp.getData(), StandardCharsets.UTF_8))));
}
}
@@ -87,8 +84,7 @@ public class PacketEventsPlugin extends JavaPlugin {
WrappedPacketOutEntityEffect eff = new WrappedPacketOutEntityEffect(event.getNMSPacket());
eff.setEffectId(eff.getEffectId());
System.out.println("eff: " + eff.getEffectId() + ", ampl: " + eff.getAmplifier() + ", dur:" + eff.getDuration());
}
else if (event.getPacketId() == PacketType.Play.Server.ENTITY_VELOCITY) {
} else if (event.getPacketId() == PacketType.Play.Server.ENTITY_VELOCITY) {
WrappedPacketOutEntityVelocity ev = new WrappedPacketOutEntityVelocity(event.getNMSPacket());
}
}
@@ -22,6 +22,7 @@ import io.github.retrooper.packetevents.PacketEvents;
import io.github.retrooper.packetevents.packettype.PacketTypeClasses;
import io.github.retrooper.packetevents.packetwrappers.NMSPacket;
import io.github.retrooper.packetevents.packetwrappers.WrappedPacket;
import io.github.retrooper.packetevents.utils.netty.bytebuf.ByteBufUtil;
import io.github.retrooper.packetevents.utils.nms.NMSUtils;
import io.github.retrooper.packetevents.utils.reflection.Reflection;
import io.github.retrooper.packetevents.utils.server.ServerVersion;
@@ -31,10 +32,11 @@ import java.lang.reflect.Method;
public final class WrappedPacketInCustomPayload extends WrappedPacket {
private static boolean strPresent, byteArrayPresent, customPacketPayloadPresent;
private static Class<?> CUSTOM_PACKET_PAYLOAD, BRAND_PAYLOAD;
private static Class<?> CUSTOM_PACKET_PAYLOAD, BRAND_PAYLOAD, DISCARDED_PAYLOAD;
private static Method CUSTOM_PACKET_PAYLOAD_MINECRAFT_KEY, CUSTOM_PACKET_PAYLOAD_PACKETDATASERIALIZER;
private static byte isVersion_1_17 = -1;
private static boolean isVersion_1_20_5;
private static boolean isVersion_1_20_6;
public WrappedPacketInCustomPayload(NMSPacket packet) {
super(packet);
@@ -51,8 +53,10 @@ public final class WrappedPacketInCustomPayload extends WrappedPacket {
CUSTOM_PACKET_PAYLOAD_PACKETDATASERIALIZER = Reflection.getMethod(CUSTOM_PACKET_PAYLOAD, 0, NMSUtils.packetDataSerializerClass);
}
isVersion_1_20_5 = version.isNewerThanOrEquals(ServerVersion.v_1_20_5);
isVersion_1_20_6 = version.isNewerThanOrEquals(ServerVersion.v_1_20_6);
if (isVersion_1_20_5) {
BRAND_PAYLOAD = NMSUtils.getNMClassWithoutException("network.protocol.common.custom.BrandPayload");
DISCARDED_PAYLOAD = NMSUtils.getNMClassWithoutException("network.protocol.common.custom.DiscardedPayload");
}
}
@@ -68,6 +72,18 @@ public final class WrappedPacketInCustomPayload extends WrappedPacket {
WrappedPacket reflectBrandPayload = new WrappedPacket(new NMSPacket(payload));
return reflectBrandPayload.readString(0);
}
else if (DISCARDED_PAYLOAD.isInstance(payload)) {
WrappedPacket reflectBrandPayload = new WrappedPacket(new NMSPacket(payload));
if (isVersion_1_20_6) {
return reflectBrandPayload.readMinecraftKey(0);
}
else {
return reflectBrandPayload.readString(0);
}
}
else {
return null;
}
}
else {
try {
@@ -105,16 +121,28 @@ public final class WrappedPacketInCustomPayload extends WrappedPacket {
public byte[] getData() {
if (customPacketPayloadPresent) {
Object payload = getModernPayloadObject();
Object buffer = PacketEvents.get().getByteBufUtil().buffer();
Object packetDataSerializer = NMSUtils.generatePacketDataSerializer(buffer);
try {
CUSTOM_PACKET_PAYLOAD_PACKETDATASERIALIZER.invoke(payload, packetDataSerializer);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
if (isVersion_1_20_6) {
if (DISCARDED_PAYLOAD.isInstance(payload)) {
WrappedPacket reflectDiscardedPayload = new WrappedPacket(new NMSPacket(payload));
Object buffer = reflectDiscardedPayload.readObject(0, NMSUtils.byteBufClass);
return PacketEvents.get().getByteBufUtil().getBytes(buffer);
}
else {
return null;
}
}
else {
Object buffer = PacketEvents.get().getByteBufUtil().buffer();
Object packetDataSerializer = NMSUtils.generatePacketDataSerializer(buffer);
try {
CUSTOM_PACKET_PAYLOAD_PACKETDATASERIALIZER.invoke(payload, packetDataSerializer);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
byte[] data = PacketEvents.get().getByteBufUtil().getBytes(buffer);
PacketEvents.get().getByteBufUtil().release(buffer);
return data;
}
byte[] data = PacketEvents.get().getByteBufUtil().getBytes(buffer);
PacketEvents.get().getByteBufUtil().release(buffer);
return data;
}
else if (byteArrayPresent) {
return readByteArray(0);