Updated Upstream (CraftBukkit/Spigot)
Doesn't compile yet. CraftBukkit Changes: 90d6905b Repackage NMS 69cf961d Repackage patches Spigot Changes: 79d53c28 Repackage NMS
This commit is contained in:
@@ -8,103 +8,124 @@ an object pool for these.
|
||||
|
||||
Uses lots of advanced new capabilities of the Paper codebase :)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
||||
diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkRegionLoader {
|
||||
}
|
||||
|
||||
if (nibblearray != null && !nibblearray.c()) {
|
||||
- nbttagcompound2.setByteArray("BlockLight", nibblearray.asBytes());
|
||||
+ nbttagcompound2.setByteArray("BlockLight", nibblearray.asBytesPoolSafe().clone()); // Paper
|
||||
}
|
||||
|
||||
if (nibblearray1 != null && !nibblearray1.c()) {
|
||||
- nbttagcompound2.setByteArray("SkyLight", nibblearray1.asBytes());
|
||||
+ nbttagcompound2.setByteArray("SkyLight", nibblearray1.asBytesPoolSafe().clone()); // Paper
|
||||
}
|
||||
|
||||
nbttaglist.add(nbttagcompound2);
|
||||
diff --git a/src/main/java/net/minecraft/server/LightEngineStorage.java b/src/main/java/net/minecraft/server/LightEngineStorage.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/LightEngineStorage.java
|
||||
+++ b/src/main/java/net/minecraft/server/LightEngineStorage.java
|
||||
@@ -0,0 +0,0 @@ public abstract class LightEngineStorage<M extends LightEngineStorageArray<M>> e
|
||||
protected NibbleArray j(long i) {
|
||||
NibbleArray nibblearray = (NibbleArray) this.i.get(i);
|
||||
|
||||
- return nibblearray != null ? nibblearray : new NibbleArray();
|
||||
+ return nibblearray != null ? nibblearray : new NibbleArray().markPoolSafe(); // Paper
|
||||
}
|
||||
|
||||
protected void a(LightEngineLayer<?, ?> lightenginelayer, long i) {
|
||||
@@ -0,0 +0,0 @@ public abstract class LightEngineStorage<M extends LightEngineStorageArray<M>> e
|
||||
|
||||
protected void a(long i, @Nullable NibbleArray nibblearray, boolean flag) {
|
||||
if (nibblearray != null) {
|
||||
- this.i.put(i, nibblearray);
|
||||
+ NibbleArray remove = this.i.put(i, nibblearray); if (remove != null && remove.cleaner != null) remove.cleaner.run(); // Paper - clean up when removed
|
||||
if (!flag) {
|
||||
this.n.add(i);
|
||||
}
|
||||
} else {
|
||||
- this.i.remove(i);
|
||||
+ NibbleArray remove = this.i.remove(i); if (remove != null && remove.cleaner != null) remove.cleaner.run(); // Paper - clean up when removed
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/LightEngineStorageArray.java b/src/main/java/net/minecraft/server/LightEngineStorageArray.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/LightEngineStorageArray.java
|
||||
+++ b/src/main/java/net/minecraft/server/LightEngineStorageArray.java
|
||||
@@ -0,0 +0,0 @@ public abstract class LightEngineStorageArray<M extends LightEngineStorageArray<
|
||||
|
||||
public void a(long i) {
|
||||
if (this.isVisible) { throw new IllegalStateException("writing to visible data"); } // Paper - avoid copying light data
|
||||
- this.data.queueUpdate(i, ((NibbleArray) this.data.getUpdating(i)).b()); // Paper - avoid copying light data
|
||||
+ NibbleArray updating = this.data.getUpdating(i); // Paper - pool nibbles
|
||||
+ this.data.queueUpdate(i, new NibbleArray().markPoolSafe(updating.getCloneIfSet())); // Paper - avoid copying light data - pool safe clone
|
||||
+ if (updating.cleaner != null) MCUtil.scheduleTask(2, updating.cleaner, "Light Engine Release"); // Paper - delay clean incase anything holding ref was still using it
|
||||
this.c();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/LightEngineStorageSky.java b/src/main/java/net/minecraft/server/LightEngineStorageSky.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/LightEngineStorageSky.java
|
||||
+++ b/src/main/java/net/minecraft/server/LightEngineStorageSky.java
|
||||
@@ -0,0 +0,0 @@ public class LightEngineStorageSky extends LightEngineStorage<LightEngineStorage
|
||||
j = SectionPosition.a(j, EnumDirection.UP);
|
||||
}
|
||||
|
||||
- return new NibbleArray((new NibbleArrayFlat(nibblearray1, 0)).asBytes());
|
||||
+ return new NibbleArray().markPoolSafe(new NibbleArrayFlat(nibblearray1, 0).asBytes()); // Paper - mark pool use as safe (no auto cleaner)
|
||||
} else {
|
||||
- return new NibbleArray();
|
||||
+ return new NibbleArray().markPoolSafe(); // Paper - mark pool use as safe (no auto cleaner)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class LightEngineStorageSky extends LightEngineStorage<LightEngineStorage
|
||||
((LightEngineStorageSky.a) this.f).a(i);
|
||||
}
|
||||
|
||||
- Arrays.fill(this.a(i, true).asBytes(), (byte) -1);
|
||||
+ Arrays.fill(this.a(i, true).asBytesPoolSafe(), (byte) -1); // Paper
|
||||
k = SectionPosition.c(SectionPosition.b(i));
|
||||
l = SectionPosition.c(SectionPosition.c(i));
|
||||
int i1 = SectionPosition.c(SectionPosition.d(i));
|
||||
diff --git a/src/main/java/net/minecraft/server/NibbleArray.java b/src/main/java/net/minecraft/server/NibbleArray.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/NibbleArray.java
|
||||
+++ b/src/main/java/net/minecraft/server/NibbleArray.java
|
||||
--- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java
|
||||
+++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
package net.minecraft.network.protocol.game;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
+import io.netty.channel.ChannelFuture; // Paper
|
||||
+
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
private List<byte[]> h;
|
||||
private boolean i;
|
||||
|
||||
+ // Paper start
|
||||
+ java.lang.Runnable cleaner1;
|
||||
+ java.lang.Runnable cleaner2;
|
||||
+ java.util.concurrent.atomic.AtomicInteger remainingSends = new java.util.concurrent.atomic.AtomicInteger(0);
|
||||
+
|
||||
+ @Override
|
||||
+ public void onPacketDispatch(EntityPlayer player) {
|
||||
+ remainingSends.incrementAndGet();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void onPacketDispatchFinish(EntityPlayer player, ChannelFuture future) {
|
||||
+ if (remainingSends.decrementAndGet() <= 0) {
|
||||
+ // incase of any race conditions, schedule this delayed
|
||||
+ MCUtil.scheduleTask(5, () -> {
|
||||
+ if (remainingSends.get() == 0) {
|
||||
+ cleaner1.run();
|
||||
+ cleaner2.run();
|
||||
+ }
|
||||
+ }, "Light Packet Release");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean hasFinishListener() {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ // Paper end
|
||||
public PacketPlayOutLightUpdate() {}
|
||||
|
||||
public PacketPlayOutLightUpdate(ChunkCoordIntPair chunkcoordintpair, LightEngine lightengine, boolean flag) {
|
||||
this.a = chunkcoordintpair.x;
|
||||
this.b = chunkcoordintpair.z;
|
||||
this.i = flag;
|
||||
- this.g = Lists.newArrayList();
|
||||
- this.h = Lists.newArrayList();
|
||||
+ this.g = Lists.newArrayList();cleaner1 = MCUtil.registerListCleaner(this, this.g, NibbleArray::releaseBytes); // Paper
|
||||
+ this.h = Lists.newArrayList();cleaner2 = MCUtil.registerListCleaner(this, this.h, NibbleArray::releaseBytes); // Paper
|
||||
|
||||
for (int i = 0; i < 18; ++i) {
|
||||
NibbleArray nibblearray = lightengine.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, -1 + i));
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
this.e |= 1 << i;
|
||||
} else {
|
||||
this.c |= 1 << i;
|
||||
- this.g.add(nibblearray.asBytes().clone());
|
||||
+ this.g.add(nibblearray.getCloneIfSet()); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
this.f |= 1 << i;
|
||||
} else {
|
||||
this.d |= 1 << i;
|
||||
- this.h.add(nibblearray1.asBytes().clone());
|
||||
+ this.h.add(nibblearray1.getCloneIfSet()); // Paper
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
this.i = flag;
|
||||
this.c = i;
|
||||
this.d = j;
|
||||
- this.g = Lists.newArrayList();
|
||||
- this.h = Lists.newArrayList();
|
||||
+ this.g = Lists.newArrayList();cleaner1 = MCUtil.registerListCleaner(this, this.g, NibbleArray::releaseBytes); // Paper
|
||||
+ this.h = Lists.newArrayList();cleaner2 = MCUtil.registerListCleaner(this, this.h, NibbleArray::releaseBytes); // Paper
|
||||
|
||||
for (int k = 0; k < 18; ++k) {
|
||||
NibbleArray nibblearray;
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
if ((this.c & 1 << k) != 0) {
|
||||
nibblearray = lightengine.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, -1 + k));
|
||||
if (nibblearray != null && !nibblearray.c()) {
|
||||
- this.g.add(nibblearray.asBytes().clone());
|
||||
+ this.g.add(nibblearray.getCloneIfSet()); // Paper
|
||||
} else {
|
||||
this.c &= ~(1 << k);
|
||||
if (nibblearray != null) {
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
if ((this.d & 1 << k) != 0) {
|
||||
nibblearray = lightengine.a(EnumSkyBlock.BLOCK).a(SectionPosition.a(chunkcoordintpair, -1 + k));
|
||||
if (nibblearray != null && !nibblearray.c()) {
|
||||
- this.h.add(nibblearray.asBytes().clone());
|
||||
+ this.h.add(nibblearray.getCloneIfSet()); // Paper
|
||||
} else {
|
||||
this.d &= ~(1 << k);
|
||||
if (nibblearray != null) {
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java b/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.world.level.chunk;
|
||||
|
||||
+import com.destroystokyo.paper.util.pooled.PooledObjects; // Paper
|
||||
+
|
||||
+import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraft.SystemUtils;
|
||||
|
||||
public class NibbleArray {
|
||||
|
||||
@@ -224,10 +245,96 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
diff --git a/src/main/java/net/minecraft/server/NibbleArrayFlat.java b/src/main/java/net/minecraft/server/NibbleArrayFlat.java
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkRegionLoader.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkRegionLoader.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/NibbleArrayFlat.java
|
||||
+++ b/src/main/java/net/minecraft/server/NibbleArrayFlat.java
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkRegionLoader.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkRegionLoader.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkRegionLoader {
|
||||
}
|
||||
|
||||
if (nibblearray != null && !nibblearray.c()) {
|
||||
- nbttagcompound2.setByteArray("BlockLight", nibblearray.asBytes());
|
||||
+ nbttagcompound2.setByteArray("BlockLight", nibblearray.asBytesPoolSafe().clone()); // Paper
|
||||
}
|
||||
|
||||
if (nibblearray1 != null && !nibblearray1.c()) {
|
||||
- nbttagcompound2.setByteArray("SkyLight", nibblearray1.asBytes());
|
||||
+ nbttagcompound2.setByteArray("SkyLight", nibblearray1.asBytesPoolSafe().clone()); // Paper
|
||||
}
|
||||
|
||||
nbttaglist.add(nbttagcompound2);
|
||||
diff --git a/src/main/java/net/minecraft/world/level/lighting/LightEngineStorage.java b/src/main/java/net/minecraft/world/level/lighting/LightEngineStorage.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/lighting/LightEngineStorage.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/lighting/LightEngineStorage.java
|
||||
@@ -0,0 +0,0 @@ public abstract class LightEngineStorage<M extends LightEngineStorageArray<M>> e
|
||||
protected NibbleArray j(long i) {
|
||||
NibbleArray nibblearray = (NibbleArray) this.i.get(i);
|
||||
|
||||
- return nibblearray != null ? nibblearray : new NibbleArray();
|
||||
+ return nibblearray != null ? nibblearray : new NibbleArray().markPoolSafe(); // Paper
|
||||
}
|
||||
|
||||
protected void a(LightEngineLayer<?, ?> lightenginelayer, long i) {
|
||||
@@ -0,0 +0,0 @@ public abstract class LightEngineStorage<M extends LightEngineStorageArray<M>> e
|
||||
|
||||
protected void a(long i, @Nullable NibbleArray nibblearray, boolean flag) {
|
||||
if (nibblearray != null) {
|
||||
- this.i.put(i, nibblearray);
|
||||
+ NibbleArray remove = this.i.put(i, nibblearray); if (remove != null && remove.cleaner != null) remove.cleaner.run(); // Paper - clean up when removed
|
||||
if (!flag) {
|
||||
this.n.add(i);
|
||||
}
|
||||
} else {
|
||||
- this.i.remove(i);
|
||||
+ NibbleArray remove = this.i.remove(i); if (remove != null && remove.cleaner != null) remove.cleaner.run(); // Paper - clean up when removed
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageArray.java b/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageArray.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageArray.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageArray.java
|
||||
@@ -0,0 +0,0 @@ public abstract class LightEngineStorageArray<M extends LightEngineStorageArray<
|
||||
|
||||
public void a(long i) {
|
||||
if (this.isVisible) { throw new IllegalStateException("writing to visible data"); } // Paper - avoid copying light data
|
||||
- this.data.queueUpdate(i, ((NibbleArray) this.data.getUpdating(i)).b()); // Paper - avoid copying light data
|
||||
+ NibbleArray updating = this.data.getUpdating(i); // Paper - pool nibbles
|
||||
+ this.data.queueUpdate(i, new NibbleArray().markPoolSafe(updating.getCloneIfSet())); // Paper - avoid copying light data - pool safe clone
|
||||
+ if (updating.cleaner != null) MCUtil.scheduleTask(2, updating.cleaner, "Light Engine Release"); // Paper - delay clean incase anything holding ref was still using it
|
||||
this.c();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageSky.java b/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageSky.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageSky.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/lighting/LightEngineStorageSky.java
|
||||
@@ -0,0 +0,0 @@ public class LightEngineStorageSky extends LightEngineStorage<LightEngineStorage
|
||||
j = SectionPosition.a(j, EnumDirection.UP);
|
||||
}
|
||||
|
||||
- return new NibbleArray((new NibbleArrayFlat(nibblearray1, 0)).asBytes());
|
||||
+ return new NibbleArray().markPoolSafe(new NibbleArrayFlat(nibblearray1, 0).asBytes()); // Paper - mark pool use as safe (no auto cleaner)
|
||||
} else {
|
||||
- return new NibbleArray();
|
||||
+ return new NibbleArray().markPoolSafe(); // Paper - mark pool use as safe (no auto cleaner)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class LightEngineStorageSky extends LightEngineStorage<LightEngineStorage
|
||||
((LightEngineStorageSky.a) this.f).a(i);
|
||||
}
|
||||
|
||||
- Arrays.fill(this.a(i, true).asBytes(), (byte) -1);
|
||||
+ Arrays.fill(this.a(i, true).asBytesPoolSafe(), (byte) -1); // Paper
|
||||
k = SectionPosition.c(SectionPosition.b(i));
|
||||
l = SectionPosition.c(SectionPosition.c(i));
|
||||
int i1 = SectionPosition.c(SectionPosition.d(i));
|
||||
diff --git a/src/main/java/net/minecraft/world/level/lighting/NibbleArrayFlat.java b/src/main/java/net/minecraft/world/level/lighting/NibbleArrayFlat.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/lighting/NibbleArrayFlat.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/lighting/NibbleArrayFlat.java
|
||||
@@ -0,0 +0,0 @@ public class NibbleArrayFlat extends NibbleArray {
|
||||
|
||||
public NibbleArrayFlat(NibbleArray nibblearray, int i) {
|
||||
@@ -246,112 +353,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
System.arraycopy(this.a, 0, abyte, i * 128, 128);
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutLightUpdate.java b/src/main/java/net/minecraft/server/PacketPlayOutLightUpdate.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutLightUpdate.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutLightUpdate.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
+import io.netty.channel.ChannelFuture; // Paper
|
||||
+
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
private List<byte[]> h;
|
||||
private boolean i;
|
||||
|
||||
+ // Paper start
|
||||
+ java.lang.Runnable cleaner1;
|
||||
+ java.lang.Runnable cleaner2;
|
||||
+ java.util.concurrent.atomic.AtomicInteger remainingSends = new java.util.concurrent.atomic.AtomicInteger(0);
|
||||
+
|
||||
+ @Override
|
||||
+ public void onPacketDispatch(EntityPlayer player) {
|
||||
+ remainingSends.incrementAndGet();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void onPacketDispatchFinish(EntityPlayer player, ChannelFuture future) {
|
||||
+ if (remainingSends.decrementAndGet() <= 0) {
|
||||
+ // incase of any race conditions, schedule this delayed
|
||||
+ MCUtil.scheduleTask(5, () -> {
|
||||
+ if (remainingSends.get() == 0) {
|
||||
+ cleaner1.run();
|
||||
+ cleaner2.run();
|
||||
+ }
|
||||
+ }, "Light Packet Release");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean hasFinishListener() {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ // Paper end
|
||||
public PacketPlayOutLightUpdate() {}
|
||||
|
||||
public PacketPlayOutLightUpdate(ChunkCoordIntPair chunkcoordintpair, LightEngine lightengine, boolean flag) {
|
||||
this.a = chunkcoordintpair.x;
|
||||
this.b = chunkcoordintpair.z;
|
||||
this.i = flag;
|
||||
- this.g = Lists.newArrayList();
|
||||
- this.h = Lists.newArrayList();
|
||||
+ this.g = Lists.newArrayList();cleaner1 = MCUtil.registerListCleaner(this, this.g, NibbleArray::releaseBytes); // Paper
|
||||
+ this.h = Lists.newArrayList();cleaner2 = MCUtil.registerListCleaner(this, this.h, NibbleArray::releaseBytes); // Paper
|
||||
|
||||
for (int i = 0; i < 18; ++i) {
|
||||
NibbleArray nibblearray = lightengine.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, -1 + i));
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
this.e |= 1 << i;
|
||||
} else {
|
||||
this.c |= 1 << i;
|
||||
- this.g.add(nibblearray.asBytes().clone());
|
||||
+ this.g.add(nibblearray.getCloneIfSet()); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
this.f |= 1 << i;
|
||||
} else {
|
||||
this.d |= 1 << i;
|
||||
- this.h.add(nibblearray1.asBytes().clone());
|
||||
+ this.h.add(nibblearray1.getCloneIfSet()); // Paper
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
this.i = flag;
|
||||
this.c = i;
|
||||
this.d = j;
|
||||
- this.g = Lists.newArrayList();
|
||||
- this.h = Lists.newArrayList();
|
||||
+ this.g = Lists.newArrayList();cleaner1 = MCUtil.registerListCleaner(this, this.g, NibbleArray::releaseBytes); // Paper
|
||||
+ this.h = Lists.newArrayList();cleaner2 = MCUtil.registerListCleaner(this, this.h, NibbleArray::releaseBytes); // Paper
|
||||
|
||||
for (int k = 0; k < 18; ++k) {
|
||||
NibbleArray nibblearray;
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
if ((this.c & 1 << k) != 0) {
|
||||
nibblearray = lightengine.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, -1 + k));
|
||||
if (nibblearray != null && !nibblearray.c()) {
|
||||
- this.g.add(nibblearray.asBytes().clone());
|
||||
+ this.g.add(nibblearray.getCloneIfSet()); // Paper
|
||||
} else {
|
||||
this.c &= ~(1 << k);
|
||||
if (nibblearray != null) {
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutLightUpdate implements Packet<PacketListenerPlayOut> {
|
||||
if ((this.d & 1 << k) != 0) {
|
||||
nibblearray = lightengine.a(EnumSkyBlock.BLOCK).a(SectionPosition.a(chunkcoordintpair, -1 + k));
|
||||
if (nibblearray != null && !nibblearray.c()) {
|
||||
- this.h.add(nibblearray.asBytes().clone());
|
||||
+ this.h.add(nibblearray.getCloneIfSet()); // Paper
|
||||
} else {
|
||||
this.d &= ~(1 << k);
|
||||
if (nibblearray != null) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
||||
|
||||
Reference in New Issue
Block a user