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

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

package net.minecraft.server;

import com.google.common.collect.Lists;

import java.util.List;

public abstract class BlockMinecartTrackAbstract extends Block {

  protected final boolean a;

  protected BlockMinecartTrackAbstract(boolean flag) {
    super(Material.ORIENTABLE);
    this.a = flag;
    this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
    this.a(CreativeModeTab.e);
  }

  public static boolean e(World world, BlockPosition blockposition) {
    return d(world.getType(blockposition));
  }

  public static boolean d(IBlockData iblockdata) {
    Block block = iblockdata.getBlock();

    return block == Blocks.RAIL || block == Blocks.GOLDEN_RAIL || block == Blocks.DETECTOR_RAIL || block == Blocks.ACTIVATOR_RAIL;
  }

  public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) {
    return null;
  }

  public boolean c() {
    return false;
  }

  public MovingObjectPosition a(World world, BlockPosition blockposition, Vec3D vec3d, Vec3D vec3d1) {
    this.updateShape(world, blockposition);
    return super.a(world, blockposition, vec3d, vec3d1);
  }

  public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) {
    IBlockData iblockdata = iblockaccess.getType(blockposition);
    BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition = iblockdata.getBlock() == this ? iblockdata.get(this.n()) : null;

    if (blockminecarttrackabstract_enumtrackposition != null && blockminecarttrackabstract_enumtrackposition.c()) {
      this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.625F, 1.0F);
    } else {
      this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
    }

  }

  public boolean d() {
    return false;
  }

  public boolean canPlace(World world, BlockPosition blockposition) {
    return World.a(world, blockposition.down());
  }

  public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) {
    if (!world.isClientSide) {
      iblockdata = this.a(world, blockposition, iblockdata, true);
      if (this.a) {
        this.doPhysics(world, blockposition, iblockdata, this);
      }
    }

  }

  public void doPhysics(World world, BlockPosition pos, IBlockData iblockdata, Block block) {
    if (!world.isClientSide) {
      BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition = iblockdata.get(this.n());
      boolean flag = !World.a(world, pos.down());

      if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_EAST && !World.a(world, pos.east())) {
        flag = true;
      } else if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_WEST && !World.a(world, pos.west())) {
        flag = true;
      } else if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_NORTH && !World.a(world, pos.north())) {
        flag = true;
      } else if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_SOUTH && !World.a(world, pos.south())) {
        flag = true;
      }

      if (flag && !world.isEmpty(pos)) { // CraftBukkit - SPIGOT-424, MC-73474
        this.b(world, pos, iblockdata, 0);
        world.setAir(pos);
      } else {
        this.b(world, pos, iblockdata, block);
      }

    }
  }

  protected void b(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) {
  }

  protected IBlockData a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
    return world.isClientSide ? iblockdata : (new BlockMinecartTrackAbstract.MinecartTrackLogic(world, blockposition, iblockdata)).a(world.isBlockIndirectlyPowered(blockposition), flag).b();
  }

  public int k() {
    return 0;
  }

  public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) {
    super.remove(world, blockposition, iblockdata);
    if (iblockdata.get(this.n()).c()) {
      world.applyPhysics(blockposition.up(), this);
    }

    if (this.a) {
      world.applyPhysics(blockposition, this);
      world.applyPhysics(blockposition.down(), this);
    }

  }

  public abstract IBlockState n();

  public enum EnumTrackPosition implements INamable {

    NORTH_SOUTH(0, "north_south"), EAST_WEST(1, "east_west"), ASCENDING_EAST(2, "ascending_east"), ASCENDING_WEST(3, "ascending_west"), ASCENDING_NORTH(4, "ascending_north"), ASCENDING_SOUTH(5, "ascending_south"), SOUTH_EAST(6, "south_east"), SOUTH_WEST(7, "south_west"), NORTH_WEST(8, "north_west"), NORTH_EAST(9, "north_east");

    private static final BlockMinecartTrackAbstract.EnumTrackPosition[] k = new BlockMinecartTrackAbstract.EnumTrackPosition[values().length];

    static {
      BlockMinecartTrackAbstract.EnumTrackPosition[] ablockminecarttrackabstract_enumtrackposition = values();
      int i = ablockminecarttrackabstract_enumtrackposition.length;
  
      for (EnumTrackPosition blockminecarttrackabstract_enumtrackposition : ablockminecarttrackabstract_enumtrackposition) {
        EnumTrackPosition.k[blockminecarttrackabstract_enumtrackposition.a()] = blockminecarttrackabstract_enumtrackposition;
      }

    }

    private final int l;
    private final String m;

    EnumTrackPosition(int i, String s) {
      this.l = i;
      this.m = s;
    }

    public static BlockMinecartTrackAbstract.EnumTrackPosition a(int i) {
      if (i < 0 || i >= BlockMinecartTrackAbstract.EnumTrackPosition.k.length) {
        i = 0;
      }

      return BlockMinecartTrackAbstract.EnumTrackPosition.k[i];
    }

    public int a() {
      return this.l;
    }

    public String toString() {
      return this.m;
    }

    public boolean c() {
      return this == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_NORTH || this == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_EAST || this == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_SOUTH || this == BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_WEST;
    }

    public String getName() {
      return this.m;
    }
  }

  static class SyntheticClass_1 {

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

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

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

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

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

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

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

      try {
        BlockMinecartTrackAbstract.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_EAST.ordinal()] = 7;
      } catch (NoSuchFieldError ignored) {
      }

      try {
        BlockMinecartTrackAbstract.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_WEST.ordinal()] = 8;
      } catch (NoSuchFieldError ignored) {
      }

      try {
        BlockMinecartTrackAbstract.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_WEST.ordinal()] = 9;
      } catch (NoSuchFieldError ignored) {
      }

      try {
        BlockMinecartTrackAbstract.SyntheticClass_1.a[BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_EAST.ordinal()] = 10;
      } catch (NoSuchFieldError ignored) {
      }

    }
  }

  public class MinecartTrackLogic {

    private final World b;
    private final BlockPosition c;
    private final BlockMinecartTrackAbstract d;
    private final boolean f;
    private final List g = Lists.newArrayList();
    private IBlockData e;

    public MinecartTrackLogic(World world, BlockPosition blockposition, IBlockData iblockdata) {
      this.b = world;
      this.c = blockposition;
      this.e = iblockdata;
      this.d = (BlockMinecartTrackAbstract) iblockdata.getBlock();
      BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition = iblockdata.get(BlockMinecartTrackAbstract.this.n());

      this.f = this.d.a;
      this.a(blockminecarttrackabstract_enumtrackposition);
    }

    private void a(BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition) {
      this.g.clear();
      switch (BlockMinecartTrackAbstract.SyntheticClass_1.a[blockminecarttrackabstract_enumtrackposition.ordinal()]) {
        case 1:
          this.g.add(this.c.north());
          this.g.add(this.c.south());
          break;

        case 2:
          this.g.add(this.c.west());
          this.g.add(this.c.east());
          break;

        case 3:
          this.g.add(this.c.west());
          this.g.add(this.c.east().up());
          break;

        case 4:
          this.g.add(this.c.west().up());
          this.g.add(this.c.east());
          break;

        case 5:
          this.g.add(this.c.north().up());
          this.g.add(this.c.south());
          break;

        case 6:
          this.g.add(this.c.north());
          this.g.add(this.c.south().up());
          break;

        case 7:
          this.g.add(this.c.east());
          this.g.add(this.c.south());
          break;

        case 8:
          this.g.add(this.c.west());
          this.g.add(this.c.south());
          break;

        case 9:
          this.g.add(this.c.west());
          this.g.add(this.c.north());
          break;

        case 10:
          this.g.add(this.c.east());
          this.g.add(this.c.north());
      }

    }

    private void c() {
      for (int i = 0; i < this.g.size(); ++i) {
        BlockMinecartTrackAbstract.MinecartTrackLogic blockminecarttrackabstract_minecarttracklogic = this.b(this.g.get(i));

        if (blockminecarttrackabstract_minecarttracklogic != null && blockminecarttrackabstract_minecarttracklogic.a(this)) {
          this.g.set(i, blockminecarttrackabstract_minecarttracklogic.c);
        } else {
          this.g.remove(i--);
        }
      }

    }

    private boolean a(BlockPosition blockposition) {
      return BlockMinecartTrackAbstract.e(this.b, blockposition) || BlockMinecartTrackAbstract.e(this.b, blockposition.up()) || BlockMinecartTrackAbstract.e(this.b, blockposition.down());
    }

    private BlockMinecartTrackAbstract.MinecartTrackLogic b(BlockPosition blockposition) {
      IBlockData iblockdata = this.b.getType(blockposition);

      if (BlockMinecartTrackAbstract.d(iblockdata)) {
        return BlockMinecartTrackAbstract.this.new MinecartTrackLogic(this.b, blockposition, iblockdata);
      } else {
        BlockPosition blockposition1 = blockposition.up();

        iblockdata = this.b.getType(blockposition1);
        if (BlockMinecartTrackAbstract.d(iblockdata)) {
          return BlockMinecartTrackAbstract.this.new MinecartTrackLogic(this.b, blockposition1, iblockdata);
        } else {
          blockposition1 = blockposition.down();
          iblockdata = this.b.getType(blockposition1);
          return BlockMinecartTrackAbstract.d(iblockdata) ? BlockMinecartTrackAbstract.this.new MinecartTrackLogic(this.b, blockposition1, iblockdata) : null;
        }
      }
    }

    private boolean a(BlockMinecartTrackAbstract.MinecartTrackLogic blockminecarttrackabstract_minecarttracklogic) {
      return this.c(blockminecarttrackabstract_minecarttracklogic.c);
    }

    private boolean c(BlockPosition blockposition) {
      for (BlockPosition blockposition1 : this.g) {
        if (blockposition1.getX() == blockposition.getX() && blockposition1.getZ() == blockposition.getZ()) {
          return true;
        }
      }

      return false;
    }

    protected int a() {
      int i = 0;
  
      for (EnumDirection enumdirection : EnumDirection.EnumDirectionLimit.HORIZONTAL) {
        if (this.a(this.c.shift(enumdirection))) {
          ++i;
        }
      }

      return i;
    }

    private boolean b(BlockMinecartTrackAbstract.MinecartTrackLogic blockminecarttrackabstract_minecarttracklogic) {
      return this.a(blockminecarttrackabstract_minecarttracklogic) || this.g.size() != 2;
    }

    private void c(BlockMinecartTrackAbstract.MinecartTrackLogic blockminecarttrackabstract_minecarttracklogic) {
      this.g.add(blockminecarttrackabstract_minecarttracklogic.c);
      BlockPosition blockposition = this.c.north();
      BlockPosition blockposition1 = this.c.south();
      BlockPosition blockposition2 = this.c.west();
      BlockPosition blockposition3 = this.c.east();
      boolean flag = this.c(blockposition);
      boolean flag1 = this.c(blockposition1);
      boolean flag2 = this.c(blockposition2);
      boolean flag3 = this.c(blockposition3);
      BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition = null;

      if (flag || flag1) {
        blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
      }

      if (flag2 || flag3) {
        blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST;
      }

      if (!this.f) {
        if (flag1 && flag3 && !flag && !flag2) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_EAST;
        }

        if (flag1 && flag2 && !flag && !flag3) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_WEST;
        }

        if (flag && flag2 && !flag1 && !flag3) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_WEST;
        }

        if (flag && flag3 && !flag1 && !flag2) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_EAST;
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH) {
        if (BlockMinecartTrackAbstract.e(this.b, blockposition.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_NORTH;
        }

        if (BlockMinecartTrackAbstract.e(this.b, blockposition1.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_SOUTH;
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST) {
        if (BlockMinecartTrackAbstract.e(this.b, blockposition3.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_EAST;
        }

        if (BlockMinecartTrackAbstract.e(this.b, blockposition2.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_WEST;
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == null) {
        blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
      }

      this.e = this.e.set(this.d.n(), blockminecarttrackabstract_enumtrackposition);
      this.b.setTypeAndData(this.c, this.e, 3);
    }

    private boolean d(BlockPosition blockposition) {
      BlockMinecartTrackAbstract.MinecartTrackLogic blockminecarttrackabstract_minecarttracklogic = this.b(blockposition);

      if (blockminecarttrackabstract_minecarttracklogic == null) {
        return false;
      } else {
        blockminecarttrackabstract_minecarttracklogic.c();
        return blockminecarttrackabstract_minecarttracklogic.b(this);
      }
    }

    public BlockMinecartTrackAbstract.MinecartTrackLogic a(boolean flag, boolean flag1) {
      BlockPosition blockposition = this.c.north();
      BlockPosition blockposition1 = this.c.south();
      BlockPosition blockposition2 = this.c.west();
      BlockPosition blockposition3 = this.c.east();
      boolean flag2 = this.d(blockposition);
      boolean flag3 = this.d(blockposition1);
      boolean flag4 = this.d(blockposition2);
      boolean flag5 = this.d(blockposition3);
      BlockMinecartTrackAbstract.EnumTrackPosition blockminecarttrackabstract_enumtrackposition = null;

      if ((flag2 || flag3) && !flag4 && !flag5) {
        blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
      }

      if ((flag4 || flag5) && !flag2 && !flag3) {
        blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST;
      }

      if (!this.f) {
        if (flag3 && flag5 && !flag2 && !flag4) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_EAST;
        }

        if (flag3 && flag4 && !flag2 && !flag5) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_WEST;
        }

        if (flag2 && flag4 && !flag3 && !flag5) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_WEST;
        }

        if (flag2 && flag5 && !flag3 && !flag4) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_EAST;
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == null) {
        if (flag2 || flag3) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
        }

        if (flag4 || flag5) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST;
        }

        if (!this.f) {
          if (flag) {
            if (flag3 && flag5) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_EAST;
            }

            if (flag4 && flag3) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_WEST;
            }

            if (flag5 && flag2) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_EAST;
            }

            if (flag2 && flag4) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_WEST;
            }
          } else {
            if (flag2 && flag4) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_WEST;
            }

            if (flag5 && flag2) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_EAST;
            }

            if (flag4 && flag3) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_WEST;
            }

            if (flag3 && flag5) {
              blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.SOUTH_EAST;
            }
          }
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH) {
        if (BlockMinecartTrackAbstract.e(this.b, blockposition.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_NORTH;
        }

        if (BlockMinecartTrackAbstract.e(this.b, blockposition1.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_SOUTH;
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST) {
        if (BlockMinecartTrackAbstract.e(this.b, blockposition3.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_EAST;
        }

        if (BlockMinecartTrackAbstract.e(this.b, blockposition2.up())) {
          blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.ASCENDING_WEST;
        }
      }

      if (blockminecarttrackabstract_enumtrackposition == null) {
        blockminecarttrackabstract_enumtrackposition = BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH;
      }

      this.a(blockminecarttrackabstract_enumtrackposition);
      this.e = this.e.set(this.d.n(), blockminecarttrackabstract_enumtrackposition);
      if (flag1 || this.b.getType(this.c) != this.e) {
        this.b.setTypeAndData(this.c, this.e, 3);
  
        for (BlockPosition position : this.g) {
          MinecartTrackLogic blockminecarttrackabstract_minecarttracklogic = this.b(position);
    
          if (blockminecarttrackabstract_minecarttracklogic != null) {
            blockminecarttrackabstract_minecarttracklogic.c();
            if (blockminecarttrackabstract_minecarttracklogic.b(this)) {
              blockminecarttrackabstract_minecarttracklogic.c(this);
            }
          }
        }
      }

      return this;
    }

    public IBlockData b() {
      return this.e;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy