All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.BlockPoweredRail Maven / Gradle / Ivy

package net.minecraft.server;

import com.google.common.base.Predicate;
import org.bukkit.craftbukkit.event.CraftEventFactory;

public class BlockPoweredRail extends BlockMinecartTrackAbstract {

  public static final BlockStateEnum SHAPE = BlockStateEnum.a("shape", BlockMinecartTrackAbstract.EnumTrackPosition.class, new Predicate() {
    public boolean a(BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition) {
      return blockminecarttrackabstract_enumtrackposition != BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_EAST && blockminecarttrackabstract_enumtrackposition != BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_WEST && blockminecarttrackabstract_enumtrackposition != BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_EAST && blockminecarttrackabstract_enumtrackposition != BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_WEST;
    }

    public boolean apply(Object object) {
      return this.a((BlockMinecartTrackAbstract.EnumTrackPosition) object);
    }
  });
  public static final BlockStateBoolean POWERED = BlockStateBoolean.of("powered");

  protected BlockPoweredRail() {
    super(true);
    this.j(this.blockStateList.getBlockData().set(BlockPoweredRail.SHAPE, BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH).set(BlockPoweredRail.POWERED, Boolean.valueOf(false)));
  }

  protected boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag, int i) {
    if (i >= 8) {
      return false;
    } else {
      int j = blockposition.getX();
      int k = blockposition.getY();
      int l = blockposition.getZ();
      boolean flag1 = true;
      BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition = iblockdata.get(BlockPoweredRail.SHAPE);

      switch (BlockPoweredRail.SyntheticClass_1.a[blockminecarttrackabstract_enumtrackposition.ordinal()]) {
        case 1:
          if (flag) {
            ++l;
          } else {
            --l;
          }
          break;

        case 2:
          if (flag) {
            --j;
          } else {
            ++j;
          }
          break;

        case 3:
          if (flag) {
            --j;
          } else {
            ++j;
            ++k;
            flag1 = false;
          }

          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST;
          break;

        case 4:
          if (flag) {
            --j;
            ++k;
            flag1 = false;
          } else {
            ++j;
          }

          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST;
          break;

        case 5:
          if (flag) {
            ++l;
          } else {
            --l;
            ++k;
            flag1 = false;
          }

          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
          break;

        case 6:
          if (flag) {
            ++l;
            ++k;
            flag1 = false;
          } else {
            --l;
          }

          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
      }

      return this.a(world, new BlockPosition(j, k, l), flag, i, blockminecarttrackabstract_enumtrackposition) || flag1 && this.a(world, new BlockPosition(j, k - 1, l), flag, i, blockminecarttrackabstract_enumtrackposition);
    }
  }

  protected boolean a(World world, BlockPosition blockposition, boolean flag, int i, BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition) {
    IBlockData iblockdata = world.getType(blockposition);

    if (iblockdata.getBlock() != this) {
      return false;
    } else {
      BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition1 = iblockdata.get(BlockPoweredRail.SHAPE);

      return (blockminecarttrackabstract_enumtrackposition != EnumTrackPosition.EAST_WEST || (blockminecarttrackabstract_enumtrackposition1 != EnumTrackPosition.NORTH_SOUTH && blockminecarttrackabstract_enumtrackposition1 != EnumTrackPosition.ASCENDING_NORTH && blockminecarttrackabstract_enumtrackposition1 != EnumTrackPosition.ASCENDING_SOUTH)) && ((blockminecarttrackabstract_enumtrackposition != EnumTrackPosition.NORTH_SOUTH || (blockminecarttrackabstract_enumtrackposition1 != EnumTrackPosition.EAST_WEST && blockminecarttrackabstract_enumtrackposition1 != EnumTrackPosition.ASCENDING_EAST && blockminecarttrackabstract_enumtrackposition1 != EnumTrackPosition.ASCENDING_WEST)) && (iblockdata.get(BlockPoweredRail.POWERED).booleanValue() && (world.isBlockIndirectlyPowered(blockposition) || this.a(world, blockposition, iblockdata, flag, i + 1))));
    }
  }

  protected void b(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) {
    boolean flag = iblockdata.get(BlockPoweredRail.POWERED).booleanValue();
    boolean flag1 = world.isBlockIndirectlyPowered(blockposition) || this.a(world, blockposition, iblockdata, true, 0) || this.a(world, blockposition, iblockdata, false, 0);

    if (flag1 != flag) {
      // CraftBukkit start
      int power = iblockdata.get(POWERED) ? 15 : 0;
      int newPower = CraftEventFactory.callRedstoneChange(world, blockposition.getX(), blockposition.getY(), blockposition.getZ(), power, 15 - power).getNewCurrent();
      if (newPower == power) {
        return;
      }
      // CraftBukkit end
      world.setTypeAndData(blockposition, iblockdata.set(BlockPoweredRail.POWERED, Boolean.valueOf(flag1)), 3);
      world.applyPhysics(blockposition.down(), this);
      if (iblockdata.get(BlockPoweredRail.SHAPE).c()) {
        world.applyPhysics(blockposition.up(), this);
      }
    }

  }

  public IBlockState n() {
    return BlockPoweredRail.SHAPE;
  }

  public IBlockData fromLegacyData(int i) {
    return this.getBlockData().set(BlockPoweredRail.SHAPE, BlockMinecartTrackAbstract.EnumTrackPosition.a(i & 7)).set(BlockPoweredRail.POWERED, Boolean.valueOf((i & 8) > 0));
  }

  public int toLegacyData(IBlockData iblockdata) {
    byte b0 = 0;
    int i = b0 | iblockdata.get(BlockPoweredRail.SHAPE).a();

    if (iblockdata.get(BlockPoweredRail.POWERED).booleanValue()) {
      i |= 8;
    }

    return i;
  }

  protected BlockStateList getStateList() {
    return new BlockStateList(this, BlockPoweredRail.SHAPE, BlockPoweredRail.POWERED);
  }

  static class SyntheticClass_1 {

    static final int[] a = new int[BlockMinecartTrackAbstract.EnumTrackPosition.values().length];

    static {
      try {
        BlockPoweredRail.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH.ordinal()] = 1;
      } catch (NoSuchFieldError nosuchfielderror) {
      }

      try {
        BlockPoweredRail.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST.ordinal()] = 2;
      } catch (NoSuchFieldError nosuchfielderror1) {
      }

      try {
        BlockPoweredRail.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_EAST.ordinal()] = 3;
      } catch (NoSuchFieldError nosuchfielderror2) {
      }

      try {
        BlockPoweredRail.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_WEST.ordinal()] = 4;
      } catch (NoSuchFieldError nosuchfielderror3) {
      }

      try {
        BlockPoweredRail.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_NORTH.ordinal()] = 5;
      } catch (NoSuchFieldError nosuchfielderror4) {
      }

      try {
        BlockPoweredRail.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_SOUTH.ordinal()] = 6;
      } catch (NoSuchFieldError nosuchfielderror5) {
      }

    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy