Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 145 lines 4.6 kB view raw
1package net.minecraft.server; 2 3import java.util.Random; 4 5public class BlockDiode extends Block { 6 7 public static final double[] a = new double[] { -0.0625D, 0.0625D, 0.1875D, 0.3125D }; 8 private static final int[] b = new int[] { 1, 2, 3, 4 }; 9 private final boolean c; 10 11 protected BlockDiode(int i, boolean flag) { 12 super(i, 6, Material.ORIENTABLE); 13 this.c = flag; 14 this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); 15 } 16 17 public boolean b() { 18 return false; 19 } 20 21 public boolean canPlace(World world, int i, int j, int k) { 22 return !world.e(i, j - 1, k) ? false : super.canPlace(world, i, j, k); 23 } 24 25 public boolean f(World world, int i, int j, int k) { 26 return !world.e(i, j - 1, k) ? false : super.f(world, i, j, k); 27 } 28 29 public void a(World world, int i, int j, int k, Random random) { 30 int l = world.getData(i, j, k); 31 boolean flag = this.f(world, i, j, k, l); 32 33 if (this.c && !flag) { 34 world.setTypeIdAndData(i, j, k, Block.DIODE_OFF.id, l); 35 } else if (!this.c) { 36 world.setTypeIdAndData(i, j, k, Block.DIODE_ON.id, l); 37 if (!flag) { 38 int i1 = (l & 12) >> 2; 39 40 world.c(i, j, k, Block.DIODE_ON.id, b[i1] * 2); 41 } 42 } 43 } 44 45 public int a(int i, int j) { 46 return i == 0 ? (this.c ? 99 : 115) : (i == 1 ? (this.c ? 147 : 131) : 5); 47 } 48 49 public int a(int i) { 50 return this.a(i, 0); 51 } 52 53 public boolean d(World world, int i, int j, int k, int l) { 54 return this.a(world, i, j, k, l); 55 } 56 57 public boolean a(IBlockAccess iblockaccess, int i, int j, int k, int l) { 58 if (!this.c) { 59 return false; 60 } else { 61 int i1 = iblockaccess.getData(i, j, k) & 3; 62 63 return i1 == 0 && l == 3 ? true : (i1 == 1 && l == 4 ? true : (i1 == 2 && l == 2 ? true : i1 == 3 && l == 5)); 64 } 65 } 66 67 public void doPhysics(World world, int i, int j, int k, int l) { 68 if (!this.f(world, i, j, k)) { 69 this.g(world, i, j, k, world.getData(i, j, k)); 70 world.setTypeId(i, j, k, 0); 71 } else { 72 int i1 = world.getData(i, j, k); 73 boolean flag = this.f(world, i, j, k, i1); 74 int j1 = (i1 & 12) >> 2; 75 76 if (this.c && !flag) { 77 world.c(i, j, k, this.id, b[j1] * 2); 78 } else if (!this.c && flag) { 79 world.c(i, j, k, this.id, b[j1] * 2); 80 } 81 } 82 } 83 84 private boolean f(World world, int i, int j, int k, int l) { 85 int i1 = l & 3; 86 87 switch (i1) { 88 case 0: 89 return world.isBlockFaceIndirectlyPowered(i, j, k + 1, 3) || world.getTypeId(i, j, k + 1) == Block.REDSTONE_WIRE.id && world.getData(i, j, k + 1) > 0; 90 91 case 1: 92 return world.isBlockFaceIndirectlyPowered(i - 1, j, k, 4) || world.getTypeId(i - 1, j, k) == Block.REDSTONE_WIRE.id && world.getData(i - 1, j, k) > 0; 93 94 case 2: 95 return world.isBlockFaceIndirectlyPowered(i, j, k - 1, 2) || world.getTypeId(i, j, k - 1) == Block.REDSTONE_WIRE.id && world.getData(i, j, k - 1) > 0; 96 97 case 3: 98 return world.isBlockFaceIndirectlyPowered(i + 1, j, k, 5) || world.getTypeId(i + 1, j, k) == Block.REDSTONE_WIRE.id && world.getData(i + 1, j, k) > 0; 99 100 default: 101 return false; 102 } 103 } 104 105 public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) { 106 int l = world.getData(i, j, k); 107 int i1 = (l & 12) >> 2; 108 109 i1 = i1 + 1 << 2 & 12; 110 world.setData(i, j, k, i1 | l & 3); 111 return true; 112 } 113 114 public boolean isPowerSource() { 115 return false; 116 } 117 118 public void postPlace(World world, int i, int j, int k, EntityLiving entityliving) { 119 int l = ((MathHelper.floor((double) (entityliving.yaw * 4.0F / 360.0F) + 0.5D) & 3) + 2) % 4; 120 121 world.setData(i, j, k, l); 122 boolean flag = this.f(world, i, j, k, l); 123 124 if (flag) { 125 world.c(i, j, k, this.id, 1); 126 } 127 } 128 129 public void c(World world, int i, int j, int k) { 130 world.applyPhysics(i + 1, j, k, this.id); 131 world.applyPhysics(i - 1, j, k, this.id); 132 world.applyPhysics(i, j, k + 1, this.id); 133 world.applyPhysics(i, j, k - 1, this.id); 134 world.applyPhysics(i, j - 1, k, this.id); 135 world.applyPhysics(i, j + 1, k, this.id); 136 } 137 138 public boolean a() { 139 return false; 140 } 141 142 public int a(int i, Random random) { 143 return Item.DIODE.id; 144 } 145}