Skip to content

Commit

Permalink
Change rail creator logic
Browse files Browse the repository at this point in the history
  • Loading branch information
zbx1425 committed Apr 24, 2024
1 parent 44e8cee commit 3878527
Showing 1 changed file with 21 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand All @@ -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);
}
});
}
Expand All @@ -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;
}

}

0 comments on commit 3878527

Please sign in to comment.