[Forge] Fix saving of CustomPayload packets
This commit is contained in:
@@ -307,6 +307,21 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
//$$ }
|
//$$ }
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
if (packet instanceof CustomPayloadS2CPacket) {
|
||||||
|
// Forge may read from this ByteBuf and/or release it during handling
|
||||||
|
// We want to save the full thing however, so we create a copy and save that one instead of the
|
||||||
|
// original one
|
||||||
|
// Note: This isn't an issue with vanilla MC because our saving code runs on the main thread
|
||||||
|
// shortly before the vanilla handling code does. Forge however does some stuff on the netty
|
||||||
|
// threads which leads to this race condition
|
||||||
|
packet = new CustomPayloadS2CPacket(
|
||||||
|
((CustomPayloadS2CPacket) packet).getChannel(),
|
||||||
|
new PacketByteBuf(((CustomPayloadS2CPacket) packet).getData().slice().retain())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
save(packet);
|
save(packet);
|
||||||
|
|
||||||
if (packet instanceof CustomPayloadS2CPacket) {
|
if (packet instanceof CustomPayloadS2CPacket) {
|
||||||
@@ -397,6 +412,12 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
byteBuf.readBytes(array);
|
byteBuf.readBytes(array);
|
||||||
|
|
||||||
byteBuf.release();
|
byteBuf.release();
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
if (packet instanceof CustomPayloadS2CPacket) {
|
||||||
|
((CustomPayloadS2CPacket) packet).getData().release();
|
||||||
|
}
|
||||||
|
//#endif
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user