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