Re-enable light queue toggle, optimize neighbor checks, add max queue time
light queue is actually buggy, so re-enabling the config. however, if anyone is ok with the buggy behavior, made the max time lost due to light queue configurable. We want to get to making the ligth queue default if we can make it work perfectly. also applying neighbor optimizations to use the faster method for light checks.
This commit is contained in:
@@ -27,8 +27,24 @@ index 145cb274b0..eff9dcf54f 100644
|
||||
}
|
||||
|
||||
public static Timing getTickList(WorldServer worldserver, String timingsType) {
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
index 4812da0dac..d0eb7c0fc2 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperConfig {
|
||||
return config.getString(path, config.getString(path));
|
||||
}
|
||||
|
||||
+ public static int maxTickMsLostLightQueue;
|
||||
+ private static void lightQueue() {
|
||||
+ maxTickMsLostLightQueue = getInt("queue-light-updates-max-loss", 10);
|
||||
+ }
|
||||
+
|
||||
private static void timings() {
|
||||
boolean timings = getBoolean("timings.enabled", true);
|
||||
boolean verboseTimings = getBoolean("timings.verbose", true);
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 39d565db1f..9fd1bde0ef 100644
|
||||
index 39d565db1f..8f6f0288be 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
@@ -36,14 +52,16 @@ index 39d565db1f..9fd1bde0ef 100644
|
||||
log("Top of the nether void damage: " + netherVoidTopDamage);
|
||||
}
|
||||
+
|
||||
+ public boolean queueLightUpdates = true; // This doesn't need to be configurable, it's not buggy.
|
||||
+ public boolean queueLightUpdates;
|
||||
+ private void queueLightUpdates() {
|
||||
+ //queueLightUpdates = getBoolean("queue-light-updates", false);
|
||||
+ //log("Lighting Queue enabled: " + queueLightUpdates);
|
||||
+ queueLightUpdates = getBoolean("queue-light-updates", false);
|
||||
+ log("Lighting Queue enabled: " + queueLightUpdates);
|
||||
+ log("Warning: This feature may help reduce TPS loss from light, but comes at the cost of buggy light data");
|
||||
+ log("We are working to improve this feature.");
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 4622e92b05..703c377f93 100644
|
||||
index 4622e92b05..e43442c8bd 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
|
||||
@@ -70,7 +88,20 @@ index 4622e92b05..703c377f93 100644
|
||||
+ private void recheckGaps(boolean flag) { g(flag); } // Paper - OBFHELPER
|
||||
private void g(boolean flag) {
|
||||
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)) {
|
||||
+ if (this.areNeighborsLoaded(1)) { // Paper
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
for (int j = 0; j < 16; ++j) {
|
||||
if (this.g[i + j * 16]) {
|
||||
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
|
||||
}
|
||||
|
||||
private void a(int i, int j, int k, int l) {
|
||||
- if (l > k && this.world.areChunksLoaded(new BlockPosition(i, 0, j), 16)) {
|
||||
+ if (l > k && this.areNeighborsLoaded(1)) { // Paper
|
||||
for (int i1 = k; i1 < l; ++i1) {
|
||||
this.world.c(EnumSkyBlock.SKY, new BlockPosition(i, i1, j));
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
|
||||
if (flag1) {
|
||||
this.initLighting();
|
||||
@@ -159,19 +190,20 @@ index d6ea4ae532..5086fe4027 100644
|
||||
}
|
||||
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 0000000000..84e313bf8c
|
||||
index 0000000000..bfb05e8766
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/minecraft/server/PaperLightingQueue.java
|
||||
@@ -0,0 +0,0 @@
|
||||
+package net.minecraft.server;
|
||||
+
|
||||
+import co.aikar.timings.Timing;
|
||||
+import com.destroystokyo.paper.PaperConfig;
|
||||
+import it.unimi.dsi.fastutil.objects.ObjectCollection;
|
||||
+
|
||||
+import java.util.ArrayDeque;
|
||||
+
|
||||
+class PaperLightingQueue {
|
||||
+ private static final long MAX_TIME = (long) (1000000000 / 20 * .95);
|
||||
+ private static final long MAX_TIME = (long) (1000000 * (50 + PaperConfig.maxTickMsLostLightQueue));
|
||||
+
|
||||
+ static void processQueue(long curTime) {
|
||||
+ final long startTime = System.nanoTime();
|
||||
|
||||
Reference in New Issue
Block a user