Yet another CraftBukkit pulled patch.

By: md_5 <md_5@live.com.au>
This commit is contained in:
Spigot
2013-04-16 18:36:22 +10:00
parent b1181168c6
commit b5080a172f
32 changed files with 74 additions and 137 deletions

View File

@@ -1,6 +1,6 @@
From 3d38587aa973e480cb8934c99d2f6911ce118151 Mon Sep 17 00:00:00 2001
From: Mike Primm <mike@primmhome.com>
Date: Sun, 23 Dec 2012 14:46:23 -0600
From 66e69212e40d4e2547d60dc3051c7d2271821e2b Mon Sep 17 00:00:00 2001
From: Mike Primm <mike@primmhome.com>
Date: Sun, 13 Jan 2013 03:49:07 -0800
Subject: [PATCH] Implement 'lightening' of NibbleArrays - only allocate
buffers when non-trivial value Saving from 40-45% of memory use by chunk
section data.
@@ -10,10 +10,10 @@ Finish up NibbleArray lightening work - use for Snapshots, reduce copies
Fix nibble handling with NBT - arrays aren't copied by NBTByteArray
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
index b9704bd..7a98822 100644
index 57f39c1..1e97aff 100644
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
@@ -225,15 +225,15 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader {
@@ -239,15 +239,15 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader {
nbttagcompound1.setByte("Y", (byte) (chunksection.d() >> 4 & 255));
nbttagcompound1.setByteArray("Blocks", chunksection.g());
if (chunksection.i() != null) {
@@ -35,7 +35,7 @@ index b9704bd..7a98822 100644
nbttaglist.add(nbttagcompound1);
diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java
index 03d511f..623399f 100644
index bac819f..da57d90 100644
--- a/src/main/java/net/minecraft/server/ChunkSection.java
+++ b/src/main/java/net/minecraft/server/ChunkSection.java
@@ -134,7 +134,8 @@ public class ChunkSection {
@@ -78,18 +78,21 @@ index 03d511f..623399f 100644
if (empty) {
return;
@@ -253,10 +259,8 @@ public class ChunkSection {
// Spigot start - validate/correct nibble array
private static final NibbleArray validateNibbleArray(NibbleArray na) {
- if ((na != null) && (na.a.length < 2048)) {
- NibbleArray newna = new NibbleArray(4096, 4);
- System.arraycopy(na.a, 0, newna.a, 0, na.a.length);
- na = newna;
+ if ((na != null) && (na.getByteLength() < 2048)) {
+ na.resizeArray(2048);
@@ -254,11 +260,11 @@ public class ChunkSection {
// CraftBukkit start - Validate array lengths
private NibbleArray validateNibbleArray(NibbleArray nibbleArray) {
- if (nibbleArray != null && nibbleArray.a.length < 2048) {
- byte[] newArray = new byte[2048];
- System.arraycopy(nibbleArray.a, 0, newArray, 0, ((nibbleArray.a.length > 2048) ? 2048 : nibbleArray.a.length));
- nibbleArray = new NibbleArray(newArray, 4);
+ // Spigot start - fix for more awesome nibble arrays
+ if (nibbleArray != null && nibbleArray.getByteLength() < 2048) {
+ nibbleArray.resizeArray(2048);
}
return na;
+ // Spigot end
return nibbleArray;
}
diff --git a/src/main/java/net/minecraft/server/NibbleArray.java b/src/main/java/net/minecraft/server/NibbleArray.java
index 5d75a54..c9bc20c 100644
@@ -246,6 +249,25 @@ index 5d75a54..c9bc20c 100644
int i1 = j << this.c | k << this.b | i;
int j1 = i1 >> 1;
int k1 = i1 & 1;
diff --git a/src/main/java/net/minecraft/server/OldChunkLoader.java b/src/main/java/net/minecraft/server/OldChunkLoader.java
index 53c1cb5..9a9e20f 100644
--- a/src/main/java/net/minecraft/server/OldChunkLoader.java
+++ b/src/main/java/net/minecraft/server/OldChunkLoader.java
@@ -94,9 +94,11 @@ public class OldChunkLoader {
nbttagcompound1.setByte("Y", (byte) (k & 255));
nbttagcompound1.setByteArray("Blocks", abyte);
- nbttagcompound1.setByteArray("Data", nibblearray.a);
- nbttagcompound1.setByteArray("SkyLight", nibblearray1.a);
- nbttagcompound1.setByteArray("BlockLight", nibblearray2.a);
+ // Spigot start - a -> getValueArray() accessor
+ nbttagcompound1.setByteArray("Data", nibblearray.getValueArray());
+ nbttagcompound1.setByteArray("SkyLight", nibblearray1.getValueArray());
+ nbttagcompound1.setByteArray("BlockLight", nibblearray2.getValueArray());
+ // Spigot end
nbttaglist.add(nbttagcompound1);
}
}
diff --git a/src/main/java/net/minecraft/server/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java
index 14a6245..ee179be 100644
--- a/src/main/java/net/minecraft/server/Packet51MapChunk.java