Refactor Lighting Queue System

may help #284

Cleans up the lighting queue system, reducing diff and improving implementation.

We no longer stop chunk unloads due to lighting updates, and instead simply flush the lighting queue.
The cost of forcing the chunk (and its neighbors!) to stay loaded waiting for its
lighting work to finish is much greater than simply taking the hit and doing the work.

This change also helps reduce the diff and avoid bugs with missed diffs by removing
duplicated logic.

Also switches to a more effecient data structure (ArrayDeque instead of LinkedList) for the queue itself.
This commit is contained in:
Aikar 2016-05-15 18:48:39 -04:00
parent 433489ea32
commit e56bbcdcda
25 changed files with 266 additions and 260 deletions

View File

@ -1,21 +1,31 @@
From 5efa3dbdcbafbb869d80578874d617adbdbbe687 Mon Sep 17 00:00:00 2001 From dda988688e1cc0e88e958f3d2efb47a23df5cc01 Mon Sep 17 00:00:00 2001
From: Byteflux <byte@byteflux.net> From: Byteflux <byte@byteflux.net>
Date: Wed, 2 Mar 2016 00:52:31 -0600 Date: Wed, 2 Mar 2016 00:52:31 -0600
Subject: [PATCH] Lighting Queue Subject: [PATCH] Lighting Queue
This provides option to queue lighting updates to ensure they do not cause the server lag
diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java
index 0f8315c..5afdc2c 100644 index 11dd692..da3787d 100644
--- a/src/main/java/co/aikar/timings/MinecraftTimings.java --- a/src/main/java/co/aikar/timings/WorldTimingsHandler.java
+++ b/src/main/java/co/aikar/timings/MinecraftTimings.java +++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java
@@ -17,6 +17,7 @@ public final class MinecraftTimings { @@ -35,6 +35,8 @@ public class WorldTimingsHandler {
public static final Timing timeUpdateTimer = Timings.ofSafe("Time Update"); public final Timing syncChunkLoadTileTicksTimer;
public static final Timing serverCommandTimer = Timings.ofSafe("Server Command"); public final Timing syncChunkLoadPostTimer;
public static final Timing worldSaveTimer = Timings.ofSafe("World Save");
+ public static final Timing lightingQueueTimer = Timings.ofSafe("Lighting Queue");
public static final Timing tickEntityTimer = Timings.ofSafe("## tickEntity"); + public final Timing lightingQueueTimer;
public static final Timing tickTileEntityTimer = Timings.ofSafe("## tickTileEntity"); +
public WorldTimingsHandler(World server) {
String name = server.worldData.getName() +" - ";
@@ -67,5 +69,7 @@ public class WorldTimingsHandler {
tracker2 = Timings.ofSafe(name + "tracker stage 2");
doTick = Timings.ofSafe(name + "doTick");
tickEntities = Timings.ofSafe(name + "tickEntities");
+
+ lightingQueueTimer = Timings.ofSafe(name + "Lighting Queue");
}
}
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 7c0e61f..8e3a0f3 100644 index 7c0e61f..8e3a0f3 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@ -32,31 +42,22 @@ index 7c0e61f..8e3a0f3 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 5690e81..42fef0a 100644 index 5690e81..d55beb9 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -45,6 +45,7 @@ public class Chunk { @@ -33,6 +33,7 @@ public class Chunk {
private ConcurrentLinkedQueue<BlockPosition> y; private boolean m;
public boolean d; public final Map<BlockPosition, TileEntity> tileEntities;
protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot public final List<Entity>[] entitySlices; // Spigot
+ public int lightUpdates; // Paper - Number of queued light updates for this chunk + final PaperLightingQueue.LightingQueue lightingQueue = new PaperLightingQueue.LightingQueue(this); // Paper
private boolean done;
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking private boolean lit;
private int neighbors = 0x1 << 12; private boolean r;
@@ -227,6 +228,22 @@ public class Chunk { @@ -227,6 +228,13 @@ public class Chunk {
private void h(boolean flag) { private void h(boolean flag) {
this.world.methodProfiler.a("recheckGaps"); this.world.methodProfiler.a("recheckGaps");
if (this.world.areChunksLoaded(new BlockPosition(this.locX * 16 + 8, 0, this.locZ * 16 + 8), 16)) { if (this.world.areChunksLoaded(new BlockPosition(this.locX * 16 + 8, 0, this.locZ * 16 + 8), 16)) {
+ // Paper start - Queue light update + lightingQueue.add(() -> recheckGaps(flag)); // Paper - Queue light update
+ if (!world.paperConfig.queueLightUpdates) {
+ recheckGaps(flag);
+ } else {
+ ++lightUpdates;
+ world.getServer().getServer().lightingQueue.add(() -> {
+ recheckGaps(flag);
+ --lightUpdates;
+ });
+ }
+ } + }
+ } + }
+ +
@ -66,165 +67,170 @@ index 5690e81..42fef0a 100644
for (int i = 0; i < 16; ++i) { for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 16; ++j) { for (int j = 0; j < 16; ++j) {
if (this.i[i + j * 16]) { if (this.i[i + j * 16]) {
@@ -478,7 +495,7 @@ public class Chunk { @@ -478,7 +486,7 @@ public class Chunk {
} else { } else {
if (flag) { if (flag) {
this.initLighting(); this.initLighting();
- } else { - } else {
+ } else if (!world.paperConfig.queueLightUpdates) { // Paper + } else { lightingQueue.add(() -> { // Paper - Queue light update
int j1 = iblockdata.c(); int j1 = iblockdata.c();
int k1 = iblockdata1.c(); int k1 = iblockdata1.c();
@@ -493,6 +510,28 @@ public class Chunk { @@ -493,6 +501,7 @@ public class Chunk {
if (j1 != k1 && (j1 < k1 || this.getBrightness(EnumSkyBlock.SKY, blockposition) > 0 || this.getBrightness(EnumSkyBlock.BLOCK, blockposition) > 0)) { if (j1 != k1 && (j1 < k1 || this.getBrightness(EnumSkyBlock.SKY, blockposition) > 0 || this.getBrightness(EnumSkyBlock.BLOCK, blockposition) > 0)) {
this.d(i, k); this.d(i, k);
} }
+ // Paper start - Queue light update + }); // Paper
+ } else {
+ int j1 = iblockdata.c();
+ int k1 = iblockdata1.c();
+
+ ++lightUpdates;
+ world.getServer().getServer().lightingQueue.add(() -> {
+ if (j1 > 0) {
+ if (j >= i1) {
+ this.c(i, j + 1, k);
+ }
+ } else if (j == i1 - 1) {
+ this.c(i, j, k);
+ }
+
+ if (j1 != k1 && (j1 < k1 || this.getBrightness(EnumSkyBlock.SKY, blockposition) > 0 || this.getBrightness(EnumSkyBlock.BLOCK, blockposition) > 0)) {
+ this.d(i, k);
+ }
+
+ --lightUpdates;
+ });
+ // Paper end
} }
TileEntity tileentity; TileEntity tileentity;
@@ -1318,4 +1357,29 @@ public class Chunk { diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index de85bd5..50f0345 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -275,6 +275,7 @@ public class ChunkProviderServer implements IChunkProvider {
if (event.isCancelled()) {
continue;
}
+ chunk.lightingQueue.processUnload(); // Paper
private EnumTileEntityState() {} // Update neighbor counts
for (int x = -2; x < 3; x++) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index ebf6c48..89a40a8 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -706,7 +706,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
protected void C() throws ExceptionWorldConflict { // CraftBukkit - added throws
co.aikar.timings.TimingsManager.FULL_SERVER_TICK.startTiming(); // Paper
- long i = System.nanoTime();
+ long i = System.nanoTime(); long startTime = i; // Paper
++this.ticks;
if (this.S) {
@@ -766,6 +766,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
this.methodProfiler.b();
org.spigotmc.WatchdogThread.tick(); // Spigot
+ PaperLightingQueue.processQueue(startTime); // Paper
co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
} }
diff --git a/src/main/java/net/minecraft/server/PaperLightingQueue.java b/src/main/java/net/minecraft/server/PaperLightingQueue.java
new file mode 100644
index 0000000..2350fe3
--- /dev/null
+++ b/src/main/java/net/minecraft/server/PaperLightingQueue.java
@@ -0,0 +1,98 @@
+package net.minecraft.server;
+ +
+ // Paper start +import co.aikar.timings.Timing;
+ public boolean hasLightUpdates() { +import java.util.ArrayDeque;
+ if (world.paperConfig.queueLightUpdates) { +
+ if (lightUpdates > 0) { +class PaperLightingQueue {
+ return true; + private static final long MAX_TIME = (long) (1000000000 / 20 * .95);
+ private static int updatesThisTick;
+
+
+ static void processQueue(long curTime) {
+ updatesThisTick = 0;
+
+ final long startTime = System.nanoTime();
+ final long maxTickTime = MAX_TIME - (startTime - curTime);
+
+ START:
+ for (World world : MinecraftServer.getServer().worlds) {
+ if (!world.paperConfig.queueLightUpdates) {
+ continue;
+ } + }
+ +
+ for (int x = locX - 2; x <= locX + 2; ++x) { + for (Chunk chunk : ((WorldServer) world).getChunkProviderServer().chunks.values()) {
+ for (int z = locZ - 2; z <= locZ + 2; ++z) { + if (chunk.lightingQueue.processQueue(startTime, maxTickTime)) {
+ if ((x == 0 && z == 0) || (x == locX && z == locZ)) { + break START;
+ }
+ }
+ }
+ }
+
+ static class LightingQueue extends ArrayDeque<Runnable> {
+ final private Chunk chunk;
+
+ LightingQueue(Chunk chunk) {
+ super();
+ this.chunk = chunk;
+ }
+
+ @Override
+ public boolean add(Runnable runnable) {
+ if (chunk.world.paperConfig.queueLightUpdates) {
+ return super.add(runnable);
+ }
+ runnable.run();
+ return true;
+ }
+
+ /**
+ * Processes the lighting queue for this chunk
+ *
+ * @param startTime If start Time is 0, we will not limit execution time
+ * @param maxTickTime Maximum time to spend processing lighting updates
+ * @return true to abort processing furthur lighting updates
+ */
+ private boolean processQueue(long startTime, long maxTickTime) {
+ if (this.isEmpty()) {
+ return false;
+ }
+ try (Timing ignored = chunk.world.timings.lightingQueueTimer.startTiming()) {
+ Runnable lightUpdate;
+ while ((lightUpdate = this.poll()) != null) {
+ lightUpdate.run();
+ if (startTime > 0 && ++PaperLightingQueue.updatesThisTick % 10 == 0 && PaperLightingQueue.updatesThisTick > 10) {
+ if (System.nanoTime() - startTime > maxTickTime) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Flushes lighting updates to unload the chunk
+ */
+ void processUnload() {
+ if (!chunk.world.paperConfig.queueLightUpdates) {
+ return;
+ }
+ processQueue(0, 0); // No timeout
+
+ final int radius = 1; // TODO: bitflip, why should this ever be 2?
+ for (int x = chunk.locX - radius; x <= chunk.locX + radius; ++x) {
+ for (int z = chunk.locZ - radius; z <= chunk.locZ + radius; ++z) {
+ if (x == chunk.locX && z == chunk.locZ) {
+ continue; + continue;
+ } + }
+ +
+ Chunk chunk = MCUtil.getLoadedChunkWithoutMarkingActive(world, x, z); + Chunk neighbor = MCUtil.getLoadedChunkWithoutMarkingActive(chunk.world, x, z);
+ if (chunk != null && chunk.lightUpdates > 0) { + if (neighbor != null) {
+ return true; + neighbor.lightingQueue.processQueue(0, 0); // No timeout
+ } + }
+ } + }
+ } + }
+ } + }
+
+ return false;
+ } + }
+ // Paper end +}
}
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index de85bd5..20dccfb 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -269,6 +269,7 @@ public class ChunkProviderServer implements IChunkProvider {
Chunk chunk = (Chunk) this.chunks.get(olong);
if (chunk != null && chunk.d) {
+ if (chunk.hasLightUpdates()) continue; // Paper - Don't unload chunks with pending light updates.
// CraftBukkit start
ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk);
this.world.getServer().getPluginManager().callEvent(event);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index ebf6c48..fcc1214 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -52,6 +52,11 @@ import org.bukkit.craftbukkit.CraftServer;
// CraftBukkit end
import co.aikar.timings.MinecraftTimings; // Paper
+// Paper start
+import java.util.LinkedList;
+import java.util.Queue;
+// Paper end
+
public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics {
public static final Logger LOGGER = LogManager.getLogger();
@@ -118,6 +123,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
public final Thread primaryThread;
public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
public int autosavePeriod;
+ public final Queue<Runnable> lightingQueue = new LinkedList<Runnable>(); // Paper - Queued light updates
// CraftBukkit end
public MinecraftServer(OptionSet options, Proxy proxy, DataConverterManager dataconvertermanager, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache) {
@@ -765,6 +771,34 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
this.methodProfiler.b();
this.methodProfiler.b();
+ // Paper start - Flush light updates
+ if (!lightingQueue.isEmpty()) {
+ MinecraftTimings.lightingQueueTimer.startTiming();
+
+ int updatesThisTick = 0;
+ long cachedTime = System.currentTimeMillis();
+ long startTime = cachedTime - (this.h[this.ticks % 100] / 1000000);
+ int maxTickTimeCap = MathHelper.floor((TICK_TIME / 1000000) * 0.8);
+ int maxTickTime = Math.max(0, (int) (maxTickTimeCap - (cachedTime - startTime)));
+ Runnable lightUpdate;
+
+ while (maxTickTime > 0 && (lightUpdate = lightingQueue.poll()) != null) {
+ lightUpdate.run();
+ if (++updatesThisTick % 10 == 0) {
+ long currentTime = System.currentTimeMillis();
+ if (currentTime - cachedTime > maxTickTime) {
+ break;
+ }
+
+ cachedTime = currentTime;
+ maxTickTime = Math.max(0, (int) (maxTickTimeCap - (currentTime - startTime)));
+ }
+ }
+
+ MinecraftTimings.lightingQueueTimer.stopTiming();
+ }
+ // Paper end
+
org.spigotmc.WatchdogThread.tick(); // Spigot
co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
}
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 362df8f..77cfd3f 100644 index 362df8f..dc51a79 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -384,7 +384,17 @@ public abstract class World implements IBlockAccess { @@ -384,7 +384,7 @@ public abstract class World implements IBlockAccess {
} else { } else {
if (iblockdata.c() != iblockdata1.c() || iblockdata.d() != iblockdata1.d()) { if (iblockdata.c() != iblockdata1.c() || iblockdata.d() != iblockdata1.d()) {
this.methodProfiler.a("checkLight"); this.methodProfiler.a("checkLight");
- this.w(blockposition); - this.w(blockposition);
+ // Paper start - Queue light update + chunk.lightingQueue.add(() -> this.w(blockposition)); // Paper - Queue light update
+ if (!paperConfig.queueLightUpdates) {
+ this.w(blockposition);
+ } else {
+ ++chunk.lightUpdates;
+ getMinecraftServer().lightingQueue.add(() -> {
+ this.w(blockposition);
+ --chunk.lightUpdates;
+ });
+ }
+ // Paper end
this.methodProfiler.b(); this.methodProfiler.b();
} }

View File

@ -1,4 +1,4 @@
From f537cf6b939037c60801e039483949925bf390c5 Mon Sep 17 00:00:00 2001 From 67a035d6646e7d542e0a6c0156ec202e542e01aa Mon Sep 17 00:00:00 2001
From: Byteflux <byte@byteflux.net> From: Byteflux <byte@byteflux.net>
Date: Wed, 2 Mar 2016 11:59:48 -0600 Date: Wed, 2 Mar 2016 11:59:48 -0600
Subject: [PATCH] Optimize explosions Subject: [PATCH] Optimize explosions
@ -124,10 +124,10 @@ index de74fb7..8e225a5 100644
+ // Paper end + // Paper end
} }
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index fcc1214..5925e2c 100644 index 89a40a8..bbdb19a 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -903,6 +903,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs @@ -870,6 +870,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
worldserver.getTracker().updatePlayers(); worldserver.getTracker().updatePlayers();
this.methodProfiler.b(); this.methodProfiler.b();
this.methodProfiler.b(); this.methodProfiler.b();
@ -136,7 +136,7 @@ index fcc1214..5925e2c 100644
// this.i[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit // this.i[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 77cfd3f..71159b4 100644 index dc51a79..c8c2601 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -16,6 +16,7 @@ import javax.annotation.Nullable; @@ -16,6 +16,7 @@ import javax.annotation.Nullable;

View File

@ -1,14 +1,14 @@
From be1c32e1306b4b5713bc1046bdc234f3827f7407 Mon Sep 17 00:00:00 2001 From 58ac13abf1d84ad3e446556592682eb8f077ee4a Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com> From: Zach Brown <zach.brown@destroystokyo.com>
Date: Wed, 2 Mar 2016 23:45:17 -0600 Date: Wed, 2 Mar 2016 23:45:17 -0600
Subject: [PATCH] Disable spigot tick limiters Subject: [PATCH] Disable spigot tick limiters
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 71159b4..5adc297 100644 index c8c2601..b7f45b6 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -1428,10 +1428,10 @@ public abstract class World implements IBlockAccess { @@ -1418,10 +1418,10 @@ public abstract class World implements IBlockAccess {
// CraftBukkit start - Use field for loop variable // CraftBukkit start - Use field for loop variable
co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Paper co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Paper
int entitiesThisCycle = 0; int entitiesThisCycle = 0;
@ -23,7 +23,7 @@ index 71159b4..5adc297 100644
tickPosition = (tickPosition < entityList.size()) ? tickPosition : 0; tickPosition = (tickPosition < entityList.size()) ? tickPosition : 0;
entity = (Entity) this.entityList.get(this.tickPosition); entity = (Entity) this.entityList.get(this.tickPosition);
// CraftBukkit end // CraftBukkit end
@@ -1496,9 +1496,7 @@ public abstract class World implements IBlockAccess { @@ -1486,9 +1486,7 @@ public abstract class World implements IBlockAccess {
// Spigot start // Spigot start
// Iterator iterator = this.tileEntityListTick.iterator(); // Iterator iterator = this.tileEntityListTick.iterator();
int tilesThisCycle = 0; int tilesThisCycle = 0;

View File

@ -1,4 +1,4 @@
From 098cb462c9c959f5b015dd13058fbb76619829d0 Mon Sep 17 00:00:00 2001 From d867255d8c2e1b34c741e287d89375ba801c1098 Mon Sep 17 00:00:00 2001
From: DemonWav <demonwav@gmail.com> From: DemonWav <demonwav@gmail.com>
Date: Thu, 3 Mar 2016 01:44:39 -0600 Date: Thu, 3 Mar 2016 01:44:39 -0600
Subject: [PATCH] Add Location support to tab completers (vanilla feature Subject: [PATCH] Add Location support to tab completers (vanilla feature
@ -20,10 +20,10 @@ index 2b7a4dd..246f3d9 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 5925e2c..f5e26df 100644 index bbdb19a..3d2e0b6 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1189,7 +1189,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs @@ -1156,7 +1156,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return arraylist; return arraylist;
} }
*/ */

View File

@ -1,4 +1,4 @@
From 7b8fd6c09c65c9bafae7bd58364797691be50cad Mon Sep 17 00:00:00 2001 From 086069acbe2c36b968bd5d853426ff8d38a8cd49 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Thu, 3 Mar 2016 02:07:55 -0600 Date: Thu, 3 Mar 2016 02:07:55 -0600
Subject: [PATCH] Optimize getBlockData Subject: [PATCH] Optimize getBlockData
@ -6,10 +6,10 @@ Subject: [PATCH] Optimize getBlockData
Hot method, so reduce # of instructions for the method. Hot method, so reduce # of instructions for the method.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 3bcbbb9..08525d6 100644 index d55beb9..3806def 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -404,8 +404,15 @@ public class Chunk { @@ -395,8 +395,15 @@ public class Chunk {
return this.a(i, j, k).c(); return this.a(i, j, k).c();
} }

View File

@ -1,4 +1,4 @@
From c78c930892a7b03ed80dcf843aedb632fb1a8b4d Mon Sep 17 00:00:00 2001 From 1bba159601a998917f3ebe31c6b6642951a02ef7 Mon Sep 17 00:00:00 2001
From: CullanP <cullanpage@gmail.com> From: CullanP <cullanpage@gmail.com>
Date: Thu, 3 Mar 2016 02:13:38 -0600 Date: Thu, 3 Mar 2016 02:13:38 -0600
Subject: [PATCH] Avoid hopper searches if there are no items Subject: [PATCH] Avoid hopper searches if there are no items
@ -14,12 +14,12 @@ And since minecart hoppers are used _very_ rarely near we can avoid alot of sear
Combined, this adds up a lot. Combined, this adds up a lot.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 08525d6..300d625 100644 index 3806def..acce7cb 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -47,6 +47,13 @@ public class Chunk { @@ -47,6 +47,13 @@ public class Chunk {
public boolean d;
protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot
public int lightUpdates; // Paper - Number of queued light updates for this chunk
+ // Paper start + // Paper start
+ // Track the number of minecarts and items + // Track the number of minecarts and items
@ -31,7 +31,7 @@ index 08525d6..300d625 100644
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking // CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
private int neighbors = 0x1 << 12; private int neighbors = 0x1 << 12;
@@ -655,6 +662,13 @@ public class Chunk { @@ -625,6 +632,13 @@ public class Chunk {
entity.ac = k; entity.ac = k;
entity.ad = this.locZ; entity.ad = this.locZ;
this.entitySlices[k].add(entity); this.entitySlices[k].add(entity);
@ -45,7 +45,7 @@ index 08525d6..300d625 100644
// Spigot start - increment creature type count // Spigot start - increment creature type count
// Keep this synced up with World.a(Class) // Keep this synced up with World.a(Class)
if (entity instanceof EntityInsentient) { if (entity instanceof EntityInsentient) {
@@ -687,6 +701,13 @@ public class Chunk { @@ -657,6 +671,13 @@ public class Chunk {
} }
this.entitySlices[i].remove(entity); this.entitySlices[i].remove(entity);
@ -59,7 +59,7 @@ index 08525d6..300d625 100644
// Spigot start - decrement creature type count // Spigot start - decrement creature type count
// Keep this synced up with World.a(Class) // Keep this synced up with World.a(Class)
if (entity instanceof EntityInsentient) { if (entity instanceof EntityInsentient) {
@@ -878,6 +899,15 @@ public class Chunk { @@ -848,6 +869,15 @@ public class Chunk {
if (!this.entitySlices[k].isEmpty()) { if (!this.entitySlices[k].isEmpty()) {
Iterator iterator = this.entitySlices[k].iterator(); Iterator iterator = this.entitySlices[k].iterator();
@ -75,7 +75,7 @@ index 08525d6..300d625 100644
while (iterator.hasNext()) { while (iterator.hasNext()) {
Entity entity1 = (Entity) iterator.next(); Entity entity1 = (Entity) iterator.next();
@@ -910,7 +940,18 @@ public class Chunk { @@ -880,7 +910,18 @@ public class Chunk {
i = MathHelper.clamp(i, 0, this.entitySlices.length - 1); i = MathHelper.clamp(i, 0, this.entitySlices.length - 1);
j = MathHelper.clamp(j, 0, this.entitySlices.length - 1); j = MathHelper.clamp(j, 0, this.entitySlices.length - 1);

View File

@ -1,4 +1,4 @@
From 0457e6130e427aac532ba7ebae80b9e3a3350ef9 Mon Sep 17 00:00:00 2001 From acf9844949fec83fbc827beef334a584b9b28f2e Mon Sep 17 00:00:00 2001
From: Joseph Hirschfeld <joe@ibj.io> From: Joseph Hirschfeld <joe@ibj.io>
Date: Thu, 3 Mar 2016 02:39:54 -0600 Date: Thu, 3 Mar 2016 02:39:54 -0600
Subject: [PATCH] Change implementation of (tile)entity removal list Subject: [PATCH] Change implementation of (tile)entity removal list
@ -22,7 +22,7 @@ index 751e07d..c6fe888 100644
public boolean impulse; public boolean impulse;
public int portalCooldown; public int portalCooldown;
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 5adc297..159934f 100644 index b7f45b6..26352d2 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -31,6 +31,11 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; @@ -31,6 +31,11 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
@ -51,7 +51,7 @@ index 5adc297..159934f 100644
public final List<EntityHuman> players = Lists.newArrayList(); public final List<EntityHuman> players = Lists.newArrayList();
public final List<Entity> j = Lists.newArrayList(); public final List<Entity> j = Lists.newArrayList();
protected final IntHashMap<Entity> entitiesById = new IntHashMap(); protected final IntHashMap<Entity> entitiesById = new IntHashMap();
@@ -1400,19 +1405,20 @@ public abstract class World implements IBlockAccess { @@ -1390,19 +1395,20 @@ public abstract class World implements IBlockAccess {
int j; int j;

View File

@ -1,4 +1,4 @@
From 6716cfabe2cb44666f1c9fa5d7ccf68d95224f3c Mon Sep 17 00:00:00 2001 From cc1f55cfececca4adcf18519f2b2fe2f6b2a3165 Mon Sep 17 00:00:00 2001
From: Joseph Hirschfeld <joe@ibj.io> From: Joseph Hirschfeld <joe@ibj.io>
Date: Thu, 3 Mar 2016 03:15:41 -0600 Date: Thu, 3 Mar 2016 03:15:41 -0600
Subject: [PATCH] Add exception reporting event Subject: [PATCH] Add exception reporting event
@ -50,7 +50,7 @@ index 0000000..9339718
+} +}
\ No newline at end of file \ No newline at end of file
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 300d625..eb60455 100644 index acce7cb..b39960a 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
@ -68,7 +68,7 @@ index 300d625..eb60455 100644
public class Chunk { public class Chunk {
@@ -793,10 +795,15 @@ public class Chunk { @@ -763,10 +765,15 @@ public class Chunk {
this.tileEntities.remove(blockposition); this.tileEntities.remove(blockposition);
// Paper end // Paper end
} else { } else {
@ -89,7 +89,7 @@ index 300d625..eb60455 100644
} }
} }
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index 20dccfb..32b71c6 100644 index 50f0345..25a2720 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -11,6 +11,7 @@ import java.util.Iterator; @@ -11,6 +11,7 @@ import java.util.Iterator;
@ -292,7 +292,7 @@ index 26d7d12..fcd2ddf 100644
} }
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index e56f705..21ba235 100644 index 26352d2..ccbfda0 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
@ -303,7 +303,7 @@ index e56f705..21ba235 100644
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@@ -1460,8 +1462,10 @@ public abstract class World implements IBlockAccess { @@ -1450,8 +1452,10 @@ public abstract class World implements IBlockAccess {
} catch (Throwable throwable1) { } catch (Throwable throwable1) {
entity.tickTimer.stopTiming(); entity.tickTimer.stopTiming();
// Paper start - Prevent tile entity and entity crashes // Paper start - Prevent tile entity and entity crashes
@ -315,7 +315,7 @@ index e56f705..21ba235 100644
entity.dead = true; entity.dead = true;
continue; continue;
// Paper end // Paper end
@@ -1525,8 +1529,10 @@ public abstract class World implements IBlockAccess { @@ -1515,8 +1519,10 @@ public abstract class World implements IBlockAccess {
this.methodProfiler.b(); this.methodProfiler.b();
} catch (Throwable throwable2) { } catch (Throwable throwable2) {
// Paper start - Prevent tile entity and entity crashes // Paper start - Prevent tile entity and entity crashes

View File

@ -1,4 +1,4 @@
From a9bec1c0266a2ed770f99dd1288b88a71b997aba Mon Sep 17 00:00:00 2001 From 2e5d3ab319b7c04911614a21e08c28144e9544f8 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Fri, 18 Mar 2016 20:16:03 -0400 Date: Fri, 18 Mar 2016 20:16:03 -0400
Subject: [PATCH] Add World Util Methods Subject: [PATCH] Add World Util Methods
@ -6,7 +6,7 @@ Subject: [PATCH] Add World Util Methods
Methods that can be used for other patches to help improve logic. Methods that can be used for other patches to help improve logic.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 21ba235..3bdf072 100644 index ccbfda0..133d4e2 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -153,6 +153,12 @@ public abstract class World implements IBlockAccess { @@ -153,6 +153,12 @@ public abstract class World implements IBlockAccess {
@ -22,7 +22,7 @@ index 21ba235..3bdf072 100644
public Chunk getChunkIfLoaded(int x, int z) { public Chunk getChunkIfLoaded(int x, int z) {
return ((ChunkProviderServer) this.chunkProvider).getLoadedChunkAt(x, z); return ((ChunkProviderServer) this.chunkProvider).getLoadedChunkAt(x, z);
} }
@@ -640,6 +646,41 @@ public abstract class World implements IBlockAccess { @@ -630,6 +636,41 @@ public abstract class World implements IBlockAccess {
} }
} }
@ -64,7 +64,7 @@ index 21ba235..3bdf072 100644
public int getLightLevel(BlockPosition blockposition) { public int getLightLevel(BlockPosition blockposition) {
return this.c(blockposition, true); return this.c(blockposition, true);
} }
@@ -755,6 +796,27 @@ public abstract class World implements IBlockAccess { @@ -745,6 +786,27 @@ public abstract class World implements IBlockAccess {
return this.worldProvider.n()[this.getLightLevel(blockposition)]; return this.worldProvider.n()[this.getLightLevel(blockposition)];
} }

View File

@ -1,4 +1,4 @@
From 3a02b0e6f4d2149f1be45e802a51ecfae1fa7453 Mon Sep 17 00:00:00 2001 From 00e5dc742dc2b80b9d43600cbe44b087c648c3d8 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Tue, 22 Mar 2016 23:41:34 -0400 Date: Tue, 22 Mar 2016 23:41:34 -0400
Subject: [PATCH] Optimize isValidLocation for inlining Subject: [PATCH] Optimize isValidLocation for inlining
@ -41,7 +41,7 @@ index 99fcf4c..be34dcd 100644
public MutableBlockPosition() { public MutableBlockPosition() {
this(0, 0, 0); this(0, 0, 0);
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 3bdf072..ecf3a38 100644 index 133d4e2..718215c 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -274,8 +274,8 @@ public abstract class World implements IBlockAccess { @@ -274,8 +274,8 @@ public abstract class World implements IBlockAccess {
@ -55,7 +55,7 @@ index 3bdf072..ecf3a38 100644
} }
private boolean E(BlockPosition blockposition) { private boolean E(BlockPosition blockposition) {
@@ -649,7 +649,7 @@ public abstract class World implements IBlockAccess { @@ -639,7 +639,7 @@ public abstract class World implements IBlockAccess {
// Paper start - test if meets light level, return faster // Paper start - test if meets light level, return faster
// logic copied from below // logic copied from below
public boolean isLightLevel(BlockPosition blockposition, int level) { public boolean isLightLevel(BlockPosition blockposition, int level) {
@ -64,7 +64,7 @@ index 3bdf072..ecf3a38 100644
if (this.getType(blockposition).f()) { if (this.getType(blockposition).f()) {
if (this.c(blockposition.up(), false) >= level) { if (this.c(blockposition.up(), false) >= level) {
return true; return true;
@@ -763,7 +763,7 @@ public abstract class World implements IBlockAccess { @@ -753,7 +753,7 @@ public abstract class World implements IBlockAccess {
blockposition = new BlockPosition(blockposition.getX(), 0, blockposition.getZ()); blockposition = new BlockPosition(blockposition.getX(), 0, blockposition.getZ());
} }
@ -73,7 +73,7 @@ index 3bdf072..ecf3a38 100644
return enumskyblock.c; return enumskyblock.c;
} else if (!this.isLoaded(blockposition)) { } else if (!this.isLoaded(blockposition)) {
return enumskyblock.c; return enumskyblock.c;
@@ -775,7 +775,7 @@ public abstract class World implements IBlockAccess { @@ -765,7 +765,7 @@ public abstract class World implements IBlockAccess {
} }
public void a(EnumSkyBlock enumskyblock, BlockPosition blockposition, int i) { public void a(EnumSkyBlock enumskyblock, BlockPosition blockposition, int i) {
@ -82,7 +82,7 @@ index 3bdf072..ecf3a38 100644
if (this.isLoaded(blockposition)) { if (this.isLoaded(blockposition)) {
Chunk chunk = this.getChunkAtWorldCoords(blockposition); Chunk chunk = this.getChunkAtWorldCoords(blockposition);
@@ -811,7 +811,7 @@ public abstract class World implements IBlockAccess { @@ -801,7 +801,7 @@ public abstract class World implements IBlockAccess {
// CraftBukkit end // CraftBukkit end
Chunk chunk = this.getChunkIfLoaded(blockposition); Chunk chunk = this.getChunkIfLoaded(blockposition);
if (chunk != null) { if (chunk != null) {

View File

@ -1,4 +1,4 @@
From 53ba2d46f33926f724bff3ae45dbc377821d51dd Mon Sep 17 00:00:00 2001 From 2f625e1e83f3c8ea5a221e29dcf5b8321b9ee533 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Mon, 28 Mar 2016 19:55:45 -0400 Date: Mon, 28 Mar 2016 19:55:45 -0400
Subject: [PATCH] Option to disable BlockPhysicsEvent for Redstone Subject: [PATCH] Option to disable BlockPhysicsEvent for Redstone
@ -25,10 +25,10 @@ index cdb1766..f689d69 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index ecf3a38..db70868 100644 index 718215c..757ed3e 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -568,7 +568,7 @@ public abstract class World implements IBlockAccess { @@ -558,7 +558,7 @@ public abstract class World implements IBlockAccess {
try { try {
// CraftBukkit start // CraftBukkit start
CraftWorld world = ((WorldServer) this).getWorld(); CraftWorld world = ((WorldServer) this).getWorld();

View File

@ -1,14 +1,14 @@
From 42278206102e357936f9e7d8b7001160df905803 Mon Sep 17 00:00:00 2001 From 6a7f3beb5deb1e84b02189832d3db4bc8fbc2161 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Mon, 28 Mar 2016 20:32:58 -0400 Date: Mon, 28 Mar 2016 20:32:58 -0400
Subject: [PATCH] Entity AddTo/RemoveFrom World Events Subject: [PATCH] Entity AddTo/RemoveFrom World Events
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index db70868..830494c 100644 index 757ed3e..095d4b2 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -1117,6 +1117,7 @@ public abstract class World implements IBlockAccess { @@ -1107,6 +1107,7 @@ public abstract class World implements IBlockAccess {
} }
entity.valid = true; // CraftBukkit entity.valid = true; // CraftBukkit
@ -16,7 +16,7 @@ index db70868..830494c 100644
} }
protected void c(Entity entity) { protected void c(Entity entity) {
@@ -1124,6 +1125,7 @@ public abstract class World implements IBlockAccess { @@ -1114,6 +1115,7 @@ public abstract class World implements IBlockAccess {
((IWorldAccess) this.u.get(i)).b(entity); ((IWorldAccess) this.u.get(i)).b(entity);
} }

View File

@ -1,4 +1,4 @@
From c1e5076fcdd19903b706e7bb19c7a4ec80edea1a Mon Sep 17 00:00:00 2001 From 6141cadba25a695101752faca997db05813c436b Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Mon, 28 Mar 2016 20:46:14 -0400 Date: Mon, 28 Mar 2016 20:46:14 -0400
Subject: [PATCH] Configurable Chunk Inhabited Timer Subject: [PATCH] Configurable Chunk Inhabited Timer
@ -23,10 +23,10 @@ index f689d69..6f77cfd 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 22e4728..f7452b3 100644 index 98d9e99..7144227 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -1401,7 +1401,7 @@ public class Chunk { @@ -1371,7 +1371,7 @@ public class Chunk {
} }
public long x() { public long x() {

View File

@ -1,14 +1,14 @@
From b50ffe187045367a4cadb8abf7d4990bccc58038 Mon Sep 17 00:00:00 2001 From 60d48a782502bf6c276124acfd412f18390a4ac7 Mon Sep 17 00:00:00 2001
From: DemonWav <demonwav@gmail.com> From: DemonWav <demonwav@gmail.com>
Date: Wed, 30 Mar 2016 01:20:11 -0500 Date: Wed, 30 Mar 2016 01:20:11 -0500
Subject: [PATCH] Add getEntity by UUID API Subject: [PATCH] Add getEntity by UUID API
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index f5e26df..8d8e415 100644 index 3d2e0b6..842e364 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1626,4 +1626,20 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs @@ -1593,4 +1593,20 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return (Bukkit.getServer() instanceof CraftServer) ? ((CraftServer) Bukkit.getServer()).getServer() : null; return (Bukkit.getServer() instanceof CraftServer) ? ((CraftServer) Bukkit.getServer()).getServer() : null;
} }
// CraftBukkit end // CraftBukkit end

View File

@ -1,4 +1,4 @@
From d4c8600623227bb4ccc74a31b66b010e2d65ed3c Mon Sep 17 00:00:00 2001 From c0da998748217fabcbbea1ae21ca614b18409710 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Thu, 31 Mar 2016 19:17:58 -0400 Date: Thu, 31 Mar 2016 19:17:58 -0400
Subject: [PATCH] Do not load chunks for light checks Subject: [PATCH] Do not load chunks for light checks
@ -7,10 +7,10 @@ Should only happen for blocks on the edge that uses neighbors light level
(certain blocks). In that case, there will be 3-4 other neighbors to get a light level from. (certain blocks). In that case, there will be 3-4 other neighbors to get a light level from.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 830494c..f25b6e0 100644 index 095d4b2..5223785 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -717,6 +717,7 @@ public abstract class World implements IBlockAccess { @@ -707,6 +707,7 @@ public abstract class World implements IBlockAccess {
if (blockposition.getY() >= 256) { if (blockposition.getY() >= 256) {
blockposition = new BlockPosition(blockposition.getX(), 255, blockposition.getZ()); blockposition = new BlockPosition(blockposition.getX(), 255, blockposition.getZ());
} }

View File

@ -1,4 +1,4 @@
From 4b59f933529474fa40301cad4efdfe5e59dbf849 Mon Sep 17 00:00:00 2001 From e2c01a96c6d7748d416bc8b270f513d9bd96afef Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Sat, 13 Sep 2014 23:14:43 -0400 Date: Sat, 13 Sep 2014 23:14:43 -0400
Subject: [PATCH] Configurable Keep Spawn Loaded range per world Subject: [PATCH] Configurable Keep Spawn Loaded range per world
@ -21,10 +21,10 @@ index b2d74df..36f0087 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 8d8e415..02e8551 100644 index 842e364..e1c0c0b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -359,8 +359,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs @@ -353,8 +353,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
long j = av(); long j = av();
i = 0; i = 0;
@ -37,10 +37,10 @@ index 8d8e415..02e8551 100644
if (i1 - j > 1000L) { if (i1 - j > 1000L) {
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index f25b6e0..c19c112 100644 index 5223785..7bfb735 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -3238,7 +3238,7 @@ public abstract class World implements IBlockAccess { @@ -3228,7 +3228,7 @@ public abstract class World implements IBlockAccess {
BlockPosition blockposition = this.getSpawn(); BlockPosition blockposition = this.getSpawn();
int k = i * 16 + 8 - blockposition.getX(); int k = i * 16 + 8 - blockposition.getX();
int l = j * 16 + 8 - blockposition.getZ(); int l = j * 16 + 8 - blockposition.getZ();

View File

@ -1,14 +1,14 @@
From fceddc67b91324c40ed6247fda6d0013ffae368c Mon Sep 17 00:00:00 2001 From 0ca2c45f3293c21521e8ff3a5048cca7b53edf58 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Sun, 3 Apr 2016 17:48:50 -0400 Date: Sun, 3 Apr 2016 17:48:50 -0400
Subject: [PATCH] Fix Cancelling BlockPlaceEvent triggering physics Subject: [PATCH] Fix Cancelling BlockPlaceEvent triggering physics
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index c19c112..0d0db07 100644 index 7bfb735..75b95b4 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -526,6 +526,7 @@ public abstract class World implements IBlockAccess { @@ -516,6 +516,7 @@ public abstract class World implements IBlockAccess {
} }
public void applyPhysics(BlockPosition blockposition, Block block) { public void applyPhysics(BlockPosition blockposition, Block block) {

View File

@ -1,14 +1,14 @@
From f428b285b73ce11e85505b1cf9001aac34ce7ab7 Mon Sep 17 00:00:00 2001 From ec07f804a484921eea0a5440f15c2ebe95ff7469 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Tue, 5 Apr 2016 19:42:22 -0400 Date: Tue, 5 Apr 2016 19:42:22 -0400
Subject: [PATCH] Don't spam reload spawn chunks in nether/end Subject: [PATCH] Don't spam reload spawn chunks in nether/end
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 0d0db07..8f3adc5 100644 index 75b95b4..91bbc75 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -3235,6 +3235,7 @@ public abstract class World implements IBlockAccess { @@ -3225,6 +3225,7 @@ public abstract class World implements IBlockAccess {
return this.N; return this.N;
} }

View File

@ -1,4 +1,4 @@
From 6ccec30f3b3880fc79844051e9e47796d1477967 Mon Sep 17 00:00:00 2001 From 1afe6ec3716226403ae8fd91217c07d9c1342999 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Wed, 13 Apr 2016 00:25:28 -0400 Date: Wed, 13 Apr 2016 00:25:28 -0400
Subject: [PATCH] Remove unused World Tile Entity List Subject: [PATCH] Remove unused World Tile Entity List
@ -6,7 +6,7 @@ Subject: [PATCH] Remove unused World Tile Entity List
Massive hit to performance and it is completely unnecessary. Massive hit to performance and it is completely unnecessary.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 8f3adc5..0c20216 100644 index 91bbc75..b3dd456 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -69,7 +69,7 @@ public abstract class World implements IBlockAccess { @@ -69,7 +69,7 @@ public abstract class World implements IBlockAccess {
@ -18,7 +18,7 @@ index 8f3adc5..0c20216 100644
public final List<TileEntity> tileEntityListTick = Lists.newArrayList(); public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
private final List<TileEntity> b = Lists.newArrayList(); private final List<TileEntity> b = Lists.newArrayList();
private final Set<TileEntity> tileEntityListUnload = Sets.newHashSet(); // Paper private final Set<TileEntity> tileEntityListUnload = Sets.newHashSet(); // Paper
@@ -1564,7 +1564,7 @@ public abstract class World implements IBlockAccess { @@ -1554,7 +1554,7 @@ public abstract class World implements IBlockAccess {
// CraftBukkit start - From below, clean up tile entities before ticking them // CraftBukkit start - From below, clean up tile entities before ticking them
if (!this.tileEntityListUnload.isEmpty()) { if (!this.tileEntityListUnload.isEmpty()) {
this.tileEntityListTick.removeAll(this.tileEntityListUnload); this.tileEntityListTick.removeAll(this.tileEntityListUnload);
@ -27,7 +27,7 @@ index 8f3adc5..0c20216 100644
this.tileEntityListUnload.clear(); this.tileEntityListUnload.clear();
} }
// CraftBukkit end // CraftBukkit end
@@ -1615,7 +1615,7 @@ public abstract class World implements IBlockAccess { @@ -1605,7 +1605,7 @@ public abstract class World implements IBlockAccess {
if (tileentity.x()) { if (tileentity.x()) {
tilesThisCycle--; tilesThisCycle--;
this.tileEntityListTick.remove(tileTickPosition--); this.tileEntityListTick.remove(tileTickPosition--);
@ -36,7 +36,7 @@ index 8f3adc5..0c20216 100644
if (this.isLoaded(tileentity.getPosition())) { if (this.isLoaded(tileentity.getPosition())) {
this.getChunkAtWorldCoords(tileentity.getPosition()).d(tileentity.getPosition()); this.getChunkAtWorldCoords(tileentity.getPosition()).d(tileentity.getPosition());
} }
@@ -1653,7 +1653,7 @@ public abstract class World implements IBlockAccess { @@ -1643,7 +1643,7 @@ public abstract class World implements IBlockAccess {
this.notify(tileentity1.getPosition(), iblockdata, iblockdata, 3); this.notify(tileentity1.getPosition(), iblockdata, iblockdata, 3);
// CraftBukkit start // CraftBukkit start
// From above, don't screw this up - SPIGOT-1746 // From above, don't screw this up - SPIGOT-1746
@ -45,7 +45,7 @@ index 8f3adc5..0c20216 100644
this.a(tileentity1); this.a(tileentity1);
} }
// CraftBukkit end // CraftBukkit end
@@ -1673,9 +1673,9 @@ public abstract class World implements IBlockAccess { @@ -1663,9 +1663,9 @@ public abstract class World implements IBlockAccess {
protected void l() {} protected void l() {}
public boolean a(TileEntity tileentity) { public boolean a(TileEntity tileentity) {
@ -57,7 +57,7 @@ index 8f3adc5..0c20216 100644
this.tileEntityListTick.add(tileentity); this.tileEntityListTick.add(tileentity);
} }
@@ -2145,7 +2145,7 @@ public abstract class World implements IBlockAccess { @@ -2135,7 +2135,7 @@ public abstract class World implements IBlockAccess {
} else { } else {
if (tileentity != null) { if (tileentity != null) {
this.b.remove(tileentity); this.b.remove(tileentity);

View File

@ -1,4 +1,4 @@
From 8b6deba310ca28fe576b153349c97cb9aaab5f65 Mon Sep 17 00:00:00 2001 From 426c5a1d94eef4816e659f6384148abc4e849b26 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Thu, 14 Apr 2016 21:01:39 -0400 Date: Thu, 14 Apr 2016 21:01:39 -0400
Subject: [PATCH] Fix Bugs with Spigot Mob Spawn Logic Subject: [PATCH] Fix Bugs with Spigot Mob Spawn Logic
@ -14,10 +14,10 @@ Specially with servers using smaller mob spawn ranges than view distance, as wel
This patch returns mob counting to use all loaded chunks, and 17x17 division. This patch returns mob counting to use all loaded chunks, and 17x17 division.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index f7452b3..773b153 100644 index 7144227..b94cdad 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -704,7 +704,7 @@ public class Chunk { @@ -674,7 +674,7 @@ public class Chunk {
i = this.entitySlices.length - 1; i = this.entitySlices.length - 1;
} }

View File

@ -1,14 +1,14 @@
From f9b11fc494edca4b6c42d180fa214cac92fadcdf Mon Sep 17 00:00:00 2001 From 96f6ebe5e1b8a63789ffffb307ef1cf856c434de Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com> From: Zach Brown <zach.brown@destroystokyo.com>
Date: Fri, 22 Apr 2016 20:34:21 -0500 Date: Fri, 22 Apr 2016 20:34:21 -0500
Subject: [PATCH] Check entity count additions and mark entities removed Subject: [PATCH] Check entity count additions and mark entities removed
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 773b153..4953e97 100644 index b94cdad..904141a 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -661,12 +661,36 @@ public class Chunk { @@ -631,12 +631,36 @@ public class Chunk {
k = this.entitySlices.length - 1; k = this.entitySlices.length - 1;
} }
@ -45,7 +45,7 @@ index 773b153..4953e97 100644
if (entity instanceof EntityItem) { if (entity instanceof EntityItem) {
itemCounts[k]++; itemCounts[k]++;
} else if (entity instanceof IInventory) { } else if (entity instanceof IInventory) {
@@ -711,6 +735,7 @@ public class Chunk { @@ -681,6 +705,7 @@ public class Chunk {
} else if (entity instanceof IInventory) { } else if (entity instanceof IInventory) {
inventoryEntityCounts[i]--; inventoryEntityCounts[i]--;
} }
@ -54,10 +54,10 @@ index 773b153..4953e97 100644
// Spigot start - decrement creature type count // Spigot start - decrement creature type count
// Keep this synced up with World.a(Class) // Keep this synced up with World.a(Class)
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 0c20216..2e767e4 100644 index b3dd456..5c3e075 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -1749,7 +1749,7 @@ public abstract class World implements IBlockAccess { @@ -1739,7 +1739,7 @@ public abstract class World implements IBlockAccess {
} }
int k = MathHelper.floor(entity.locX / 16.0D); int k = MathHelper.floor(entity.locX / 16.0D);

View File

@ -1,4 +1,4 @@
From 31e86975e071304b48ecb3c603ab1a4774e81720 Mon Sep 17 00:00:00 2001 From 3b596ccedcfa761caa54a479c5aa43c6a3b5053c Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Thu, 28 Apr 2016 00:57:27 -0400 Date: Thu, 28 Apr 2016 00:57:27 -0400
Subject: [PATCH] remove null possibility for getServer singleton Subject: [PATCH] remove null possibility for getServer singleton
@ -6,10 +6,10 @@ Subject: [PATCH] remove null possibility for getServer singleton
to stop IDE complaining about potential NPE to stop IDE complaining about potential NPE
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 02e8551..3b04681 100644 index e1c0c0b..ec9f037 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -59,6 +59,7 @@ import java.util.Queue; @@ -54,6 +54,7 @@ import co.aikar.timings.MinecraftTimings; // Paper
public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics { public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics {
@ -17,7 +17,7 @@ index 02e8551..3b04681 100644
public static final Logger LOGGER = LogManager.getLogger(); public static final Logger LOGGER = LogManager.getLogger();
public static final File a = new File("usercache.json"); public static final File a = new File("usercache.json");
public Convertable convertable; public Convertable convertable;
@@ -127,6 +128,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs @@ -121,6 +122,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
// CraftBukkit end // CraftBukkit end
public MinecraftServer(OptionSet options, Proxy proxy, DataConverterManager dataconvertermanager, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache) { public MinecraftServer(OptionSet options, Proxy proxy, DataConverterManager dataconvertermanager, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache) {
@ -25,7 +25,7 @@ index 02e8551..3b04681 100644
io.netty.util.ResourceLeakDetector.setEnabled( false ); // Spigot - disable io.netty.util.ResourceLeakDetector.setEnabled( false ); // Spigot - disable
this.e = proxy; this.e = proxy;
this.U = yggdrasilauthenticationservice; this.U = yggdrasilauthenticationservice;
@@ -1624,7 +1626,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs @@ -1591,7 +1593,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
// CraftBukkit start // CraftBukkit start
@Deprecated @Deprecated
public static MinecraftServer getServer() { public static MinecraftServer getServer() {

View File

@ -1,4 +1,4 @@
From 8e9e6eadd852b2360b4be33223a402533f0f1fe6 Mon Sep 17 00:00:00 2001 From d0e77b7d023cdba51d177126f4592d26da939ee1 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Fri, 29 Apr 2016 20:02:00 -0400 Date: Fri, 29 Apr 2016 20:02:00 -0400
Subject: [PATCH] Improve Maps (in item frames) performance and bug fixes Subject: [PATCH] Improve Maps (in item frames) performance and bug fixes
@ -48,10 +48,10 @@ index 6c8da79..38e88d8 100644
Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 2e767e4..741850e 100644 index 5c3e075..0f1ee49 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -1154,6 +1154,7 @@ public abstract class World implements IBlockAccess { @@ -1144,6 +1144,7 @@ public abstract class World implements IBlockAccess {
{ {
if ( iter.next().trackee == entity ) if ( iter.next().trackee == entity )
{ {

View File

@ -1,4 +1,4 @@
From 82bf7c14dccf3f1c88c4760a2edf709c542358fb Mon Sep 17 00:00:00 2001 From 2746640f12a29c656745e7ea06b1f2ddd9817fb8 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Thu, 12 May 2016 01:55:17 -0400 Date: Thu, 12 May 2016 01:55:17 -0400
Subject: [PATCH] Do not mark chunks as active for neighbor updates Subject: [PATCH] Do not mark chunks as active for neighbor updates
@ -6,10 +6,10 @@ Subject: [PATCH] Do not mark chunks as active for neighbor updates
Fixes chunk unload issues Fixes chunk unload issues
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 1e172b8..90eba27 100644 index 904141a..d7b9581 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -1021,25 +1021,25 @@ public class Chunk { @@ -991,25 +991,25 @@ public class Chunk {
public void loadNearby(IChunkProvider ichunkprovider, ChunkGenerator chunkgenerator) { public void loadNearby(IChunkProvider ichunkprovider, ChunkGenerator chunkgenerator) {
world.timings.syncChunkLoadPostTimer.startTiming(); // Spigot world.timings.syncChunkLoadPostTimer.startTiming(); // Spigot
@ -44,7 +44,7 @@ index 1e172b8..90eba27 100644
if (chunk4 != null) { if (chunk4 != null) {
chunk4.a(chunkgenerator); chunk4.a(chunkgenerator);
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index 8ee8e80..1bc001d 100644 index 3cf2d8b..c2c6d3a 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -197,7 +197,7 @@ public class ChunkProviderServer implements IChunkProvider { @@ -197,7 +197,7 @@ public class ChunkProviderServer implements IChunkProvider {

View File

@ -1,24 +1,24 @@
From e5bd49a93687c1a4aed20c45b62283540017f6a0 Mon Sep 17 00:00:00 2001 From 5a965808414b88283da8dc7aa36f9dcb6090311f Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co> From: Aikar <aikar@aikar.co>
Date: Thu, 12 May 2016 02:03:56 -0400 Date: Thu, 12 May 2016 02:03:56 -0400
Subject: [PATCH] Unmark chunk as unloading when unload is cancelled Subject: [PATCH] Unmark chunk as unloading when unload is cancelled
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 1e172b8..f72b1f8 100644 index d7b9581..40d4c9c 100644
--- a/src/main/java/net/minecraft/server/Chunk.java --- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -46,7 +46,7 @@ public class Chunk { @@ -47,7 +47,7 @@ public class Chunk {
private long w; private long w;
private int x; private int x;
private ConcurrentLinkedQueue<BlockPosition> y; private ConcurrentLinkedQueue<BlockPosition> y;
- public boolean d; - public boolean d;
+ public boolean d;public void setShouldUnload(boolean unload) { this.d = unload; } // Paper // OBFHELPER + public boolean d;public void setShouldUnload(boolean unload) { this.d = unload; } // Paper // OBFHELPER
protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot
public int lightUpdates; // Paper - Number of queued light updates for this chunk
// Paper start
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index 1bc001d..7820ad9 100644 index c2c6d3a..7427e6e 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -303,6 +303,7 @@ public class ChunkProviderServer implements IChunkProvider { @@ -303,6 +303,7 @@ public class ChunkProviderServer implements IChunkProvider {
@ -26,9 +26,9 @@ index 1bc001d..7820ad9 100644
if (chunk != null && chunk.d) { if (chunk != null && chunk.d) {
+ chunk.setShouldUnload(false); // Paper + chunk.setShouldUnload(false); // Paper
if (chunk.hasLightUpdates()) continue; // Paper - Don't unload chunks with pending light updates.
// CraftBukkit start // CraftBukkit start
ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk); ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk);
this.world.getServer().getPluginManager().callEvent(event);
-- --
2.8.2 2.8.2