diff --git a/common/src/main/java/cn/zbx1425/mtrsteamloco/mixin/RailActionsMixin.java b/common/src/main/java/cn/zbx1425/mtrsteamloco/mixin/RailActionsMixin.java index 7b8c2259..c731062b 100644 --- a/common/src/main/java/cn/zbx1425/mtrsteamloco/mixin/RailActionsMixin.java +++ b/common/src/main/java/cn/zbx1425/mtrsteamloco/mixin/RailActionsMixin.java @@ -4,6 +4,7 @@ import mtr.data.RailwayData; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.SlabType; @@ -33,9 +34,9 @@ public abstract class RailActionsMixin { @Shadow @Final private Level world; - @Shadow private static BlockPos getHalfPos(BlockPos pos, boolean isTopHalf) { throw new AssertionError(); } + @Shadow private static BlockPos getHalfPos(BlockPos pos, boolean isTopHalf) { return null; } - @Shadow(remap = false) private static boolean canPlace(Level world, BlockPos pos) { throw new AssertionError(); } + @Shadow(remap = false) private static boolean canPlace(Level world, BlockPos pos) { return true; } @Shadow(remap = false) @Final private int radius; @@ -46,24 +47,30 @@ public abstract class RailActionsMixin { @Overwrite(remap = false) private boolean createBridge() { return this.create(false, (editPos) -> { - BlockPos pos = RailwayData.newBlockPos(editPos); - boolean isTopHalf = editPos.y - Math.floor(editPos.y) >= 0.5; - BlockPos placePos; + double refY = editPos.y; + BlockPos pos = RailwayData.newBlockPos(editPos.x, refY, editPos.z); + boolean isTopHalf = refY - Math.floor(refY) >= 0.5; + + BlockPos placePos, airPos; BlockState placeState; - boolean placeHalf; if (this.isSlab && isTopHalf) { placePos = pos; + airPos = pos.above(); placeState = this.state.setValue(SlabBlock.TYPE, SlabType.BOTTOM); - placeHalf = false; } else { placePos = pos.below(); - placeState = this.isSlab ? this.state.setValue(SlabBlock.TYPE, SlabType.TOP) : this.state; - placeHalf = true; + airPos = pos; + placeState = this.isSlab ? this.state.setValue(SlabBlock.TYPE, SlabType.DOUBLE) : this.state; + } + + if (!blacklistedPos.contains(placePos) && canPlace(world, placePos)) { + world.setBlockAndUpdate(placePos, placeState); + blacklistedPos.add(placePos); } - BlockPos halfPlacePos = getHalfPos(placePos, placeHalf); - if (!this.blacklistedPos.contains(halfPlacePos) && canPlace(this.world, placePos)) { - this.world.setBlockAndUpdate(placePos, placeState); - this.blacklistedPos.add(halfPlacePos); + + if (!blacklistedPos.contains(airPos) && canPlace(world, airPos)) { + world.setBlockAndUpdate(airPos, Blocks.AIR.defaultBlockState()); + blacklistedPos.add(airPos); } }); } @@ -75,7 +82,7 @@ private double redirectCreateAbs(double a) { @ModifyConstant(method = "create", constant = @Constant(doubleValue = 0.01), remap = false) private double modifyCreateInterval1(double original) { - return 0.1; + return 0.05; } }