diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java
index 7e67fd7bb..eb81b2d72 100644
--- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java
+++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java
@@ -362,7 +362,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
region = new LightedWorldGenRegion(params.level, lightEngine, referencedChunks,
ChunkStatus.STRUCTURE_STARTS, refSize/2, e.lightMode, generator);
adaptor.setRegion(region);
- e.tParam.makeStructFeat(region, params);
+ e.threadedParam.makeStructFeat(region, params);
genChunks = new ArrayGridList<>(referencedChunks, RANGE_TO_RANGE_EMPTY_EXTENSION,
referencedChunks.gridSize - RANGE_TO_RANGE_EMPTY_EXTENSION);
generateDirect(e, genChunks, e.target, region);
@@ -370,7 +370,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
}
catch (StepStructureStart.StructStartCorruptedException f)
{
- e.tParam.markAsInvalid();
+ e.threadedParam.markAsInvalid();
throw (RuntimeException)f.getCause();
}
@@ -418,7 +418,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
e.refreshTimeout();
if (PREF_LOGGER.canMaybeLog())
{
- e.tParam.perf.recordEvent(e.timer);
+ e.threadedParam.perf.recordEvent(e.timer);
PREF_LOGGER.infoInc("{}", e.timer);
}
}
@@ -439,27 +439,27 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
if (step == Steps.Empty)
return;
e.timer.nextEvent("structStart");
- stepStructureStart.generateGroup(e.tParam, region, subRange);
+ stepStructureStart.generateGroup(e.threadedParam, region, subRange);
e.refreshTimeout();
if (step == Steps.StructureStart)
return;
e.timer.nextEvent("structRef");
- stepStructureReference.generateGroup(e.tParam, region, subRange);
+ stepStructureReference.generateGroup(e.threadedParam, region, subRange);
e.refreshTimeout();
if (step == Steps.StructureReference)
return;
e.timer.nextEvent("biome");
- stepBiomes.generateGroup(e.tParam, region, subRange);
+ stepBiomes.generateGroup(e.threadedParam, region, subRange);
e.refreshTimeout();
if (step == Steps.Biomes)
return;
e.timer.nextEvent("noise");
- stepNoise.generateGroup(e.tParam, region, subRange);
+ stepNoise.generateGroup(e.threadedParam, region, subRange);
e.refreshTimeout();
if (step == Steps.Noise)
return;
e.timer.nextEvent("surface");
- stepSurface.generateGroup(e.tParam, region, subRange);
+ stepSurface.generateGroup(e.threadedParam, region, subRange);
e.refreshTimeout();
if (step == Steps.Surface)
return;
@@ -467,7 +467,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
if (step == Steps.Carvers)
return;
e.timer.nextEvent("feature");
- stepFeatures.generateGroup(e.tParam, region, subRange);
+ stepFeatures.generateGroup(e.threadedParam, region, subRange);
e.refreshTimeout();
}
finally
diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GenerationEvent.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GenerationEvent.java
index abed31898..fe9bc56cd 100644
--- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GenerationEvent.java
+++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GenerationEvent.java
@@ -16,7 +16,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
-
+
package com.seibel.lod.common.wrappers.worldGeneration;
import java.lang.invoke.MethodHandles;
@@ -41,7 +41,7 @@ public final class GenerationEvent
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
private static int generationFutureDebugIDs = 0;
final int id;
- final ThreadedParameters tParam;
+ final ThreadedParameters threadedParam;
final DhChunkPos minPos;
final int size;
final Steps target;
@@ -52,93 +52,113 @@ public final class GenerationEvent
long timeoutTime = -1;
public CompletableFuture future = null;
final Consumer resultConsumer;
-
+
+
+
public GenerationEvent(DhChunkPos minPos, int size, BatchGenerationEnvironment generationGroup,
- Steps target, double runTimeRatio, Consumer resultConsumer) {
- inQueueTime = System.nanoTime();
+ Steps target, double runTimeRatio, Consumer resultConsumer)
+ {
+ this.inQueueTime = System.nanoTime();
this.id = generationFutureDebugIDs++;
this.minPos = minPos;
this.size = size;
this.target = target;
- this.tParam = ThreadedParameters.getOrMake(generationGroup.params);
+ this.threadedParam = ThreadedParameters.getOrMake(generationGroup.params);
this.lightMode = Config.Client.WorldGenerator.lightGenerationMode.get();
this.runTimeRatio = runTimeRatio;
this.resultConsumer = resultConsumer;
}
-
+
+
+
public static GenerationEvent startEvent(DhChunkPos minPos, int size, BatchGenerationEnvironment generationGroup,
- Steps target, double runTimeRatio, Consumer resultConsumer)
+ Steps target, double runTimeRatio, Consumer resultConsumer)
{
- if (size % 2 == 0) size += 1; // size must be odd for vanilla world gen region to work
+ if (size % 2 == 0)
+ {
+ size += 1; // size must be odd for vanilla world gen regions to work
+ }
+
GenerationEvent event = new GenerationEvent(minPos, size, generationGroup, target, runTimeRatio, resultConsumer);
event.future = CompletableFuture.runAsync(() ->
+ {
+ long runStartTime = System.nanoTime();
+ event.timeoutTime = runStartTime;
+ event.inQueueTime = runStartTime - event.inQueueTime;
+ event.timer = new EventTimer("setup");
+ BatchGenerationEnvironment.isDistantGeneratorThread.set(true);
+ try
+ {
+ LOGGER.info("generating [{}]", event.minPos);
+ generationGroup.generateLodFromList(event);
+ }
+ finally
+ {
+ BatchGenerationEnvironment.isDistantGeneratorThread.remove();
+ if (!Thread.interrupted() && runTimeRatio < 1.0)
{
- long runStartTime = System.nanoTime();
- event.timeoutTime = runStartTime;
- event.inQueueTime = runStartTime - event.inQueueTime;
- event.timer = new EventTimer("setup");
- BatchGenerationEnvironment.isDistantGeneratorThread.set(true);
- try {
- generationGroup.generateLodFromList(event);
- } finally {
- BatchGenerationEnvironment.isDistantGeneratorThread.remove();
- if (!Thread.interrupted() && runTimeRatio < 1.0) {
- long endTime = System.nanoTime();
- try {
- long deltaMs = TimeUnit.NANOSECONDS.toMillis(endTime - runStartTime);
- Thread.sleep((long) (deltaMs/runTimeRatio - deltaMs));
- } catch (InterruptedException ignored) {}
- }
+ long endTime = System.nanoTime();
+ try
+ {
+ long deltaMs = TimeUnit.NANOSECONDS.toMillis(endTime - runStartTime);
+ Thread.sleep((long) (deltaMs / runTimeRatio - deltaMs));
}
- }, generationGroup.executors);
+ catch (InterruptedException ignored)
+ {
+ }
+ }
+ }
+ }, generationGroup.executors);
return event;
}
-
- public boolean isComplete()
- {
- return future.isDone();
- }
-
+
+ public boolean isComplete() { return this.future.isDone(); }
+
public boolean hasTimeout(int duration, TimeUnit unit)
{
- if (timeoutTime == -1) return false;
+ if (this.timeoutTime == -1)
+ {
+ return false;
+ }
+
long currentTime = System.nanoTime();
- long delta = currentTime - timeoutTime;
+ long delta = currentTime - this.timeoutTime;
return (delta > TimeUnit.NANOSECONDS.convert(duration, unit));
}
-
+
public boolean terminate()
{
LOGGER.info("======================DUMPING ALL THREADS FOR WORLD GEN=======================");
BatchGenerationEnvironment.threadFactory.dumpAllThreadStacks();
- future.cancel(true);
- return future.isCancelled();
+ this.future.cancel(true);
+ return this.future.isCancelled();
}
- public boolean tooClose(int minX, int minZ, int w)
+ public boolean tooClose(int minX, int minZ, int width)
{
- int aMinX = minPos.x;
- int aMinZ = minPos.z;
- int aSize = size;
+ int aMinX = this.minPos.x;
+ int aMinZ = this.minPos.z;
+ int aSize = this.size;
// Account for required empty chunks in the border
aSize += 1;
- w+= 1;
+ width += 1;
// Do a AABB to AABB intersection test
return (aMinX + aSize >= minX &&
- aMinX <= minX + w &&
+ aMinX <= minX + width &&
aMinZ + aSize >= minZ &&
- aMinZ <= minZ + w);
+ aMinZ <= minZ + width);
}
public void refreshTimeout()
{
- timeoutTime = System.nanoTime();
+ this.timeoutTime = System.nanoTime();
UncheckedInterruptedException.throwIfInterrupted();
}
@Override
public String toString()
{
- return id + ":" + size + "@" + minPos + "(" + target + ")";
+ return this.id + ":" + this.size + "@" + this.minPos + "(" + this.target + ")";
}
+
}
\ No newline at end of file
diff --git a/coreSubProjects b/coreSubProjects
index 98fde3de7..59d5b475c 160000
--- a/coreSubProjects
+++ b/coreSubProjects
@@ -1 +1 @@
-Subproject commit 98fde3de74d786311ec947354e85d5de703732aa
+Subproject commit 59d5b475c5ec9208122aa7b3b6ccc03d88115b49