package net.minecraft.world.level.block; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.block.state.properties.RailShape; public class RailBlock extends BaseRailBlock { public static final MapCodec CODEC = simpleCodec(RailBlock::new); public static final EnumProperty SHAPE = BlockStateProperties.RAIL_SHAPE; @Override public MapCodec codec() { return CODEC; } protected RailBlock(BlockBehaviour.Properties properties) { super(false, properties); this.registerDefaultState(this.stateDefinition.any().setValue(SHAPE, RailShape.NORTH_SOUTH).setValue(WATERLOGGED, false)); } @Override protected void updateState(BlockState state, Level level, BlockPos pos, Block neighborBlock) { if (neighborBlock.defaultBlockState().isSignalSource() && new RailState(level, pos, state).countPotentialConnections() == 3) { this.updateDir(level, pos, state, false); } } @Override public Property getShapeProperty() { return SHAPE; } @Override protected BlockState rotate(BlockState state, Rotation rotation) { RailShape railShape = state.getValue(SHAPE); RailShape railShape2 = this.rotate(railShape, rotation); return state.setValue(SHAPE, railShape2); } @Override protected BlockState mirror(BlockState state, Mirror mirror) { RailShape railShape = state.getValue(SHAPE); RailShape railShape2 = this.mirror(railShape, mirror); return state.setValue(SHAPE, railShape2); } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(SHAPE, WATERLOGGED); } }