mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-18 22:30:12 +00:00
fix pregen save chunk failing
This commit is contained in:
@@ -23,16 +23,17 @@ import com.volmit.iris.core.IrisSettings;
|
|||||||
import com.volmit.iris.core.pregenerator.PregenListener;
|
import com.volmit.iris.core.pregenerator.PregenListener;
|
||||||
import com.volmit.iris.core.pregenerator.PregeneratorMethod;
|
import com.volmit.iris.core.pregenerator.PregeneratorMethod;
|
||||||
import com.volmit.iris.core.tools.IrisToolbelt;
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.mantle.Mantle;
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
import com.volmit.iris.util.parallel.MultiBurst;
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
@@ -58,26 +59,28 @@ public class AsyncPregenMethod implements PregeneratorMethod {
|
|||||||
|
|
||||||
private void unloadAndSaveAllChunks() {
|
private void unloadAndSaveAllChunks() {
|
||||||
try {
|
try {
|
||||||
J.sfut(() -> {
|
if (world == null) {
|
||||||
if (world == null) {
|
Iris.warn("World was null somehow...");
|
||||||
Iris.warn("World was null somehow...");
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
long minTime = M.ms() - 10_000;
|
long minTime = M.ms() - 10_000;
|
||||||
lastUse.entrySet().removeIf(i -> {
|
KList<CompletableFuture<?>> futures = new KList<>();
|
||||||
final Chunk chunk = i.getKey();
|
lastUse.entrySet().removeIf(i -> {
|
||||||
final Long lastUseTime = i.getValue();
|
final Chunk chunk = i.getKey();
|
||||||
if (!chunk.isLoaded() || lastUseTime == null)
|
final Long lastUseTime = i.getValue();
|
||||||
return true;
|
if (!chunk.isLoaded() || lastUseTime == null)
|
||||||
if (lastUseTime < minTime) {
|
return true;
|
||||||
chunk.unload();
|
if (lastUseTime < minTime) {
|
||||||
return true;
|
futures.add(Iris.platform.getRegionScheduler()
|
||||||
}
|
.run(chunk.getWorld(), chunk.getX(), chunk.getZ(), () -> chunk.unload())
|
||||||
return false;
|
.getResult());
|
||||||
});
|
return true;
|
||||||
world.save();
|
}
|
||||||
}).get();
|
return false;
|
||||||
|
});
|
||||||
|
futures.add(Iris.platform.getRegionScheduler().run(world, 0, 0, world::save).getResult());
|
||||||
|
CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).join();
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user