@@ -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
|
||||
|
||||
Reference in New Issue
Block a user