Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package net.minecraft.server;
2
3import org.bukkit.event.block.BlockRedstoneEvent;
4
5import java.util.Random;
6
7public class BlockButton extends Block {
8
9 protected BlockButton(int i, int j) {
10 super(i, j, Material.ORIENTABLE);
11 this.a(true);
12 }
13
14 public AxisAlignedBB e(World world, int i, int j, int k) {
15 return null;
16 }
17
18 public int c() {
19 return 20;
20 }
21
22 public boolean a() {
23 return false;
24 }
25
26 public boolean b() {
27 return false;
28 }
29
30 public boolean canPlace(World world, int i, int j, int k, int l) {
31 return l == 2 && world.e(i, j, k + 1) ? true : (l == 3 && world.e(i, j, k - 1) ? true : (l == 4 && world.e(i + 1, j, k) ? true : l == 5 && world.e(i - 1, j, k)));
32 }
33
34 public boolean canPlace(World world, int i, int j, int k) {
35 return world.e(i - 1, j, k) ? true : (world.e(i + 1, j, k) ? true : (world.e(i, j, k - 1) ? true : world.e(i, j, k + 1)));
36 }
37
38 public void postPlace(World world, int i, int j, int k, int l) {
39 int i1 = world.getData(i, j, k);
40 int j1 = i1 & 8;
41
42 i1 &= 7;
43 if (l == 2 && world.e(i, j, k + 1)) {
44 i1 = 4;
45 } else if (l == 3 && world.e(i, j, k - 1)) {
46 i1 = 3;
47 } else if (l == 4 && world.e(i + 1, j, k)) {
48 i1 = 2;
49 } else if (l == 5 && world.e(i - 1, j, k)) {
50 i1 = 1;
51 } else {
52 i1 = this.g(world, i, j, k);
53 }
54
55 world.setData(i, j, k, i1 + j1);
56 }
57
58 private int g(World world, int i, int j, int k) {
59 return world.e(i - 1, j, k) ? 1 : (world.e(i + 1, j, k) ? 2 : (world.e(i, j, k - 1) ? 3 : (world.e(i, j, k + 1) ? 4 : 1)));
60 }
61
62 public void doPhysics(World world, int i, int j, int k, int l) {
63 if (this.h(world, i, j, k)) {
64 int i1 = world.getData(i, j, k) & 7;
65 boolean flag = false;
66
67 if (!world.e(i - 1, j, k) && i1 == 1) {
68 flag = true;
69 }
70
71 if (!world.e(i + 1, j, k) && i1 == 2) {
72 flag = true;
73 }
74
75 if (!world.e(i, j, k - 1) && i1 == 3) {
76 flag = true;
77 }
78
79 if (!world.e(i, j, k + 1) && i1 == 4) {
80 flag = true;
81 }
82
83 if (flag) {
84 this.g(world, i, j, k, world.getData(i, j, k));
85 world.setTypeId(i, j, k, 0);
86 }
87 }
88 }
89
90 private boolean h(World world, int i, int j, int k) {
91 if (!this.canPlace(world, i, j, k)) {
92 this.g(world, i, j, k, world.getData(i, j, k));
93 world.setTypeId(i, j, k, 0);
94 return false;
95 } else {
96 return true;
97 }
98 }
99
100 public void a(IBlockAccess iblockaccess, int i, int j, int k) {
101 int l = iblockaccess.getData(i, j, k);
102 int i1 = l & 7;
103 boolean flag = (l & 8) > 0;
104 float f = 0.375F;
105 float f1 = 0.625F;
106 float f2 = 0.1875F;
107 float f3 = 0.125F;
108
109 if (flag) {
110 f3 = 0.0625F;
111 }
112
113 if (i1 == 1) {
114 this.a(0.0F, f, 0.5F - f2, f3, f1, 0.5F + f2);
115 } else if (i1 == 2) {
116 this.a(1.0F - f3, f, 0.5F - f2, 1.0F, f1, 0.5F + f2);
117 } else if (i1 == 3) {
118 this.a(0.5F - f2, f, 0.0F, 0.5F + f2, f1, f3);
119 } else if (i1 == 4) {
120 this.a(0.5F - f2, f, 1.0F - f3, 0.5F + f2, f1, 1.0F);
121 }
122 }
123
124 public void b(World world, int i, int j, int k, EntityHuman entityhuman) {
125 this.interact(world, i, j, k, entityhuman);
126 }
127
128 public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) {
129 int l = world.getData(i, j, k);
130 int i1 = l & 7;
131 int j1 = 8 - (l & 8);
132
133 if (j1 == 0) {
134 return true;
135 } else {
136 // CraftBukkit start
137 org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
138 int old = (j1 != 8) ? 1 : 0;
139 int current = (j1 == 8) ? 1 : 0;
140
141 BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, old, current);
142 world.getServer().getPluginManager().callEvent(eventRedstone);
143
144 if ((eventRedstone.getNewCurrent() > 0) != (j1 == 8)) {
145 return true;
146 }
147 // CraftBukkit end
148
149 world.setData(i, j, k, i1 + j1);
150 world.b(i, j, k, i, j, k);
151 world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "random.click", 0.3F, 0.6F);
152 world.applyPhysics(i, j, k, this.id);
153 if (i1 == 1) {
154 world.applyPhysics(i - 1, j, k, this.id);
155 } else if (i1 == 2) {
156 world.applyPhysics(i + 1, j, k, this.id);
157 } else if (i1 == 3) {
158 world.applyPhysics(i, j, k - 1, this.id);
159 } else if (i1 == 4) {
160 world.applyPhysics(i, j, k + 1, this.id);
161 } else {
162 world.applyPhysics(i, j - 1, k, this.id);
163 }
164
165 world.c(i, j, k, this.id, this.c());
166 return true;
167 }
168 }
169
170 public void remove(World world, int i, int j, int k) {
171 int l = world.getData(i, j, k);
172
173 if ((l & 8) > 0) {
174 world.applyPhysics(i, j, k, this.id);
175 int i1 = l & 7;
176
177 if (i1 == 1) {
178 world.applyPhysics(i - 1, j, k, this.id);
179 } else if (i1 == 2) {
180 world.applyPhysics(i + 1, j, k, this.id);
181 } else if (i1 == 3) {
182 world.applyPhysics(i, j, k - 1, this.id);
183 } else if (i1 == 4) {
184 world.applyPhysics(i, j, k + 1, this.id);
185 } else {
186 world.applyPhysics(i, j - 1, k, this.id);
187 }
188 }
189
190 super.remove(world, i, j, k);
191 }
192
193 public boolean a(IBlockAccess iblockaccess, int i, int j, int k, int l) {
194 return (iblockaccess.getData(i, j, k) & 8) > 0;
195 }
196
197 public boolean d(World world, int i, int j, int k, int l) {
198 int i1 = world.getData(i, j, k);
199
200 if ((i1 & 8) == 0) {
201 return false;
202 } else {
203 int j1 = i1 & 7;
204
205 return j1 == 5 && l == 1 ? true : (j1 == 4 && l == 2 ? true : (j1 == 3 && l == 3 ? true : (j1 == 2 && l == 4 ? true : j1 == 1 && l == 5)));
206 }
207 }
208
209 public boolean isPowerSource() {
210 return true;
211 }
212
213 public void a(World world, int i, int j, int k, Random random) {
214 if (!world.isStatic) {
215 int l = world.getData(i, j, k);
216
217 if ((l & 8) != 0) {
218 // CraftBukkit start
219 org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
220
221 BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, 1, 0);
222 world.getServer().getPluginManager().callEvent(eventRedstone);
223
224 if (eventRedstone.getNewCurrent() > 0) return;
225 // CraftBukkit end
226
227 world.setData(i, j, k, l & 7);
228 world.applyPhysics(i, j, k, this.id);
229 int i1 = l & 7;
230
231 if (i1 == 1) {
232 world.applyPhysics(i - 1, j, k, this.id);
233 } else if (i1 == 2) {
234 world.applyPhysics(i + 1, j, k, this.id);
235 } else if (i1 == 3) {
236 world.applyPhysics(i, j, k - 1, this.id);
237 } else if (i1 == 4) {
238 world.applyPhysics(i, j, k + 1, this.id);
239 } else {
240 world.applyPhysics(i, j - 1, k, this.id);
241 }
242
243 world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "random.click", 0.3F, 0.5F);
244 world.b(i, j, k, i, j, k);
245 }
246 }
247 }
248}