From 23c558744263b33ced023b6321881c104ffc4edd Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 19:30:39 +0800 Subject: [PATCH] Fix split packet transformer splitting into wrong parts, minus 10 more bytes for safety (#270) --- .../networking/transformers/SplitPacketTransformer.java | 4 ++-- .../java/dev/architectury/test/networking/TestModNet.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/dev/architectury/networking/transformers/SplitPacketTransformer.java b/common/src/main/java/dev/architectury/networking/transformers/SplitPacketTransformer.java index b5287478..7214b3d7 100644 --- a/common/src/main/java/dev/architectury/networking/transformers/SplitPacketTransformer.java +++ b/common/src/main/java/dev/architectury/networking/transformers/SplitPacketTransformer.java @@ -179,7 +179,7 @@ public class SplitPacketTransformer implements PacketTransformer { @Override public void outbound(NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf buf, TransformationSink sink) { - int maxSize = (side == NetworkManager.Side.C2S ? 32767 : 1048576) - 1 - 10; + int maxSize = (side == NetworkManager.Side.C2S ? 32767 : 1048576) - 1 - 20; if (buf.readableBytes() <= maxSize) { ByteBuf stateBuf = Unpooled.buffer(1); stateBuf.writeByte(ONLY); @@ -187,7 +187,7 @@ public class SplitPacketTransformer implements PacketTransformer { sink.accept(side, id, packetBuffer); } else { int partSize = maxSize - 4; - int parts = Math.round(buf.readableBytes() / (float) partSize); + int parts = (int) Math.ceil(buf.readableBytes() / (float) partSize); for (int i = 0; i < parts; i++) { FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); if (i == 0) { diff --git a/testmod-common/src/main/java/dev/architectury/test/networking/TestModNet.java b/testmod-common/src/main/java/dev/architectury/test/networking/TestModNet.java index 65a8a5d0..c65e551c 100644 --- a/testmod-common/src/main/java/dev/architectury/test/networking/TestModNet.java +++ b/testmod-common/src/main/java/dev/architectury/test/networking/TestModNet.java @@ -41,7 +41,7 @@ public interface TestModNet { // An example Server to Client message MessageType SYNC_DATA = NET.registerS2C("sync_data", SyncDataMessage::new); ResourceLocation BIG_DATA = new ResourceLocation(TestMod.MOD_ID, "big_data"); - String BIG_STRING = StringUtils.repeat('a', 60000); + String BIG_STRING = StringUtils.repeat('a', 100000); static void initialize() { NetworkManager.registerReceiver(NetworkManager.Side.C2S, BIG_DATA, Collections.singletonList(new SplitPacketTransformer()), (buf, context) -> {