From 4307c11aab2ae0f741f21f575215a5aa4beaa3b8 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 25 Jun 2022 01:25:32 +0200 Subject: [PATCH] [Fix] Search for Vertical surfaces stays in Chunk (quiqueck/BetterNether#6) --- .../features/config/PlaceFacingBlockConfig.java | 7 +++++-- .../features/placement/FindSolidInDirection.java | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/features/config/PlaceFacingBlockConfig.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/features/config/PlaceFacingBlockConfig.java index c6e8b278..be57714f 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/features/config/PlaceFacingBlockConfig.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/features/config/PlaceFacingBlockConfig.java @@ -76,10 +76,13 @@ public class PlaceFacingBlockConfig extends PlaceBlockFeatureConfig { BlockState targetState ) { BlockState lookupState; + BlockPos testPos; for (Direction dir : directions) { + testPos = pos.relative(dir.getOpposite()); lookupState = targetState.setValue(HorizontalDirectionalBlock.FACING, dir); - if (lookupState.canSurvive(level, pos)) { - BlocksHelper.setWithoutUpdate(level, pos, lookupState); + if (lookupState.canSurvive(level, testPos) && level.getBlockState(testPos).isAir()) { + BlocksHelper.setWithoutUpdate(level, testPos, lookupState); + //BlocksHelper.setWithoutUpdate(level, pos, level.getBlockState(pos.relative(dir.getOpposite()))); return true; } } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/features/placement/FindSolidInDirection.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/features/placement/FindSolidInDirection.java index 800c286f..266aba20 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/features/placement/FindSolidInDirection.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/features/placement/FindSolidInDirection.java @@ -6,6 +6,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.RandomSource; import net.minecraft.util.valueproviders.IntProvider; @@ -102,12 +103,24 @@ public class FindSolidInDirection extends PlacementModifier { Stream.Builder builder, Direction d ) { + int searchDist; BlockPos.MutableBlockPos POS = blockPos.mutable(); + if (d == Direction.EAST) { //+x + searchDist = Math.min(maxSearchDistance, 15 - SectionPos.sectionRelative(blockPos.getX())); + } else if (d == Direction.WEST) { //-x + searchDist = Math.min(maxSearchDistance, SectionPos.sectionRelative(blockPos.getX())); + } else if (d == Direction.SOUTH) { //+z + searchDist = Math.min(maxSearchDistance, 15 - SectionPos.sectionRelative(blockPos.getZ())); + } else if (d == Direction.NORTH) { //-z + searchDist = Math.min(maxSearchDistance, SectionPos.sectionRelative(blockPos.getZ())); + } else { + searchDist = maxSearchDistance; + } if (BlocksHelper.findOnSurroundingSurface( placementContext.getLevel(), POS, d, - maxSearchDistance, + searchDist, BlocksHelper::isTerrain )) { builder.add(POS);