317 lines
16 KiB
Java
317 lines
16 KiB
Java
package net.minecraft.world.level.block;
|
|
|
|
import net.minecraft.world.level.block.state.AbstractStateHolder;
|
|
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|
import net.minecraft.world.level.block.state.StateDefinition;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.state.properties.Property;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
import net.minecraft.world.level.block.state.properties.RailShape;
|
|
import net.minecraft.world.level.block.state.properties.EnumProperty;
|
|
|
|
public class PoweredRailBlock extends BaseRailBlock {
|
|
public static final EnumProperty<RailShape> SHAPE;
|
|
public static final BooleanProperty POWERED;
|
|
|
|
protected PoweredRailBlock(final Properties c) {
|
|
super(true, c);
|
|
this.registerDefaultState((((AbstractStateHolder<O, BlockState>)this.stateDefinition.any()).setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_SOUTH)).<Comparable, Boolean>setValue((Property<Comparable>)PoweredRailBlock.POWERED, false));
|
|
}
|
|
|
|
protected boolean findPoweredRailSignal(final Level bjt, final BlockPos fk, final BlockState byg, final boolean boolean4, final int integer) {
|
|
if (integer >= 8) {
|
|
return false;
|
|
}
|
|
int integer2 = fk.getX();
|
|
int integer3 = fk.getY();
|
|
int integer4 = fk.getZ();
|
|
boolean boolean5 = true;
|
|
RailShape bzk11 = byg.<RailShape>getValue(PoweredRailBlock.SHAPE);
|
|
switch (bzk11) {
|
|
case NORTH_SOUTH: {
|
|
if (boolean4) {
|
|
++integer4;
|
|
break;
|
|
}
|
|
--integer4;
|
|
break;
|
|
}
|
|
case EAST_WEST: {
|
|
if (boolean4) {
|
|
--integer2;
|
|
break;
|
|
}
|
|
++integer2;
|
|
break;
|
|
}
|
|
case ASCENDING_EAST: {
|
|
if (boolean4) {
|
|
--integer2;
|
|
}
|
|
else {
|
|
++integer2;
|
|
++integer3;
|
|
boolean5 = false;
|
|
}
|
|
bzk11 = RailShape.EAST_WEST;
|
|
break;
|
|
}
|
|
case ASCENDING_WEST: {
|
|
if (boolean4) {
|
|
--integer2;
|
|
++integer3;
|
|
boolean5 = false;
|
|
}
|
|
else {
|
|
++integer2;
|
|
}
|
|
bzk11 = RailShape.EAST_WEST;
|
|
break;
|
|
}
|
|
case ASCENDING_NORTH: {
|
|
if (boolean4) {
|
|
++integer4;
|
|
}
|
|
else {
|
|
--integer4;
|
|
++integer3;
|
|
boolean5 = false;
|
|
}
|
|
bzk11 = RailShape.NORTH_SOUTH;
|
|
break;
|
|
}
|
|
case ASCENDING_SOUTH: {
|
|
if (boolean4) {
|
|
++integer4;
|
|
++integer3;
|
|
boolean5 = false;
|
|
}
|
|
else {
|
|
--integer4;
|
|
}
|
|
bzk11 = RailShape.NORTH_SOUTH;
|
|
break;
|
|
}
|
|
}
|
|
return this.isSameRailWithPower(bjt, new BlockPos(integer2, integer3, integer4), boolean4, integer, bzk11) || (boolean5 && this.isSameRailWithPower(bjt, new BlockPos(integer2, integer3 - 1, integer4), boolean4, integer, bzk11));
|
|
}
|
|
|
|
protected boolean isSameRailWithPower(final Level bjt, final BlockPos fk, final boolean boolean3, final int integer, final RailShape bzk) {
|
|
final BlockState byg7 = bjt.getBlockState(fk);
|
|
if (byg7.getBlock() != this) {
|
|
return false;
|
|
}
|
|
final RailShape bzk2 = byg7.<RailShape>getValue(PoweredRailBlock.SHAPE);
|
|
return (bzk != RailShape.EAST_WEST || (bzk2 != RailShape.NORTH_SOUTH && bzk2 != RailShape.ASCENDING_NORTH && bzk2 != RailShape.ASCENDING_SOUTH)) && (bzk != RailShape.NORTH_SOUTH || (bzk2 != RailShape.EAST_WEST && bzk2 != RailShape.ASCENDING_EAST && bzk2 != RailShape.ASCENDING_WEST)) && byg7.<Boolean>getValue((Property<Boolean>)PoweredRailBlock.POWERED) && (bjt.hasNeighborSignal(fk) || this.findPoweredRailSignal(bjt, fk, byg7, boolean3, integer + 1));
|
|
}
|
|
|
|
@Override
|
|
protected void updateState(final BlockState byg, final Level bjt, final BlockPos fk, final Block bpe) {
|
|
final boolean boolean6 = byg.<Boolean>getValue((Property<Boolean>)PoweredRailBlock.POWERED);
|
|
final boolean boolean7 = bjt.hasNeighborSignal(fk) || this.findPoweredRailSignal(bjt, fk, byg, true, 0) || this.findPoweredRailSignal(bjt, fk, byg, false, 0);
|
|
if (boolean7 != boolean6) {
|
|
bjt.setBlock(fk, ((AbstractStateHolder<O, BlockState>)byg).<Comparable, Boolean>setValue((Property<Comparable>)PoweredRailBlock.POWERED, boolean7), 3);
|
|
bjt.updateNeighborsAt(fk.below(), this);
|
|
if (byg.<RailShape>getValue(PoweredRailBlock.SHAPE).isAscending()) {
|
|
bjt.updateNeighborsAt(fk.above(), this);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Property<RailShape> getShapeProperty() {
|
|
return PoweredRailBlock.SHAPE;
|
|
}
|
|
|
|
@Override
|
|
public BlockState rotate(final BlockState byg, final Rotation btr) {
|
|
Label_0424: {
|
|
switch (btr) {
|
|
case CLOCKWISE_180: {
|
|
switch (byg.<RailShape>getValue(PoweredRailBlock.SHAPE)) {
|
|
case ASCENDING_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_WEST);
|
|
}
|
|
case ASCENDING_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_EAST);
|
|
}
|
|
case ASCENDING_NORTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_SOUTH);
|
|
}
|
|
case ASCENDING_SOUTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_NORTH);
|
|
}
|
|
case SOUTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_WEST);
|
|
}
|
|
case SOUTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_EAST);
|
|
}
|
|
case NORTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_EAST);
|
|
}
|
|
case NORTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_WEST);
|
|
}
|
|
default: {
|
|
break Label_0424;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case COUNTERCLOCKWISE_90: {
|
|
switch (byg.<RailShape>getValue(PoweredRailBlock.SHAPE)) {
|
|
case NORTH_SOUTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.EAST_WEST);
|
|
}
|
|
case EAST_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_SOUTH);
|
|
}
|
|
case ASCENDING_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_NORTH);
|
|
}
|
|
case ASCENDING_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_SOUTH);
|
|
}
|
|
case ASCENDING_NORTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_WEST);
|
|
}
|
|
case ASCENDING_SOUTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_EAST);
|
|
}
|
|
case SOUTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_EAST);
|
|
}
|
|
case SOUTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_EAST);
|
|
}
|
|
case NORTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_WEST);
|
|
}
|
|
case NORTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_WEST);
|
|
}
|
|
default: {
|
|
break Label_0424;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case CLOCKWISE_90: {
|
|
switch (byg.<RailShape>getValue(PoweredRailBlock.SHAPE)) {
|
|
case NORTH_SOUTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.EAST_WEST);
|
|
}
|
|
case EAST_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_SOUTH);
|
|
}
|
|
case ASCENDING_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_SOUTH);
|
|
}
|
|
case ASCENDING_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_NORTH);
|
|
}
|
|
case ASCENDING_NORTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_EAST);
|
|
}
|
|
case ASCENDING_SOUTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_WEST);
|
|
}
|
|
case SOUTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_WEST);
|
|
}
|
|
case SOUTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_WEST);
|
|
}
|
|
case NORTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_EAST);
|
|
}
|
|
case NORTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_EAST);
|
|
}
|
|
default: {
|
|
break Label_0424;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return byg;
|
|
}
|
|
|
|
@Override
|
|
public BlockState mirror(final BlockState byg, final Mirror bsr) {
|
|
final RailShape bzk4 = byg.<RailShape>getValue(PoweredRailBlock.SHAPE);
|
|
Label_0319: {
|
|
switch (bsr) {
|
|
case LEFT_RIGHT: {
|
|
switch (bzk4) {
|
|
case ASCENDING_NORTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_SOUTH);
|
|
}
|
|
case ASCENDING_SOUTH: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_NORTH);
|
|
}
|
|
case SOUTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_EAST);
|
|
}
|
|
case SOUTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_WEST);
|
|
}
|
|
case NORTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_WEST);
|
|
}
|
|
case NORTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_EAST);
|
|
}
|
|
default: {
|
|
break Label_0319;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case FRONT_BACK: {
|
|
switch (bzk4) {
|
|
case ASCENDING_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_WEST);
|
|
}
|
|
case ASCENDING_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.ASCENDING_EAST);
|
|
}
|
|
case SOUTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_WEST);
|
|
}
|
|
case SOUTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.SOUTH_EAST);
|
|
}
|
|
case NORTH_WEST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_EAST);
|
|
}
|
|
case NORTH_EAST: {
|
|
return ((AbstractStateHolder<O, BlockState>)byg).<RailShape, RailShape>setValue(PoweredRailBlock.SHAPE, RailShape.NORTH_WEST);
|
|
}
|
|
default: {
|
|
break Label_0319;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return super.mirror(byg, bsr);
|
|
}
|
|
|
|
@Override
|
|
protected void createBlockStateDefinition(final StateDefinition.Builder<Block, BlockState> a) {
|
|
a.add(PoweredRailBlock.SHAPE, PoweredRailBlock.POWERED);
|
|
}
|
|
|
|
static {
|
|
SHAPE = BlockStateProperties.RAIL_SHAPE_STRAIGHT;
|
|
POWERED = BlockStateProperties.POWERED;
|
|
}
|
|
}
|