refactor mantle cleanup

This commit is contained in:
Julian Krings 2025-06-02 14:46:37 +02:00
parent 2436ebb857
commit adb7188eb9
No known key found for this signature in database
GPG Key ID: 208C6E08C3B718D2
4 changed files with 25 additions and 15 deletions

View File

@ -162,6 +162,7 @@ public class IrisSettings {
public int objectLoaderCacheSize = 4_096; public int objectLoaderCacheSize = 4_096;
public int scriptLoaderCacheSize = 512; public int scriptLoaderCacheSize = 512;
public int tectonicPlateSize = -1; public int tectonicPlateSize = -1;
public int mantleCleanupDelay = 200;
public int getTectonicPlateSize() { public int getTectonicPlateSize() {
if (tectonicPlateSize > 0) if (tectonicPlateSize > 0)

View File

@ -55,6 +55,7 @@ import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.ref.WeakReference;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -422,9 +423,16 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
return; return;
} }
energy += 0.3; var ref = new WeakReference<>(e.getWorld());
fixEnergy(); int x = e.getX(), z = e.getZ();
getEngine().cleanupMantleChunk(e.getX(), e.getZ()); J.s(() -> {
World world = ref.get();
if (world == null || !world.isChunkLoaded(x, z))
return;
energy += 0.3;
fixEnergy();
getEngine().cleanupMantleChunk(x, z);
}, IrisSettings.get().getPerformance().mantleCleanupDelay);
if (generated) { if (generated) {
//INMS.get().injectBiomesFromMantle(e, getMantle()); //INMS.get().injectBiomesFromMantle(e, getMantle());

View File

@ -289,13 +289,17 @@ public interface EngineMantle extends IObjectPlacer {
} }
default void cleanupChunk(int x, int z) { default void cleanupChunk(int x, int z) {
if (!getMantle().hasFlag(x, z, MantleFlag.CLEANED) && isCovered(x, z)) { if (!isCovered(x, z)) return;
getMantle().raiseFlag(x, z, MantleFlag.CLEANED, () -> { MantleChunk chunk = getMantle().getChunk(x, z).use();
getMantle().deleteChunkSlice(x, z, BlockData.class); try {
getMantle().deleteChunkSlice(x, z, String.class); chunk.raiseFlag(MantleFlag.CLEANED, () -> {
getMantle().deleteChunkSlice(x, z, MatterCavern.class); chunk.deleteSlices(BlockData.class);
getMantle().deleteChunkSlice(x, z, MatterFluidBody.class); chunk.deleteSlices(String.class);
chunk.deleteSlices(MatterCavern.class);
chunk.deleteSlices(MatterFluidBody.class);
}); });
} finally {
chunk.release();
} }
} }

View File

@ -421,12 +421,9 @@ public class Mantle {
} }
adjustedIdleDuration.set(baseIdleDuration); adjustedIdleDuration.set(baseIdleDuration);
if (loadedRegions.size() > tectonicLimit) {
if (loadedRegions != null) { // todo update this correctly and maybe do something when its above a 100%
if (loadedRegions.size() > tectonicLimit) { adjustedIdleDuration.set(Math.max(adjustedIdleDuration.get() - (1000 * (((loadedRegions.size() - tectonicLimit) / (double) tectonicLimit) * 100) * 0.4), 4000));
// todo update this correctly and maybe do something when its above a 100%
adjustedIdleDuration.set(Math.max(adjustedIdleDuration.get() - (1000 * (((loadedRegions.size() - tectonicLimit) / (double) tectonicLimit) * 100) * 0.4), 4000));
}
} }
ioTrim.set(true); ioTrim.set(true);