From b7499d23f2eb260873873b4ca94147fd507625ce Mon Sep 17 00:00:00 2001 From: piexel Date: Sun, 25 Oct 2026 13:08:16 +0100 Subject: [PATCH] Sample terrain height for ERODE_STILT --- .../iris/structure/object/PlacementModuleStilt.java | 9 +-------- .../IrisObjectPlacementLifecycleRegressionTest.java | 9 +++++++++ .../iris/structure/object/ObjectPlacementGoldenTest.java | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/structure/object/PlacementModuleStilt.java b/core/src/main/java/art/arcane/iris/structure/object/PlacementModuleStilt.java index e39db190f..c67034a7b 100644 --- a/core/src/main/java/art/arcane/iris/structure/object/PlacementModuleStilt.java +++ b/core/src/main/java/art/arcane/iris/structure/object/PlacementModuleStilt.java @@ -36,20 +36,13 @@ public final class PlacementModuleStilt implements PlacementModule { PlacementModule height = switch (mode) { case CENTER, ORGANIC, CEILING -> new PlacementModuleCenterHeight(); case MIN -> new PlacementModuleHeight(PlacementModuleHeight.Mode.MIN, fast); - case DEFAULT -> new PlacementModuleHeight(PlacementModuleHeight.Mode.MAX, fast); - case ERODE -> PlacementModuleStilt::installUnsampledHeight; + case DEFAULT, ERODE -> new PlacementModuleHeight(PlacementModuleHeight.Mode.MAX, fast); }; height.install(lifecycle); lifecycle.add(FILL, PlacementStage.AFTER_BLOCKS, this::fill, PlacementModuleAnchor.HEIGHT, PlacementModuleBlocks.COMPLETE, PlacementModuleTreeGrounding.ROOTS); } - /** The legacy runner never sampled terrain for ERODE_STILT, so surface placements keep the unset height. */ - private static void installUnsampledHeight(PlacementLifecycleBuilder lifecycle) { - PlacementModuleAnchor.install(lifecycle, (context, state, ignored) -> { - }); - } - private static StiltLayers stiltLayers(ObjectPlacementBake bake, PlacementPalette palette) { int lowest = Integer.MAX_VALUE; int highest = Integer.MIN_VALUE; diff --git a/core/src/test/java/art/arcane/iris/structure/object/IrisObjectPlacementLifecycleRegressionTest.java b/core/src/test/java/art/arcane/iris/structure/object/IrisObjectPlacementLifecycleRegressionTest.java index 80e3019bc..7f180678c 100644 --- a/core/src/test/java/art/arcane/iris/structure/object/IrisObjectPlacementLifecycleRegressionTest.java +++ b/core/src/test/java/art/arcane/iris/structure/object/IrisObjectPlacementLifecycleRegressionTest.java @@ -249,6 +249,15 @@ public class IrisObjectPlacementLifecycleRegressionTest { assertTrue(placer.writes().stream().noneMatch(write -> write.y() <= 75)); } + @Test + public void erodeStiltResolvesItsOwnSampledAnchor() { + RecordingPlacer placer = new RecordingPlacer(null); + IrisObjectPlacement config = placement(); + config.setMode(ObjectPlaceMode.ERODE_STILT); + assertEquals(ANCHOR_Y, lineObject(1).place(0, -1, 0, placer, config, new RNG(2L), data)); + assertFalse(placer.writes().isEmpty()); + } + @Test public void explicitMinimumHeightAndFloatingDoNotNeedTerrainSampling() { for (ObjectPlaceMode mode : List.of(ObjectPlaceMode.MIN_HEIGHT, ObjectPlaceMode.FAST_MIN_HEIGHT, diff --git a/core/src/test/java/art/arcane/iris/structure/object/ObjectPlacementGoldenTest.java b/core/src/test/java/art/arcane/iris/structure/object/ObjectPlacementGoldenTest.java index 1b8141fe6..0fa8e52a7 100644 --- a/core/src/test/java/art/arcane/iris/structure/object/ObjectPlacementGoldenTest.java +++ b/core/src/test/java/art/arcane/iris/structure/object/ObjectPlacementGoldenTest.java @@ -63,7 +63,7 @@ public class ObjectPlacementGoldenTest { private static final int OBJECTS = 200; private static final int SEEDS = 5; - private static final long GOLDEN = 0x408f9d4113015897L; + private static final long GOLDEN = 0x07dedb3d00b420c0L; private static final long MARKER_GOLDEN = 0x60b4bbf1144b239cL; private static final long HIGH_VARIANT_GOLDEN = 0xf017622340ecac42L;