diff --git a/adapters/modded-common/src/main/java/art/arcane/iris/modded/ModdedWorldManager.java b/adapters/modded-common/src/main/java/art/arcane/iris/modded/ModdedWorldManager.java index e55391bf1..632055c63 100644 --- a/adapters/modded-common/src/main/java/art/arcane/iris/modded/ModdedWorldManager.java +++ b/adapters/modded-common/src/main/java/art/arcane/iris/modded/ModdedWorldManager.java @@ -245,7 +245,7 @@ public final class ModdedWorldManager implements EngineWorldManager { return true; } - MantleChunk chunk = mantle.getChunk(chunkX, chunkZ).use(); + MantleChunk chunk = mantle.useChunk(chunkX, chunkZ); try { List markers = markerSystemEnabled() ? prepareMarkerSpawns(level, chunkX, chunkZ, chunk) : List.of(); @@ -380,7 +380,7 @@ public final class ModdedWorldManager implements EngineWorldManager { return; } - MantleChunk chunk = mantle.getChunk(chunkX, chunkZ).use(); + MantleChunk chunk = mantle.useChunk(chunkX, chunkZ); try { if (markerSystemEnabled()) { spawnPreparedMarkers(level, prepareMarkerSpawns(level, chunkX, chunkZ, chunk), false); diff --git a/adapters/modded-common/src/main/java/art/arcane/iris/modded/service/ModdedChunkUpdateService.java b/adapters/modded-common/src/main/java/art/arcane/iris/modded/service/ModdedChunkUpdateService.java index b44a616fc..e29deb1c7 100644 --- a/adapters/modded-common/src/main/java/art/arcane/iris/modded/service/ModdedChunkUpdateService.java +++ b/adapters/modded-common/src/main/java/art/arcane/iris/modded/service/ModdedChunkUpdateService.java @@ -188,7 +188,7 @@ public final class ModdedChunkUpdateService implements ModdedTickableService { return; } - MantleChunk chunk = mantle.getChunk(chunkX, chunkZ).use(); + MantleChunk chunk = mantle.useChunk(chunkX, chunkZ); try { chunk.raiseFlagUnchecked(MantleFlag.ETCHED, () -> { chunk.raiseFlagUnchecked(MantleFlag.TILE, () -> runTilePass(engine, level, chunkX, chunkZ, chunk)); diff --git a/adapters/modded-common/src/test/java/art/arcane/iris/modded/ModdedSavedBiomeConsumersTest.java b/adapters/modded-common/src/test/java/art/arcane/iris/modded/ModdedSavedBiomeConsumersTest.java index c2a3526ab..a336910a9 100644 --- a/adapters/modded-common/src/test/java/art/arcane/iris/modded/ModdedSavedBiomeConsumersTest.java +++ b/adapters/modded-common/src/test/java/art/arcane/iris/modded/ModdedSavedBiomeConsumersTest.java @@ -70,8 +70,7 @@ public class ModdedSavedBiomeConsumersTest { when(engine.getWorld()).thenReturn(mock(IrisWorld.class)); when(engineMantle.getMantle()).thenReturn(mantle); when(mantle.isChunkLoaded(2, -1)).thenReturn(true); - when(mantle.getChunk(2, -1)).thenReturn(chunk); - when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(2, -1)).thenReturn(chunk); BiomeEnvironment environment = environment(); when(engine.getSurfaceBiomeEnvironment(40, -8)) .thenThrow(new SavedBiomeUnavailableException("Loading", true)) diff --git a/core/src/main/java/art/arcane/iris/generation/mantle/EngineMantle.java b/core/src/main/java/art/arcane/iris/generation/mantle/EngineMantle.java index 8300c5afb..96112c72f 100644 --- a/core/src/main/java/art/arcane/iris/generation/mantle/EngineMantle.java +++ b/core/src/main/java/art/arcane/iris/generation/mantle/EngineMantle.java @@ -212,7 +212,7 @@ public interface EngineMantle extends MatterGenerator { boolean protectUpper = upperCtx != null; DimensionStackContext stackContext = getEngine().getDimensionStackContext(); - MantleChunk chunk = getMantle().getChunk(x, z).use(); + MantleChunk chunk = getMantle().useChunk(x, z); try { if (stackContext != null) { DimensionStackLayout[] layouts = new DimensionStackLayout[256]; @@ -317,24 +317,33 @@ public interface EngineMantle extends MatterGenerator { } default boolean cleanupCoveredChunk(int x, int z, boolean force) { - return cleanupCoveredChunk(getMantle().getChunk(x, z), force); + MantleChunk chunk = getMantle().useChunk(x, z); + try { + return cleanupUsedChunk(chunk, force); + } finally { + chunk.release(); + } } default boolean cleanupCoveredChunk(MantleChunk chunk, boolean force) { chunk.use(); try { - synchronized (chunk) { - if (chunk.isFlagged(MantleFlag.CLEANED)) { - return false; - } - chunk.raiseFlagUnchecked(MantleFlag.CLEANED, () -> cleanupSlices(chunk, force)); - return true; - } + return cleanupUsedChunk(chunk, force); } finally { chunk.release(); } } + private boolean cleanupUsedChunk(MantleChunk chunk, boolean force) { + synchronized (chunk) { + if (chunk.isFlagged(MantleFlag.CLEANED)) { + return false; + } + chunk.raiseFlagUnchecked(MantleFlag.CLEANED, () -> cleanupSlices(chunk, force)); + return true; + } + } + private void cleanupSlices(MantleChunk chunk, boolean force) { MantleSliceRetention.deleteUnlessRetained(chunk, NativeBlockState.class); if (force) { diff --git a/core/src/main/java/art/arcane/iris/generation/mantle/MantleWriter.java b/core/src/main/java/art/arcane/iris/generation/mantle/MantleWriter.java index f5009f63c..b0d73e233 100644 --- a/core/src/main/java/art/arcane/iris/generation/mantle/MantleWriter.java +++ b/core/src/main/java/art/arcane/iris/generation/mantle/MantleWriter.java @@ -880,7 +880,7 @@ public class MantleWriter implements ObjectPassPlacer, AutoCloseable { while (chunk == null) { // Losing this race must release our own use, never the winner's: the winner is already // writing through the chunk it published. - MantleChunk acquired = mantle.getChunk(cx, cz).use(); + MantleChunk acquired = mantle.useChunk(cx, cz); if (window.compareAndSet(index, null, acquired)) { chunk = acquired; } else { diff --git a/core/src/main/java/art/arcane/iris/generation/mantle/ObjectContinuationPersistence.java b/core/src/main/java/art/arcane/iris/generation/mantle/ObjectContinuationPersistence.java index 9730e924c..cff0b068b 100644 --- a/core/src/main/java/art/arcane/iris/generation/mantle/ObjectContinuationPersistence.java +++ b/core/src/main/java/art/arcane/iris/generation/mantle/ObjectContinuationPersistence.java @@ -26,7 +26,7 @@ public final class ObjectContinuationPersistence { List touched = List.copyOf(destinations.keySet()); for (Map.Entry> entry : destinations.entrySet()) { ObjectContinuationBundle.ChunkPosition destination = entry.getKey(); - MantleChunk chunk = mantle.getChunk(destination.x(), destination.z()).use(); + MantleChunk chunk = mantle.useChunk(destination.x(), destination.z()); try { synchronized (chunk) { if (chunk.isFlagged(MantleFlag.REAL)) { diff --git a/core/src/main/java/art/arcane/iris/generation/runtime/Engine.java b/core/src/main/java/art/arcane/iris/generation/runtime/Engine.java index 6816d3739..f017370d7 100644 --- a/core/src/main/java/art/arcane/iris/generation/runtime/Engine.java +++ b/core/src/main/java/art/arcane/iris/generation/runtime/Engine.java @@ -371,7 +371,7 @@ public interface Engine extends DataProvider, Fallible, BlockUpdater, Renderer, Mantle mantle = getMantle().getMantle(); int chunkX = x >> 4; int chunkZ = z >> 4; - return mantle.hasTectonicPlate(chunkX >> 5, chunkZ >> 5) ? mantle.getChunk(chunkX, chunkZ).use() : null; + return mantle.hasTectonicPlate(chunkX >> 5, chunkZ >> 5) ? mantle.useChunk(chunkX, chunkZ) : null; } /** @@ -763,7 +763,7 @@ public interface Engine extends DataProvider, Fallible, BlockUpdater, Renderer, return o.getObject().getLoadKey() + "@" + o.getId(); } - MantleChunk chunk = getMantle().getMantle().getChunk(x >> 4, z >> 4).use(); + MantleChunk chunk = getMantle().getMantle().useChunk(x >> 4, z >> 4); try { String raw = chunk.get(x & 15, y, z & 15, String.class); return (raw == null || raw.isEmpty()) ? null : raw; @@ -773,7 +773,7 @@ public interface Engine extends DataProvider, Fallible, BlockUpdater, Renderer, } default PlacedObject getObjectPlacement(int x, int y, int z) { - MantleChunk chunk = getMantle().getMantle().getChunk(x >> 4, z >> 4).use(); + MantleChunk chunk = getMantle().getMantle().useChunk(x >> 4, z >> 4); try { return getObjectPlacement(x, y, z, chunk); } finally { diff --git a/core/src/main/java/art/arcane/iris/generation/runtime/EngineMode.java b/core/src/main/java/art/arcane/iris/generation/runtime/EngineMode.java index 768c68dea..df3f7a5cf 100644 --- a/core/src/main/java/art/arcane/iris/generation/runtime/EngineMode.java +++ b/core/src/main/java/art/arcane/iris/generation/runtime/EngineMode.java @@ -262,7 +262,7 @@ public interface EngineMode extends Staged { } private void restoreObjectMetadata(int x, int z, Matter continuation) { - MantleChunk chunk = getMantle().getMantle().getChunk(x >> 4, z >> 4).use(); + MantleChunk chunk = getMantle().getMantle().useChunk(x >> 4, z >> 4); try { synchronized (chunk) { MatterSlice states = continuation.getSlice(NativeBlockState.class); diff --git a/core/src/main/java/art/arcane/iris/generation/runtime/IrisEngine.java b/core/src/main/java/art/arcane/iris/generation/runtime/IrisEngine.java index 7e683ca2a..5fb5cd1e6 100644 --- a/core/src/main/java/art/arcane/iris/generation/runtime/IrisEngine.java +++ b/core/src/main/java/art/arcane/iris/generation/runtime/IrisEngine.java @@ -1507,7 +1507,7 @@ public class IrisEngine implements Engine { boolean skipRealFlag = platformHooks.shouldBypassMantleStages(this); if (!skipRealFlag) { - MantleChunk chunk = getMantle().getMantle().getChunk(x >> 4, z >> 4).use(); + MantleChunk chunk = getMantle().getMantle().useChunk(x >> 4, z >> 4); try { synchronized (chunk) { Matter section = chunk.get(0); diff --git a/core/src/main/java/art/arcane/iris/generation/runtime/WorldChunkMaintenance.java b/core/src/main/java/art/arcane/iris/generation/runtime/WorldChunkMaintenance.java index be0b4c64a..faa867718 100644 --- a/core/src/main/java/art/arcane/iris/generation/runtime/WorldChunkMaintenance.java +++ b/core/src/main/java/art/arcane/iris/generation/runtime/WorldChunkMaintenance.java @@ -157,7 +157,7 @@ final class WorldChunkMaintenance { } if (!J.isFolia()) { - manager.getMantle().getChunk(chunkX, chunkZ).flag(MantleFlag.DISCOVERED, true); + manager.getMantle().flag(chunkX, chunkZ, MantleFlag.DISCOVERED, true); return; } @@ -473,7 +473,7 @@ final class WorldChunkMaintenance { preparing = true; } opened = router.openSavedChunkMantle(target.x(), target.z()); - loaded = opened.mantle().getChunk(target.x(), target.z()).use(); + loaded = opened.mantle().useChunk(target.x(), target.z()); opened.detachThread(); synchronized (this) { if (cancelled) { diff --git a/core/src/main/java/art/arcane/iris/generation/stage/IrisCarveModifier.java b/core/src/main/java/art/arcane/iris/generation/stage/IrisCarveModifier.java index 940e5e40c..287563f20 100644 --- a/core/src/main/java/art/arcane/iris/generation/stage/IrisCarveModifier.java +++ b/core/src/main/java/art/arcane/iris/generation/stage/IrisCarveModifier.java @@ -124,7 +124,7 @@ public class IrisCarveModifier extends EngineAssignedModifier } } - MantleChunk mantleChunk = mantle.getChunk(x, z).use(); + MantleChunk mantleChunk = mantle.useChunk(x, z); try { PrecisionStopwatch resolveStopwatch = PrecisionStopwatch.start(); CaveTerrainSnapshot terrain = CaveTerrainSnapshot.capture(mantleChunk, x, z); @@ -873,7 +873,7 @@ public class IrisCarveModifier extends EngineAssignedModifier context.setCaveTerrain(null); } if (terrain == null || !terrain.covers(blockX >> 4, blockZ >> 4)) { - MantleChunk chunk = mantle.getChunk(blockX >> 4, blockZ >> 4).use(); + MantleChunk chunk = mantle.useChunk(blockX >> 4, blockZ >> 4); try { terrain = CaveTerrainSnapshot.capture(chunk, blockX >> 4, blockZ >> 4); } finally { diff --git a/core/src/main/java/art/arcane/iris/generation/stage/IrisCustomModifier.java b/core/src/main/java/art/arcane/iris/generation/stage/IrisCustomModifier.java index e7b148d2f..b3347df86 100644 --- a/core/src/main/java/art/arcane/iris/generation/stage/IrisCustomModifier.java +++ b/core/src/main/java/art/arcane/iris/generation/stage/IrisCustomModifier.java @@ -19,11 +19,11 @@ public class IrisCustomModifier extends EngineAssignedModifier @Override public void onModify(int x, int z, Hunk output, boolean multicore, ChunkContext context) { - MantleChunk mc = getEngine().getMantle().getMantle().getChunk(x >> 4, z >> 4); + MantleChunk mc = getEngine().getMantle().getMantle().useChunk(x >> 4, z >> 4); if (!mc.isFlagged(MantleFlag.CUSTOM_ACTIVE)) { + mc.release(); return; } - mc.use(); BurstExecutor burst = MultiBurst.burst.burst(output.getHeight()); burst.setMulticore(multicore); diff --git a/core/src/main/java/art/arcane/iris/generation/stage/IrisDepositModifier.java b/core/src/main/java/art/arcane/iris/generation/stage/IrisDepositModifier.java index afd4ee15b..c22dc82cf 100644 --- a/core/src/main/java/art/arcane/iris/generation/stage/IrisDepositModifier.java +++ b/core/src/main/java/art/arcane/iris/generation/stage/IrisDepositModifier.java @@ -93,7 +93,7 @@ public class IrisDepositModifier extends EngineAssignedModifier mantleChunk = getEngine().getMantle().getMantle().getChunk(x >> 4, z >> 4).use(); + MantleChunk mantleChunk = getEngine().getMantle().getMantle().useChunk(x >> 4, z >> 4); try { MetadataCleaner metadata = new MetadataCleaner(mantleChunk, blocks.getHeight()); for (int localX = 0; localX < blocks.getWidth(); localX++) { @@ -111,7 +111,7 @@ public final class IrisDimensionStackActuator extends EngineAssignedActuator chunk = engine.getMantle().getMantle().getChunk(x >> 4, z >> 4).use(); + MantleChunk chunk = engine.getMantle().getMantle().useChunk(x >> 4, z >> 4); try { synchronized (chunk) { clearNaturalMetadata(chunk, context, height); diff --git a/core/src/main/java/art/arcane/iris/platform/generation/EngineBukkitOps.java b/core/src/main/java/art/arcane/iris/platform/generation/EngineBukkitOps.java index d5b7af828..b84bf94f8 100644 --- a/core/src/main/java/art/arcane/iris/platform/generation/EngineBukkitOps.java +++ b/core/src/main/java/art/arcane/iris/platform/generation/EngineBukkitOps.java @@ -132,7 +132,7 @@ public final class EngineBukkitOps { return; } - MantleChunk chunk = mantle.getChunk(c).use(); + MantleChunk chunk = mantle.useChunk(c); try { Runnable tileTask = () -> materializeTiles(engine, c, chunk); Runnable customTask = () -> materializeCustomBlocks(engine, c, chunk); @@ -461,7 +461,7 @@ public final class EngineBukkitOps { } public static KList getLootTables(Engine engine, RNG rng, Block b) { - MantleChunk mc = engine.getMantle().getMantle().getChunk(b.getChunk()).use(); + MantleChunk mc = engine.getMantle().getMantle().useChunk(b.getChunk()); try { return getLootTables(engine, rng, b, mc, hasNativeLootTable(b)); } finally { diff --git a/core/src/main/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStore.java b/core/src/main/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStore.java index 1acd1b070..288678096 100644 --- a/core/src/main/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStore.java +++ b/core/src/main/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStore.java @@ -264,7 +264,7 @@ public final class NativeStructureOwnershipStore { @Override public NativeStructureOwnershipBundle read(int chunkX, int chunkZ) { RuntimeMantleOwner owner = owner(); - MantleChunk chunk = owner.mantle().getMantle().getChunk(chunkX, chunkZ).use(); + MantleChunk chunk = owner.mantle().getMantle().useChunk(chunkX, chunkZ); try { synchronized (chunk) { return chunk.get(0, 0, 0, NativeStructureOwnershipBundle.class); @@ -279,7 +279,7 @@ public final class NativeStructureOwnershipStore { RuntimeMantleOwner owner = owner(); int targetChunkX = unpackX(target); int targetChunkZ = unpackZ(target); - MantleChunk chunk = owner.mantle().getMantle().getChunk(targetChunkX, targetChunkZ).use(); + MantleChunk chunk = owner.mantle().getMantle().useChunk(targetChunkX, targetChunkZ); try { synchronized (chunk) { Matter section = chunk.getOrCreate(0); @@ -302,7 +302,7 @@ public final class NativeStructureOwnershipStore { RuntimeMantleOwner owner = owner(); int targetChunkX = unpackX(target); int targetChunkZ = unpackZ(target); - MantleChunk chunk = owner.mantle().getMantle().getChunk(targetChunkX, targetChunkZ).use(); + MantleChunk chunk = owner.mantle().getMantle().useChunk(targetChunkX, targetChunkZ); try { synchronized (chunk) { Matter section = chunk.getOrCreate(0); @@ -396,7 +396,7 @@ public final class NativeStructureOwnershipStore { private void restorePendingBundle(Mantle mantle, long target, NativeStructureOwnershipBundle bundle) { - MantleChunk chunk = mantle.getChunk(unpackX(target), unpackZ(target)).use(); + MantleChunk chunk = mantle.useChunk(unpackX(target), unpackZ(target)); try { synchronized (chunk) { Matter section = chunk.getOrCreate(0); diff --git a/core/src/main/java/art/arcane/iris/structure/object/IrisStaticObjectLayer.java b/core/src/main/java/art/arcane/iris/structure/object/IrisStaticObjectLayer.java index 798cea822..ddf2022c1 100644 --- a/core/src/main/java/art/arcane/iris/structure/object/IrisStaticObjectLayer.java +++ b/core/src/main/java/art/arcane/iris/structure/object/IrisStaticObjectLayer.java @@ -154,8 +154,7 @@ public final class IrisStaticObjectLayer { return; } persistContinuations(engine, x >> 4, z >> 4, output.getHeight()); - MantleChunk chunk = engine.getMantle().getMantle().getChunk(x >> 4, z >> 4); - chunk.use(); + MantleChunk chunk = engine.getMantle().getMantle().useChunk(x >> 4, z >> 4); try { for (Block block : blocks) { Matter section = chunk.getOrCreate(block.y() >> 4); diff --git a/core/src/main/java/art/arcane/iris/world/history/GenerationHistoryRuntimeRouter.java b/core/src/main/java/art/arcane/iris/world/history/GenerationHistoryRuntimeRouter.java index 6062406ab..42a244213 100644 --- a/core/src/main/java/art/arcane/iris/world/history/GenerationHistoryRuntimeRouter.java +++ b/core/src/main/java/art/arcane/iris/world/history/GenerationHistoryRuntimeRouter.java @@ -574,7 +574,7 @@ public final class GenerationHistoryRuntimeRouter implements AutoCloseable { SavedMantleAccess access = acquireSavedMantle(activation, requireEpoch(activation)); try { Mantle mantle = access.mantle(); - MantleChunk anchor = mantle.getChunk(regionX << 5, regionZ << 5).use(); + MantleChunk anchor = mantle.useChunk(regionX << 5, regionZ << 5); try { TectonicPlate plate = mantle.getLoadedRegion(regionX, regionZ); HashMap bundles = new HashMap<>(); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCleanupTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCleanupTest.java index 437097950..9fb9c0011 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCleanupTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCleanupTest.java @@ -169,8 +169,7 @@ public class EngineMantleCleanupTest { MantleChunk chunk = mock(MantleChunk.class); when(engineMantle.getMantle()).thenReturn(mantle); doReturn(true).when(engineMantle).isCovered(7, -4); - when(mantle.getChunk(7, -4)).thenReturn(chunk); - when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(7, -4)).thenReturn(chunk); doAnswer(invocation -> { Runnable cleanup = invocation.getArgument(1); cleanup.run(); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCoverageTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCoverageTest.java index ccf0934f5..9d0b1c692 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCoverageTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/EngineMantleCoverageTest.java @@ -197,7 +197,7 @@ public class EngineMantleCoverageTest { assertTrue(actual.isEmpty()); verify(fixture.mantle(), never()).hasLoadedFlag(anyInt(), anyInt(), any()); - verify(fixture.mantle(), never()).getChunk(anyInt(), anyInt()); + verify(fixture.mantle(), never()).useChunk(anyInt(), anyInt()); when(fixture.mantle().isChunkLoaded(anyInt(), anyInt())).thenReturn(true); fixture.engine().cleanupChunksCoveredBy(0, 0, true, @@ -217,7 +217,7 @@ public class EngineMantleCoverageTest { assertTrue(actual.isEmpty()); assertTrue(fixture.cleaned().isEmpty()); - verify(fixture.mantle(), never()).getChunk(anyInt(), anyInt()); + verify(fixture.mantle(), never()).useChunk(anyInt(), anyInt()); verify(fixture.mantle(), never()).hasFlag(anyInt(), anyInt(), any()); } @@ -233,7 +233,7 @@ public class EngineMantleCoverageTest { assertTrue(actual.isEmpty()); verify(fixture.mantle(), never()).withLoadedChunk(anyInt(), anyInt(), any()); - verify(fixture.mantle(), never()).getChunk(anyInt(), anyInt()); + verify(fixture.mantle(), never()).useChunk(anyInt(), anyInt()); verify(fixture.mantle(), never()).hasFlag(anyInt(), anyInt(), any()); } @@ -270,7 +270,7 @@ public class EngineMantleCoverageTest { }); } assertEquals(List.of(new Chunk(0, 0)), actual); - verify(fixture.mantle(), never()).getChunk(anyInt(), anyInt()); + verify(fixture.mantle(), never()).useChunk(anyInt(), anyInt()); verify(fixture.mantle(), never()).hasFlag(anyInt(), anyInt(), any()); } diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/FloatingObjectPlacementTransactionTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/FloatingObjectPlacementTransactionTest.java index 058b9fab0..12a1b15b2 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/FloatingObjectPlacementTransactionTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/FloatingObjectPlacementTransactionTest.java @@ -112,10 +112,8 @@ public class FloatingObjectPlacementTransactionTest { when(engine.getHeight()).thenReturn(128); when(engine.getMantle()).thenReturn(engineMantle); when(engineMantle.getMantle()).thenReturn(mantle); - when(mantle.getChunk(0, 0)).thenReturn(left); - when(mantle.getChunk(1, 0)).thenReturn(right); - when(left.use()).thenReturn(left); - when(right.use()).thenReturn(right); + when(mantle.useChunk(0, 0)).thenReturn(left); + when(mantle.useChunk(1, 0)).thenReturn(right); when(left.getOrCreate(0)).thenReturn(leftSection); when(right.getOrCreate(0)).thenReturn(rightSection); NativeBlockState state = mock(NativeBlockState.class); @@ -146,8 +144,7 @@ public class FloatingObjectPlacementTransactionTest { MantleChunk chunk = mock(MantleChunk.class); when(engine.getMantle()).thenReturn(engineMantle); when(engineMantle.getMantle()).thenReturn(mantle); - when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); - when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.isFlagged(MantleFlag.REAL)).thenReturn(true); when(placer.getEngine()).thenReturn(engine); when(placer.canWriteObjectBlock(anyInt(), anyInt(), anyInt())).thenAnswer(invocation -> { diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/MantleCarvingComponentBoundaryRadiusTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/MantleCarvingComponentBoundaryRadiusTest.java index 20fc171f3..8721e8507 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/MantleCarvingComponentBoundaryRadiusTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/MantleCarvingComponentBoundaryRadiusTest.java @@ -67,6 +67,7 @@ public class MantleCarvingComponentBoundaryRadiusTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/MantleObjectComponentBoundaryRadiusTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/MantleObjectComponentBoundaryRadiusTest.java index bca1f7dd9..09467ff87 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/MantleObjectComponentBoundaryRadiusTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/MantleObjectComponentBoundaryRadiusTest.java @@ -319,6 +319,7 @@ public class MantleObjectComponentBoundaryRadiusTest { when(mantle.getWorldHeight()).thenReturn(64); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterOverlayTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterOverlayTest.java index bdc9a58ac..bb7f0cfa6 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterOverlayTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterOverlayTest.java @@ -68,6 +68,7 @@ public class MantleWriterOverlayTest { when(engine.getDimension()).thenReturn(dimension); when(mantle.getChunk(0, 0)).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(0, 0)).thenAnswer(call -> chunk.use()); when(chunk.getOrCreate(0)).thenReturn(matter); when(chunk.exists(0)).thenReturn(true); when(chunk.get(0)).thenReturn(matter); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterPreObjectJournalTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterPreObjectJournalTest.java index b38337348..840a0cab9 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterPreObjectJournalTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/MantleWriterPreObjectJournalTest.java @@ -82,6 +82,7 @@ public class MantleWriterPreObjectJournalTest { when(mantle.getWorldHeight()).thenReturn(32); when(mantle.getChunk(0, 0)).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(0, 0)).thenAnswer(call -> chunk.use()); when(chunk.exists(0)).thenReturn(true); when(chunk.getOrCreate(0)).thenReturn(matter); when(chunk.get(0)).thenReturn(matter); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorCarvePassRadiusTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorCarvePassRadiusTest.java index d327ab4a2..0117f6cee 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorCarvePassRadiusTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorCarvePassRadiusTest.java @@ -39,6 +39,7 @@ public class MatterGeneratorCarvePassRadiusTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); @@ -76,6 +77,7 @@ public class MatterGeneratorCarvePassRadiusTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); @@ -107,6 +109,7 @@ public class MatterGeneratorCarvePassRadiusTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); @@ -144,6 +147,7 @@ public class MatterGeneratorCarvePassRadiusTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); @@ -184,6 +188,7 @@ public class MatterGeneratorCarvePassRadiusTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk.use()); doAnswer(invocation -> { Runnable task = invocation.getArgument(1); task.run(); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorConcurrencyTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorConcurrencyTest.java index 5f8f8339e..ad9cf6d22 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorConcurrencyTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/MatterGeneratorConcurrencyTest.java @@ -776,6 +776,8 @@ public class MatterGeneratorConcurrencyTest { long key = (((long) chunkX) << 32) ^ (chunkZ & 0xffffffffL); return chunks.computeIfAbsent(key, ignored -> lockingChunks ? lockingChunk() : chunk()); }); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(invocation -> + mantle.getChunk(invocation.getArgument(0), invocation.getArgument(1)).use()); context = mock(ChunkContext.class); when(context.getGenerationSessionId()).thenReturn(91L); } diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/ObjectContinuationTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/ObjectContinuationTest.java index b6dd2c259..787828f11 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/ObjectContinuationTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/ObjectContinuationTest.java @@ -246,10 +246,8 @@ public class ObjectContinuationTest { Mantle mantle = mock(Mantle.class); MantleChunk saved = mock(MantleChunk.class); MantleChunk future = mock(MantleChunk.class); - when(mantle.getChunk(0, 0)).thenReturn(saved); - when(mantle.getChunk(1, 0)).thenReturn(future); - when(saved.use()).thenReturn(saved); - when(future.use()).thenReturn(future); + when(mantle.useChunk(0, 0)).thenReturn(saved); + when(mantle.useChunk(1, 0)).thenReturn(future); when(saved.isFlagged(MantleFlag.REAL)).thenReturn(true); Matter section = new IrisMatter(16, 16, 16); when(future.getOrCreate(0)).thenReturn(section); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/ObjectDestinationTransactionTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/ObjectDestinationTransactionTest.java index 0a24bfca0..9ebf6ad43 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/ObjectDestinationTransactionTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/ObjectDestinationTransactionTest.java @@ -634,6 +634,7 @@ public class ObjectDestinationTransactionTest { when(mantle.getWorldHeight()).thenReturn(16); when(mantle.getChunk(0, 0)).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(0, 0)).thenAnswer(call -> chunk.use()); when(chunk.exists(0)).thenReturn(true); when(chunk.getOrCreate(0)).thenReturn(matter); when(chunk.get(0)).thenReturn(matter); diff --git a/core/src/test/java/art/arcane/iris/generation/mantle/TerrainPlacementQueryTest.java b/core/src/test/java/art/arcane/iris/generation/mantle/TerrainPlacementQueryTest.java index 9f1d36133..fe040c129 100644 --- a/core/src/test/java/art/arcane/iris/generation/mantle/TerrainPlacementQueryTest.java +++ b/core/src/test/java/art/arcane/iris/generation/mantle/TerrainPlacementQueryTest.java @@ -80,6 +80,7 @@ public class TerrainPlacementQueryTest { MantleChunk chunk = mock(MantleChunk.class); when(mantle.getChunk(0, 0)).thenReturn(chunk); when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(0, 0)).thenAnswer(call -> chunk.use()); when(chunk.exists(0)).thenReturn(true); matter = new IrisMatter(16, 16, 16); when(chunk.get(0)).thenReturn(matter); diff --git a/core/src/test/java/art/arcane/iris/generation/runtime/DimensionTerrain3DCompositionTest.java b/core/src/test/java/art/arcane/iris/generation/runtime/DimensionTerrain3DCompositionTest.java index decd6087b..c98fbac04 100644 --- a/core/src/test/java/art/arcane/iris/generation/runtime/DimensionTerrain3DCompositionTest.java +++ b/core/src/test/java/art/arcane/iris/generation/runtime/DimensionTerrain3DCompositionTest.java @@ -308,6 +308,7 @@ public class DimensionTerrain3DCompositionTest { when(engineMantle.getMantle()).thenReturn(mantle); when(mantle.getChunk(0, 0)).thenReturn(mantleChunk); when(mantleChunk.use()).thenReturn(mantleChunk); + when(mantle.useChunk(0, 0)).thenAnswer(call -> mantleChunk.use()); when(context.getDimensionStackLayout(0, 0)).thenReturn(layout); Hunk output = Hunk.newArrayHunk(1, height, 1); for (int y = 0; y < height; y++) { diff --git a/core/src/test/java/art/arcane/iris/generation/runtime/EngineBiomeColumnTest.java b/core/src/test/java/art/arcane/iris/generation/runtime/EngineBiomeColumnTest.java index 65f612c61..c0691a103 100644 --- a/core/src/test/java/art/arcane/iris/generation/runtime/EngineBiomeColumnTest.java +++ b/core/src/test/java/art/arcane/iris/generation/runtime/EngineBiomeColumnTest.java @@ -106,11 +106,10 @@ public class EngineBiomeColumnTest { when(mantle.hasTectonicPlate(anyInt(), anyInt())).thenReturn(true); when(mantle.get(anyInt(), anyInt(), anyInt(), eq(MatterCavern.class))).thenAnswer(call -> cavern(salt, call.getArgument(0), call.getArgument(1), call.getArgument(2))); - when(mantle.getChunk(anyInt(), anyInt())).thenAnswer(call -> { + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> { int chunkX = call.getArgument(0); int chunkZ = call.getArgument(1); MantleChunk chunk = mock(MantleChunk.class); - when(chunk.use()).thenReturn(chunk); when(chunk.get(anyInt(), anyInt(), anyInt(), eq(MatterCavern.class))).thenAnswer(read -> cavern(salt, chunkX * 16 + (int) read.getArgument(0), read.getArgument(1), chunkZ * 16 + (int) read.getArgument(2))); return chunk; diff --git a/core/src/test/java/art/arcane/iris/generation/runtime/IrisCarveWallPaletteScopeTest.java b/core/src/test/java/art/arcane/iris/generation/runtime/IrisCarveWallPaletteScopeTest.java index 04cfa19a2..bbbe5cb48 100644 --- a/core/src/test/java/art/arcane/iris/generation/runtime/IrisCarveWallPaletteScopeTest.java +++ b/core/src/test/java/art/arcane/iris/generation/runtime/IrisCarveWallPaletteScopeTest.java @@ -184,8 +184,7 @@ public class IrisCarveWallPaletteScopeTest { chunk = mock(MantleChunk.class); EngineMantle engineMantle = mock(EngineMantle.class); doReturn(mantle).when(engineMantle).getMantle(); - doReturn(chunk).when(mantle).getChunk(-2, 3); - doReturn(chunk).when(chunk).use(); + doReturn(chunk).when(mantle).useChunk(-2, 3); IrisMatterSupport.ensureRegistered(); Matter section = new IrisMatter(16, 16, 16); for (int coordinate : new int[]{4, 8, 12}) { diff --git a/core/src/test/java/art/arcane/iris/generation/runtime/WorldChunkMaintenanceRoutingTest.java b/core/src/test/java/art/arcane/iris/generation/runtime/WorldChunkMaintenanceRoutingTest.java index 96e2ee1a2..8b4f00aaf 100644 --- a/core/src/test/java/art/arcane/iris/generation/runtime/WorldChunkMaintenanceRoutingTest.java +++ b/core/src/test/java/art/arcane/iris/generation/runtime/WorldChunkMaintenanceRoutingTest.java @@ -58,7 +58,7 @@ public class WorldChunkMaintenanceRoutingTest { public void materializesTheSavedOwnerAndKeepsSpawningAfterCompletion() throws Exception { try (Fixture fixture = new Fixture()) { fixture.schedule(); - verify(fixture.currentMantle, never()).getChunk(2, -1); + verify(fixture.currentMantle, never()).useChunk(2, -1); fixture.prepare(); verify(fixture.savedChunk).use(); @@ -285,6 +285,7 @@ public class WorldChunkMaintenanceRoutingTest { when(saved.mantle()).thenReturn(savedMantle); when(savedMantle.getChunk(2, -1)).thenReturn(savedChunk); when(savedChunk.use()).thenReturn(savedChunk); + when(savedMantle.useChunk(2, -1)).thenAnswer(invocation -> savedMantle.getChunk(2, -1).use()); when(savedMantle.isChunkLoaded(2, -1)).thenReturn(true); when(savedMantle.hasFlag(2, -1, MantleFlag.ETCHED)).thenAnswer(invocation -> etched.get()); when(router.openSavedChunkMantle(2, -1)).thenReturn(saved); diff --git a/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierContextTest.java b/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierContextTest.java index 7542b6a98..bd75deeae 100644 --- a/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierContextTest.java +++ b/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierContextTest.java @@ -177,8 +177,7 @@ public class IrisDepositModifierContextTest { .thenReturn(new KList<>(biomeDeposit)); chunk = mock(MantleChunk.class); Mantle mantle = engine.getMantle().getMantle(); - doReturn(chunk).when(mantle).getChunk(2, -3); - when(chunk.use()).thenReturn(chunk); + doReturn(chunk).when(mantle).useChunk(2, -3); if (engine instanceof IrisEngine irisEngine) { when(irisEngine.hasGenerationRuntimeScope()).thenReturn(scoped); when(irisEngine.captureGenerationRuntimeBinding()).thenReturn(binding); diff --git a/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierOrderingTest.java b/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierOrderingTest.java index 11ccacd26..a72f64587 100644 --- a/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierOrderingTest.java +++ b/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierOrderingTest.java @@ -296,8 +296,7 @@ public class IrisDepositModifierOrderingTest { when(context.getGenerationSessionId()).thenReturn(11L); chunk = mock(MantleChunk.class); Mantle mantle = engine.getMantle().getMantle(); - doReturn(chunk).when(mantle).getChunk(0, 0); - when(chunk.use()).thenReturn(chunk); + doReturn(chunk).when(mantle).useChunk(0, 0); MultiBurst pool = mock(MultiBurst.class); BurstExecutor burst = new BurstExecutor(executor, 3); burst.setMulticore(parallel); diff --git a/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierParityTest.java b/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierParityTest.java index 45c47dede..8b69e3b0b 100644 --- a/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierParityTest.java +++ b/core/src/test/java/art/arcane/iris/generation/stage/IrisDepositModifierParityTest.java @@ -193,8 +193,7 @@ public class IrisDepositModifierParityTest { when(context.getRegion().get(anyInt(), anyInt())).thenReturn(region); MantleChunk chunk = mock(MantleChunk.class); Mantle mantle = engine.getMantle().getMantle(); - doReturn(chunk).when(mantle).getChunk(-3, 5); - when(chunk.use()).thenReturn(chunk); + doReturn(chunk).when(mantle).useChunk(-3, 5); MatterCavern cavern = new MatterCavern(true, "allowed", (byte) 0); when(chunk.get(anyInt(), anyInt(), anyInt(), any())).thenAnswer(invocation -> { int x = invocation.getArgument(0); diff --git a/core/src/test/java/art/arcane/iris/generation/stage/IrisNaturalCaveScanTest.java b/core/src/test/java/art/arcane/iris/generation/stage/IrisNaturalCaveScanTest.java index 59045f346..fac251a2c 100644 --- a/core/src/test/java/art/arcane/iris/generation/stage/IrisNaturalCaveScanTest.java +++ b/core/src/test/java/art/arcane/iris/generation/stage/IrisNaturalCaveScanTest.java @@ -81,18 +81,18 @@ public class IrisNaturalCaveScanTest { Fixture fixture = new Fixture(); ChunkContext context = mock(ChunkContext.class); doReturn(CaveTerrainSnapshot.capture(fixture.chunk, -2, 3)).when(context).getCaveTerrain(); - clearInvocations(fixture.chunk); + clearInvocations(fixture.mantle); fixture.modifier.decorateNaturalCaves(-32, 48, fixture.output(3, 2), context); - verify(fixture.chunk, never()).use(); + verify(fixture.mantle, never()).useChunk(anyInt(), anyInt()); verify(context).setCaveTerrain(null); assertFalse(fixture.calls.isEmpty()); Fixture other = new Fixture(); ChunkContext stale = mock(ChunkContext.class); doReturn(CaveTerrainSnapshot.capture(other.chunk, 5, 5)).when(stale).getCaveTerrain(); - clearInvocations(other.chunk); + clearInvocations(other.mantle); other.modifier.decorateNaturalCaves(-32, 48, other.output(3, 2), stale); - verify(other.chunk).use(); + verify(other.mantle).useChunk(-2, 3); assertEquals(fixture.calls, other.calls); } @@ -213,7 +213,7 @@ public class IrisNaturalCaveScanTest { assertEquals(expectedWrites, writes); assertEquals(expectedMarkers, fixture.markers); assertTrue("fixture must exercise marker writes", !expectedMarkers.isEmpty()); - verify(fixture.chunk).use(); + verify(fixture.mantle).useChunk(-2, 3); verify(fixture.chunk).release(); } @@ -236,6 +236,7 @@ public class IrisNaturalCaveScanTest { private final NativeBlockState floor = block("minecraft:moss_block", true); private final NativeBlockState ceiling = block("minecraft:calcite", true); private final IrisCarveModifier modifier = mock(IrisCarveModifier.class, CALLS_REAL_METHODS); + private final Mantle mantle; private final MantleChunk chunk; private final List calls = new ArrayList<>(); private final List markers = new ArrayList<>(); @@ -248,7 +249,7 @@ public class IrisNaturalCaveScanTest { private Fixture(boolean buildAboveTop) throws Exception { Engine engine = mock(Engine.class); EngineMantle engineMantle = mock(EngineMantle.class); - Mantle mantle = mock(Mantle.class); + mantle = mock(Mantle.class); chunk = mock(MantleChunk.class); doReturn(engine).when(modifier).getEngine(); doReturn(mock(IrisComplex.class)).when(modifier).getComplex(); @@ -256,8 +257,7 @@ public class IrisNaturalCaveScanTest { doReturn(new SeedManager(1337L)).when(engine).getSeedManager(); doReturn(engineMantle).when(engine).getMantle(); doReturn(mantle).when(engineMantle).getMantle(); - doReturn(chunk).when(mantle).getChunk(-2, 3); - doReturn(chunk).when(chunk).use(); + doReturn(chunk).when(mantle).useChunk(-2, 3); doAnswer(call -> { markers.add(call.getArgument(0) + ":" + call.getArgument(1) + ":" + call.getArgument(2) + ":" + call.getArgument(3)); return null; diff --git a/core/src/test/java/art/arcane/iris/platform/generation/EngineBukkitOpsDeferredMaterializationTest.java b/core/src/test/java/art/arcane/iris/platform/generation/EngineBukkitOpsDeferredMaterializationTest.java index b067f0b48..ad538f68e 100644 --- a/core/src/test/java/art/arcane/iris/platform/generation/EngineBukkitOpsDeferredMaterializationTest.java +++ b/core/src/test/java/art/arcane/iris/platform/generation/EngineBukkitOpsDeferredMaterializationTest.java @@ -87,7 +87,7 @@ public class EngineBukkitOpsDeferredMaterializationTest { Block block = mock(Block.class); when(chunk.getBlock(1, 2, 3)).thenReturn(block); when(saved.isLoaded(chunk)).thenReturn(true); - when(saved.getChunk(chunk)).thenReturn(stored); + when(saved.useChunk(chunk)).thenAnswer(invocation -> stored.use()); ExternalDataSVC provider = mock(ExternalDataSVC.class); try (MockedStatic scheduling = mockStatic(J.class); diff --git a/core/src/test/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStoreTest.java b/core/src/test/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStoreTest.java index 455c2063c..094c31c08 100644 --- a/core/src/test/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStoreTest.java +++ b/core/src/test/java/art/arcane/iris/structure/nativegen/NativeStructureOwnershipStoreTest.java @@ -456,9 +456,9 @@ public class NativeStructureOwnershipStoreTest { currentRuntime.set(12); assertTrue(storage.flush()); - verify(mantleA.mantle(), times(2)).getChunk(4, -5); + verify(mantleA.mantle(), times(2)).useChunk(4, -5); verify(mantleA.mantle()).saveIdleTectonicPlates(any()); - verify(mantleB.mantle(), never()).getChunk(anyInt(), anyInt()); + verify(mantleB.mantle(), never()).useChunk(anyInt(), anyInt()); verify(mantleB.mantle(), never()).saveIdleTectonicPlates(any()); storage.close(); } @@ -491,9 +491,9 @@ public class NativeStructureOwnershipStoreTest { storage.write(NativeStructureOwnershipStore.pack(9, -10), recordB); assertTrue(storage.flush()); - verify(mantleA.mantle(), times(2)).getChunk(-7, 8); + verify(mantleA.mantle(), times(2)).useChunk(-7, 8); verify(mantleA.mantle()).saveIdleTectonicPlates(any()); - verify(mantleB.mantle(), times(2)).getChunk(9, -10); + verify(mantleB.mantle(), times(2)).useChunk(9, -10); verify(mantleB.mantle()).saveIdleTectonicPlates(any()); storage.close(); } @@ -519,8 +519,7 @@ public class NativeStructureOwnershipStoreTest { Matter section = mock(Matter.class); MatterSlice slice = mock(MatterSlice.class); when(engineMantle.getMantle()).thenReturn(mantle); - when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); - when(chunk.use()).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.getOrCreate(0)).thenReturn(section); when(section.slice( NativeStructureOwnershipBundle.class)).thenReturn(slice); diff --git a/core/src/test/java/art/arcane/iris/structure/object/IrisStaticObjectLayerTest.java b/core/src/test/java/art/arcane/iris/structure/object/IrisStaticObjectLayerTest.java index aab08a4ae..f4ba419b4 100644 --- a/core/src/test/java/art/arcane/iris/structure/object/IrisStaticObjectLayerTest.java +++ b/core/src/test/java/art/arcane/iris/structure/object/IrisStaticObjectLayerTest.java @@ -187,9 +187,8 @@ public class IrisStaticObjectLayerTest { MatterSlice tiles = mock(MatterSlice.class); when(engine.getMantle()).thenReturn(engineMantle); when(engineMantle.getMantle()).thenReturn(mantle); - when(mantle.getChunk(anyInt(), anyInt())).thenReturn(chunk); + when(mantle.useChunk(anyInt(), anyInt())).thenReturn(chunk); when(chunk.getOrCreate(anyInt())).thenReturn(section); - when(chunk.use()).thenReturn(chunk); when(section.getSlice(TileWrapper.class)).thenReturn(tiles); when(chunk.isFlagged(MantleFlag.REAL)).thenReturn(true); Hunk left = Hunk.newArrayHunk(16, 384, 16); @@ -402,7 +401,7 @@ public class IrisStaticObjectLayerTest { when(engine.getMantle()).thenReturn(engineMantle); when(engineMantle.getMantle()).thenReturn(mantle); when(mantle.getWorldHeight()).thenReturn(384); - when(mantle.getChunk(anyInt(), anyInt())).thenAnswer(call -> chunk(call.getArgument(0), call.getArgument(1))); + when(mantle.useChunk(anyInt(), anyInt())).thenAnswer(call -> chunk(call.getArgument(0), call.getArgument(1))); } @SuppressWarnings("unchecked") @@ -410,7 +409,6 @@ public class IrisStaticObjectLayerTest { return chunks.computeIfAbsent(new ObjectContinuationBundle.ChunkPosition(x, z), key -> { MantleChunk chunk = mock(MantleChunk.class); Map sections = new HashMap<>(); - when(chunk.use()).thenReturn(chunk); when(chunk.get(anyInt())).thenAnswer(call -> sections.get((int) call.getArgument(0))); when(chunk.getOrCreate(anyInt())).thenAnswer(call -> sections.computeIfAbsent(call.getArgument(0), section -> new IrisMatter(16, 16, 16))); diff --git a/probe/src/test/java/art/arcane/iris/probe/ObjectContinuationProbeTest.java b/probe/src/test/java/art/arcane/iris/probe/ObjectContinuationProbeTest.java index e80e4d8de..9f83b7fc7 100644 --- a/probe/src/test/java/art/arcane/iris/probe/ObjectContinuationProbeTest.java +++ b/probe/src/test/java/art/arcane/iris/probe/ObjectContinuationProbeTest.java @@ -290,7 +290,7 @@ public final class ObjectContinuationProbeTest { } GenerationHistoryRuntimeRouter router = engine.getGenerationHistoryRuntimeRouter().orElseThrow(); try (GenerationHistoryRuntimeRouter.SavedChunkMantle saved = router.openSavedChunkMantle(0, 0)) { - MantleChunk chunk = saved.mantle().getChunk(0, 0).use(); + MantleChunk chunk = saved.mantle().useChunk(0, 0); try { for (Map.Entry edit : edits.entrySet()) { Position position = edit.getKey();