3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-12-16 03:20:07 +01:00
Paper/CraftBukkit-Patches/0013-Optimize-packet-used-to-unload-chunks-for-the-client.patch
Hudson acc7e2172b revert changes to disabled plugins and scheduler.
sorry for messy commit,doing via tablet on ssh
md_5
2013-04-03 02:20:29 -05:00

57 Zeilen
2.7 KiB
Diff

From 4c1d324eeeb423731b0f9ba3e36aefe4e7a39de4 Mon Sep 17 00:00:00 2001
From: Ammar Askar <ammar@ammaraskar.com>
Date: Fri, 18 Jan 2013 16:20:01 +0500
Subject: [PATCH] Optimize packet used to unload chunks for the client
At the moment telling a client to unload a chunk involves calling the entire chunk from memory, deflating it and then sending it through the pipes even though the client ignores it and based on the bitmap simply unloads the chunk, and to add the cherry on top, this is done on the main server thread.
---
.../net/minecraft/server/Packet51MapChunk.java | 13 +++++++++++++
.../java/net/minecraft/server/PlayerChunk.java | 2 +-
2 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/src/main/java/net/minecraft/server/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java
index ee179be..b51d90c 100644
--- a/src/main/java/net/minecraft/server/Packet51MapChunk.java
+++ b/src/main/java/net/minecraft/server/Packet51MapChunk.java
@@ -18,11 +18,24 @@ public class Packet51MapChunk extends Packet {
public boolean e;
private int size;
private static byte[] buildBuffer = new byte[196864];
+ private static final byte[] unloadSequence = new byte[]{0x78, (byte) 0x9C, 0x63, 0x64, 0x1C, (byte) 0xD9, 0x00, 0x00, (byte) 0x81, (byte) 0x80, 0x01, 0x01}; // Spigot
public Packet51MapChunk() {
this.lowPriority = true;
}
+ // Spigot start - add constructor for chunk removals for the client
+ public Packet51MapChunk(int x, int z) {
+ this.a = x;
+ this.b = z;
+ this.e = true;
+ this.c = 0;
+ this.d = 0;
+ this.size = unloadSequence.length;
+ this.buffer = unloadSequence;
+ }
+ // Spigot end
+
public Packet51MapChunk(Chunk chunk, boolean flag, int i) {
this.lowPriority = true;
this.a = chunk.x;
diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java
index 10a43b6..20f8e8a 100644
--- a/src/main/java/net/minecraft/server/PlayerChunk.java
+++ b/src/main/java/net/minecraft/server/PlayerChunk.java
@@ -52,7 +52,7 @@ class PlayerChunk {
public void b(EntityPlayer entityplayer) {
if (this.b.contains(entityplayer)) {
- entityplayer.playerConnection.sendPacket(new Packet51MapChunk(PlayerChunkMap.a(this.playerChunkMap).getChunkAt(this.location.x, this.location.z), true, 0));
+ entityplayer.playerConnection.sendPacket(new Packet51MapChunk(this.location.x, this.location.z)); // Spigot - remove chunk load call just to unload in favour of specialized constructor
this.b.remove(entityplayer);
entityplayer.chunkCoordIntPairQueue.remove(this.location);
if (this.b.isEmpty()) {
--
1.7.0.4