Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}