From 681b594c6969ad28d033b852252914a53eb13e07 Mon Sep 17 00:00:00 2001 From: Dereku Date: Sat, 7 Feb 2026 05:39:56 +0700 Subject: [PATCH 1/5] Packet.class: Removed unused PacketCounter --- src/net/minecraft/network/packets/Packet.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/net/minecraft/network/packets/Packet.java b/src/net/minecraft/network/packets/Packet.java index 1de665b..553d11e 100644 --- a/src/net/minecraft/network/packets/Packet.java +++ b/src/net/minecraft/network/packets/Packet.java @@ -81,16 +81,18 @@ public abstract class Packet { return null; } - PacketCounter var4 = (PacketCounter) packetStats.get(Integer.valueOf(var6)); - if (var4 == null) { - var4 = new PacketCounter((Empty1) null); - packetStats.put(Integer.valueOf(var6), var4); - } + // Patch start + //PacketCounter var4 = (PacketCounter) packetStats.get(Integer.valueOf(var6)); + //if (var4 == null) { + // var4 = new PacketCounter((Empty1) null); + // packetStats.put(Integer.valueOf(var6), var4); + //} - var4.addPacket(var3.getPacketSize()); - ++totalPacketsCount; - if (totalPacketsCount % 1000 == 0) { - } + //var4.addPacket(var3.getPacketSize()); + //++totalPacketsCount; + //if (totalPacketsCount % 1000 == 0) { + //} + // Patch end return var3; } From e7262162670c72dadf3b82703df7c099e3e4a9b8 Mon Sep 17 00:00:00 2001 From: Dereku Date: Sat, 7 Feb 2026 05:59:42 +0700 Subject: [PATCH 2/5] Network Reader/Writer Threads: Smaller sleep time --- .../minecraft/network/NetworkReaderThread.java | 15 ++++++++++----- .../minecraft/network/NetworkWriterThread.java | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/net/minecraft/network/NetworkReaderThread.java b/src/net/minecraft/network/NetworkReaderThread.java index 53b23cb..8471109 100644 --- a/src/net/minecraft/network/NetworkReaderThread.java +++ b/src/net/minecraft/network/NetworkReaderThread.java @@ -33,7 +33,10 @@ class NetworkReaderThread extends Thread { } try { - sleep(100L); + // Patch start + //sleep(100L); + sleep(20L); + // Patch end } catch (InterruptedException var15) { } } finally { @@ -46,9 +49,11 @@ class NetworkReaderThread extends Thread { } } - var1 = NetworkManager.threadSyncObject; - synchronized (var1) { - --NetworkManager.numReadThreads; - } + // Patch start + //var1 = NetworkManager.threadSyncObject; + //synchronized (var1) { + // --NetworkManager.numReadThreads; + //} + // Patch end } } diff --git a/src/net/minecraft/network/NetworkWriterThread.java b/src/net/minecraft/network/NetworkWriterThread.java index d9dcd0f..ec84687 100644 --- a/src/net/minecraft/network/NetworkWriterThread.java +++ b/src/net/minecraft/network/NetworkWriterThread.java @@ -30,7 +30,10 @@ class NetworkWriterThread extends Thread { } try { - sleep(100L); + // Patch start + //sleep(100L); + sleep(20L); + // Patch end } catch (InterruptedException var16) { } @@ -55,9 +58,11 @@ class NetworkWriterThread extends Thread { } } - var1 = NetworkManager.threadSyncObject; - synchronized (var1) { - --NetworkManager.numWriteThreads; - } + // Patch start + //var1 = NetworkManager.threadSyncObject; + //synchronized (var1) { + // --NetworkManager.numWriteThreads; + //} + // Patch end } } From e85a63e9a0a7956a95a6e8469275a34aaa4292f7 Mon Sep 17 00:00:00 2001 From: Dereku Date: Sat, 7 Feb 2026 07:23:23 +0700 Subject: [PATCH 3/5] Packet51MapChunk: Move chunk compression to the writer thread --- .../network/packets/Packet51MapChunk.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/net/minecraft/network/packets/Packet51MapChunk.java b/src/net/minecraft/network/packets/Packet51MapChunk.java index 942b3db..05f0d6c 100644 --- a/src/net/minecraft/network/packets/Packet51MapChunk.java +++ b/src/net/minecraft/network/packets/Packet51MapChunk.java @@ -3,11 +3,12 @@ package net.minecraft.network.packets; import net.minecraft.network.NetHandler; import net.minecraft.world.World; +import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.zip.DataFormatException; -import java.util.zip.Deflater; +import java.util.zip.DeflaterOutputStream; import java.util.zip.Inflater; public class Packet51MapChunk extends Packet { @@ -19,6 +20,9 @@ public class Packet51MapChunk extends Packet { public int zSize; public byte[] chunk; private int chunkSize; + // Patch start + public byte[] uncompressedChunk; + // Patch end public Packet51MapChunk() { this.isChunkDataPacket = true; @@ -32,17 +36,20 @@ public class Packet51MapChunk extends Packet { this.xSize = var4; this.ySize = var5; this.zSize = var6; - byte[] var8 = var7.getChunkData(var1, var2, var3, var4, var5, var6); - Deflater var9 = new Deflater(-1); + // Patch start + //byte[] var8 = var7.getChunkData(var1, var2, var3, var4, var5, var6); + //Deflater var9 = new Deflater(-1); - try { - var9.setInput(var8); - var9.finish(); - this.chunk = new byte[var4 * var5 * var6 * 5 / 2]; - this.chunkSize = var9.deflate(this.chunk); - } finally { - var9.end(); - } + //try { + // var9.setInput(var8); + // var9.finish(); + // this.chunk = new byte[var4 * var5 * var6 * 5 / 2]; + // this.chunkSize = var9.deflate(this.chunk); + //} finally { + // var9.end(); + //} + this.uncompressedChunk = var7.getChunkData(var1, var2, var3, var4, var5, var6); + // Patch end } @@ -71,6 +78,15 @@ public class Packet51MapChunk extends Packet { } public void writePacketData(DataOutputStream var1) throws IOException { + // Patch start + ByteArrayOutputStream compressed = new ByteArrayOutputStream(); + try (DeflaterOutputStream dos = new DeflaterOutputStream(compressed)) { + dos.write(this.uncompressedChunk); + } catch (IOException ignore) { + } + this.chunk = compressed.toByteArray(); + this.chunkSize = this.chunk.length; + // Patch end var1.writeInt(this.xPosition); var1.writeShort(this.yPosition); var1.writeInt(this.zPosition); From 10abac72b5f87778af83bf322e65261eb06f8132 Mon Sep 17 00:00:00 2001 From: Dereku Date: Sat, 7 Feb 2026 08:28:45 +0700 Subject: [PATCH 4/5] NetworkManager: Do not separate chunk packets and data packets (Avoids empty chunks on the client side) --- src/net/minecraft/network/NetworkManager.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/net/minecraft/network/NetworkManager.java b/src/net/minecraft/network/NetworkManager.java index e97416d..007f614 100644 --- a/src/net/minecraft/network/NetworkManager.java +++ b/src/net/minecraft/network/NetworkManager.java @@ -69,11 +69,13 @@ public class NetworkManager { Object var2 = this.sendQueueLock; synchronized (var2) { this.sendQueueByteLength += var1.getPacketSize() + 1; - if (var1.isChunkDataPacket) { - this.chunkDataPackets.add(var1); - } else { + // Patch start + //if (var1.isChunkDataPacket) { + // this.chunkDataPackets.add(var1); + //} else { this.dataPackets.add(var1); - } + //} + // Patch end } } From bbfc5b9e940a14c07e13956a9501a95ea0de5e6d Mon Sep 17 00:00:00 2001 From: Dereku Date: Sat, 7 Feb 2026 08:29:23 +0700 Subject: [PATCH 5/5] EntityPlayerMP: Faster chunk sending (And this avoids thousands of useless chunk light updates on the client side) --- src/net/minecraft/entity/EntityPlayerMP.java | 30 ++++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/net/minecraft/entity/EntityPlayerMP.java b/src/net/minecraft/entity/EntityPlayerMP.java index 689bf04..095fc89 100644 --- a/src/net/minecraft/entity/EntityPlayerMP.java +++ b/src/net/minecraft/entity/EntityPlayerMP.java @@ -151,16 +151,28 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } if (var1 && !this.loadedChunks.isEmpty()) { - ChunkCoordIntPair var7 = (ChunkCoordIntPair) this.loadedChunks.get(0); - if (var7 != null) { - boolean var8 = false; - if (this.playerNetServerHandler.getNumChunkDataPackets() < 4) { - var8 = true; - } + // Patch start + HashSet queue = new HashSet<>(); + for (int count = 0; !this.loadedChunks.isEmpty() && count < 9; count++) { + //ChunkCoordIntPair var7 = (ChunkCoordIntPair) this.loadedChunks.get(0); + ChunkCoordIntPair var7 = (ChunkCoordIntPair) this.loadedChunks.remove(0); + if (var7 != null) { + //boolean var8 = false; + //if (this.playerNetServerHandler.getNumChunkDataPackets() < 4) { + // var8 = true; + //} - if (var8) { - WorldServer var9 = this.mcServer.getWorldManager(this.dimension); - this.loadedChunks.remove(var7); + //if (var8) { + // WorldServer var9 = this.mcServer.getWorldManager(this.dimension); + // this.loadedChunks.remove(var7); + queue.add(var7); + } + } + + if (!queue.isEmpty()) { + WorldServer var9 = this.mcServer.getWorldManager(this.dimension); + for (ChunkCoordIntPair var7 : queue) { + // Patch end this.playerNetServerHandler.sendPacket(new Packet51MapChunk(var7.chunkXPos * 16, 0, var7.chunkZPos * 16, 16, 128, 16, var9)); List var5 = var9.getTileEntityList(var7.chunkXPos * 16, 0, var7.chunkZPos * 16, var7.chunkXPos * 16 + 16, 128, var7.chunkZPos * 16 + 16);