From 8e68e83e3d68246ce0f54efae73522fde13aef82 Mon Sep 17 00:00:00 2001 From: Brettflan Date: Wed, 6 Mar 2019 01:26:18 -0600 Subject: [PATCH] prevent issue of Fill process potentially making the server unresponsive while skipping over huge numbers of already fully generated chunks, most likely with very large already mostly generated worlds which are stored on old/slow hard drives --- .../java/com/wimbli/WorldBorder/WorldFillTask.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/wimbli/WorldBorder/WorldFillTask.java b/src/main/java/com/wimbli/WorldBorder/WorldFillTask.java index 6e48066..8ba7ced 100644 --- a/src/main/java/com/wimbli/WorldBorder/WorldFillTask.java +++ b/src/main/java/com/wimbli/WorldBorder/WorldFillTask.java @@ -47,8 +47,8 @@ public class WorldFillTask implements Runnable private transient int length = -1; private transient int current = 0; private transient boolean insideBorder = true; - private List storedChunks = new LinkedList(); - private Set originalChunks = new HashSet(); + private List storedChunks = new LinkedList<>(); + private Set originalChunks = new HashSet<>(); private transient CoordXZ lastChunk = new CoordXZ(0, 0); // for reporting progress back to user occasionally @@ -191,11 +191,18 @@ public class WorldFillTask implements Runnable if (!forceLoad) { // skip past any chunks which are confirmed as fully generated using our super-special isChunkFullyGenerated routine + int rLoop = 0; while (worldData.isChunkFullyGenerated(x, z)) { + rLoop++; insideBorder = true; if (!moveToNext()) return; + if (rLoop > 255) + { // only skim through max 256 chunks (~8 region files) at a time here, to allow process to take a break if needed + readyToGo = true; + return; + } } }