It appears to cause visual glitching issues with certain TNT entities fired from cannons. TileEntity tick capping has already been removed for some time, Entity tick capping removal is new to this patch.
78 lines
3.6 KiB
Diff
78 lines
3.6 KiB
Diff
From 776171aa01cd66d7c53aec724dbb9e0afda9223e Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
Date: Mon, 13 Apr 2015 15:47:15 -0500
|
|
Subject: [PATCH] Fix redstone lag issues
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index d76b965..7624984 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -611,6 +611,8 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
if (false) { // CraftBukkit
|
|
throw new IllegalStateException("TickNextTick list out of synch");
|
|
} else {
|
|
+ // PaperSpigot start - No, stop doing this, it affects things like redstone
|
|
+ /*
|
|
if (i > 1000) {
|
|
// CraftBukkit start - If the server has too much to process over time, try to alleviate that
|
|
if (i > 20 * 1000) {
|
|
@@ -619,7 +621,11 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
i = 1000;
|
|
}
|
|
// CraftBukkit end
|
|
+ */
|
|
+ if (i > paperSpigotConfig.tickNextTickCap) {
|
|
+ i = paperSpigotConfig.tickNextTickCap;
|
|
}
|
|
+ // PaperSpigot end
|
|
|
|
this.methodProfiler.a("cleaning");
|
|
|
|
@@ -636,6 +642,23 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
this.V.add(nextticklistentry);
|
|
}
|
|
|
|
+ // PaperSpigot start - Allow redstone ticks to bypass the tickNextTickListCap
|
|
+ if (paperSpigotConfig.tickNextTickListCapIgnoresRedstone) {
|
|
+ Iterator<NextTickListEntry> iterator = this.M.iterator();
|
|
+ while (iterator.hasNext()) {
|
|
+ NextTickListEntry next = iterator.next();
|
|
+ if (!flag && next.b > this.worldData.getTime()) {
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (next.a().isPowerSource() || next.a() instanceof IContainer) {
|
|
+ iterator.remove();
|
|
+ this.V.add(next);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
this.methodProfiler.b();
|
|
this.methodProfiler.a("ticking");
|
|
Iterator iterator = this.V.iterator();
|
|
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
index 1915a7c..e00581c 100644
|
|
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
@@ -223,4 +223,14 @@ public class PaperSpigotWorldConfig
|
|
System.err.println( "==========================================" );
|
|
}
|
|
}
|
|
+
|
|
+ public int tickNextTickCap;
|
|
+ public boolean tickNextTickListCapIgnoresRedstone;
|
|
+ private void tickNextTickCap()
|
|
+ {
|
|
+ tickNextTickCap = getInt( "tick-next-tick-list-cap", 10000 ); // Higher values will be friendlier to vanilla style mechanics (to a point) but may hurt performance
|
|
+ tickNextTickListCapIgnoresRedstone = getBoolean( "tick-next-tick-list-cap-ignores-redstone", false ); // Redstone TickNextTicks will always bypass the preceding cap.
|
|
+ log( "WorldServer TickNextTick cap set at " + tickNextTickCap );
|
|
+ log( "WorldServer TickNextTickList cap always processes redstone: " + tickNextTickListCapIgnoresRedstone );
|
|
+ }
|
|
}
|
|
--
|
|
2.4.1.windows.1
|
|
|