Skip to content

Commit f3f3ad0

Browse files
committed
Add reserialize packet option
1 parent 2f729d5 commit f3f3ad0

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

library/core/networking/src/main/java/org/quiltmc/qsl/networking/impl/NetworkingImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ public final class NetworkingImpl {
6666
*/
6767
public static final Identifier EARLY_REGISTRATION_CHANNEL_FABRIC = new Identifier("fabric-networking-api-v1", "early_registration");
6868

69+
/**
70+
* Forces reserialization of packets.
71+
*/
72+
// TODO: Remove for 1.20.5. This is done there already.
73+
public static final boolean RESERIALIZE_CUSTOM_PAYLOADS = Boolean.parseBoolean(System.getProperty("quilt.networking.reserialize_custom_payloads"));
74+
6975
public static void init(ModContainer mod) {
7076
// Login setup
7177
ServerLoginConnectionEvents.QUERY_START.register((handler, server, sender, synchronizer) -> {

library/core/networking/src/main/java/org/quiltmc/qsl/networking/mixin/CustomPayloadC2SPacketMixin.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.spongepowered.asm.mixin.Shadow;
2626
import org.spongepowered.asm.mixin.injection.At;
2727
import org.spongepowered.asm.mixin.injection.Inject;
28+
import org.spongepowered.asm.mixin.injection.ModifyArg;
2829
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2930
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
3031

@@ -34,6 +35,7 @@
3435
import net.minecraft.util.Identifier;
3536

3637
import org.quiltmc.qsl.networking.api.PacketByteBufs;
38+
import org.quiltmc.qsl.networking.impl.NetworkingImpl;
3739
import org.quiltmc.qsl.networking.impl.payload.PacketByteBufPayload;
3840

3941
@Mixin(CustomPayloadC2SPacket.class)
@@ -54,4 +56,15 @@ private static void inject(Identifier id, PacketByteBuf buf, CallbackInfoReturna
5456
cir.setReturnValue(new PacketByteBufPayload(id, copied));
5557
buf.skipBytes(buf.readableBytes());
5658
}
59+
60+
@ModifyArg(method = "apply(Lnet/minecraft/network/listener/ServerCommonPacketListener;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ServerCommonPacketListener;onCustomPayload(Lnet/minecraft/network/packet/c2s/common/CustomPayloadC2SPacket;)V"))
61+
public CustomPayloadC2SPacket reserialize(CustomPayloadC2SPacket packet) {
62+
if (NetworkingImpl.RESERIALIZE_CUSTOM_PAYLOADS) {
63+
PacketByteBuf buf = PacketByteBufs.create();
64+
packet.write(buf);
65+
return new CustomPayloadC2SPacket(buf);
66+
}
67+
68+
return packet;
69+
}
5770
}

library/core/networking/src/main/java/org/quiltmc/qsl/networking/mixin/CustomPayloadS2CPacketMixin.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,18 @@
2525
import org.spongepowered.asm.mixin.Shadow;
2626
import org.spongepowered.asm.mixin.injection.At;
2727
import org.spongepowered.asm.mixin.injection.Inject;
28+
import org.spongepowered.asm.mixin.injection.ModifyArg;
2829
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2930
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
3031

3132
import net.minecraft.network.PacketByteBuf;
33+
import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket;
3234
import net.minecraft.network.packet.payload.CustomPayload;
3335
import net.minecraft.network.packet.s2c.common.CustomPayloadS2CPacket;
3436
import net.minecraft.util.Identifier;
3537

3638
import org.quiltmc.qsl.networking.api.PacketByteBufs;
39+
import org.quiltmc.qsl.networking.impl.NetworkingImpl;
3740
import org.quiltmc.qsl.networking.impl.payload.PacketByteBufPayload;
3841

3942
@Mixin(CustomPayloadS2CPacket.class)
@@ -54,4 +57,15 @@ private static void inject(Identifier id, PacketByteBuf buf, CallbackInfoReturna
5457
cir.setReturnValue(new PacketByteBufPayload(id, copied));
5558
buf.skipBytes(buf.readableBytes());
5659
}
60+
61+
@ModifyArg(method = "apply(Lnet/minecraft/network/listener/ClientCommonPacketListener;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ClientCommonPacketListener;onCustomPayload(Lnet/minecraft/network/packet/s2c/common/CustomPayloadS2CPacket;)V"))
62+
public CustomPayloadS2CPacket reserialize(CustomPayloadS2CPacket packet) {
63+
if (NetworkingImpl.RESERIALIZE_CUSTOM_PAYLOADS) {
64+
PacketByteBuf buf = PacketByteBufs.create();
65+
packet.write(buf);
66+
return new CustomPayloadS2CPacket(buf);
67+
}
68+
69+
return packet;
70+
}
5771
}

0 commit comments

Comments
 (0)