Completed offline decorator hooks

- Offline generation resolves decorator support without Bukkit classes
- Probe coverage checks solid, fluid and air spike support
This commit is contained in:
Brian Neumann-Fopiano
2026-09-06 03:10:04 -04:00
parent 942545dcb9
commit 057d51f211
2 changed files with 17 additions and 0 deletions
@@ -18,6 +18,7 @@
package art.arcane.iris.probe; package art.arcane.iris.probe;
import art.arcane.iris.engine.decorator.DecoratorPlatformHooks;
import art.arcane.iris.engine.object.BlockDataMergeSupport; import art.arcane.iris.engine.object.BlockDataMergeSupport;
import art.arcane.iris.engine.object.IrisObjectRotation; import art.arcane.iris.engine.object.IrisObjectRotation;
import art.arcane.iris.engine.object.TileData; import art.arcane.iris.engine.object.TileData;
@@ -57,6 +58,8 @@ public final class StubPlatform implements IrisPlatform {
} }
public static void bindGenerationStateHandlers() { public static void bindGenerationStateHandlers() {
DecoratorPlatformHooks.bind((state, hunk, rX, rZ, x, y, z, mantle) -> state,
(surface, upward) -> surface.isOccluding());
IrisObjectRotation.bindPlatformRotator(StubPlatform::rotateState); IrisObjectRotation.bindPlatformRotator(StubPlatform::rotateState);
BlockDataMergeSupport.bindPlatformMerger(StubPlatform::mergeStates); BlockDataMergeSupport.bindPlatformMerger(StubPlatform::mergeStates);
TileData.bindPlatformReader(StubTileData::read); TileData.bindPlatformReader(StubTileData::read);
@@ -1,8 +1,10 @@
package art.arcane.iris.probe; package art.arcane.iris.probe;
import art.arcane.iris.engine.decorator.IrisSpeleothems;
import art.arcane.iris.engine.object.IrisObjectRotation; import art.arcane.iris.engine.object.IrisObjectRotation;
import art.arcane.iris.spi.IrisPlatforms; import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.util.project.hunk.Hunk;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
@@ -80,6 +82,18 @@ public final class StubPlatformStateTest {
assertFalse(state("minecraft:brain_coral_fan").isWaterLogged()); assertFalse(state("minecraft:brain_coral_fan").isWaterLogged());
} }
@Test
public void resolvesSpikeSupportWithoutServerClasses() {
Hunk<PlatformBlockState> blocks = Hunk.newArrayHunk(1, 3, 1);
PlatformBlockState spike = state("minecraft:pointed_dripstone[vertical_direction=up,thickness=tip]");
blocks.set(0, 0, 0, state("minecraft:stone"));
assertTrue(IrisSpeleothems.isSupported(spike, blocks, 0, 0, 1));
blocks.set(0, 0, 0, state("minecraft:water[level=0]"));
assertFalse(IrisSpeleothems.isSupported(spike, blocks, 0, 0, 1));
blocks.set(0, 0, 0, state("minecraft:air"));
assertFalse(IrisSpeleothems.isSupported(spike, blocks, 0, 0, 1));
}
private PlatformBlockState state(String key) { private PlatformBlockState state(String key) {
return IrisPlatforms.get().registries().block(key); return IrisPlatforms.get().registries().block(key);
} }