Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package net.minecraft.server;
2
3import com.legacyminecraft.poseidon.PoseidonConfig;
4import org.bukkit.event.block.BlockRedstoneEvent;
5
6import java.util.ArrayList;
7import java.util.List;
8import java.util.Random;
9
10public class BlockRedstoneTorch extends BlockTorch {
11
12 private boolean isOn = false;
13 private static List b = new ArrayList();
14
15 public int a(int i, int j) {
16 return i == 1 ? Block.REDSTONE_WIRE.a(i, j) : super.a(i, j);
17 }
18
19 private boolean a(World world, int i, int j, int k, boolean flag) {
20 if (flag) {
21 b.add(new RedstoneUpdateInfo(i, j, k, world.getTime()));
22 }
23
24 int l = 0;
25
26 for (int i1 = 0; i1 < b.size(); ++i1) {
27 RedstoneUpdateInfo redstoneupdateinfo = (RedstoneUpdateInfo) b.get(i1);
28
29 if (redstoneupdateinfo.a == i && redstoneupdateinfo.b == j && redstoneupdateinfo.c == k) {
30 ++l;
31 if (l >= 8) {
32 return true;
33 }
34 }
35 }
36
37 return false;
38 }
39
40 protected BlockRedstoneTorch(int i, int j, boolean flag) {
41 super(i, j);
42 this.isOn = flag;
43 this.a(true);
44 }
45
46 public int c() {
47 return 2;
48 }
49
50 public void c(World world, int i, int j, int k) {
51 if (world.getData(i, j, k) == 0) {
52 super.c(world, i, j, k);
53 }
54
55 if (this.isOn) {
56 world.applyPhysics(i, j - 1, k, this.id);
57 world.applyPhysics(i, j + 1, k, this.id);
58 world.applyPhysics(i - 1, j, k, this.id);
59 world.applyPhysics(i + 1, j, k, this.id);
60 world.applyPhysics(i, j, k - 1, this.id);
61 world.applyPhysics(i, j, k + 1, this.id);
62 }
63 }
64
65 public void remove(World world, int i, int j, int k) {
66 if (this.isOn && (!PoseidonConfig.getInstance().getConfigBoolean("world.settings.pistons.transmutation-fix.enabled", true) || world.getTypeId(i, j, k) == this.id || world.getTypeId(i, j, k) == 75)) {
67 world.applyPhysics(i, j - 1, k, this.id);
68 world.applyPhysics(i, j + 1, k, this.id);
69 world.applyPhysics(i - 1, j, k, this.id);
70 world.applyPhysics(i + 1, j, k, this.id);
71 world.applyPhysics(i, j, k - 1, this.id);
72 world.applyPhysics(i, j, k + 1, this.id);
73 }
74 }
75
76 public boolean a(IBlockAccess iblockaccess, int i, int j, int k, int l) {
77 if (!this.isOn) {
78 return false;
79 } else {
80 int i1 = iblockaccess.getData(i, j, k);
81
82 return i1 == 5 && l == 1 ? false : (i1 == 3 && l == 3 ? false : (i1 == 4 && l == 2 ? false : (i1 == 1 && l == 5 ? false : i1 != 2 || l != 4)));
83 }
84 }
85
86 private boolean g(World world, int i, int j, int k) {
87 int l = world.getData(i, j, k);
88
89 return l == 5 && world.isBlockFaceIndirectlyPowered(i, j - 1, k, 0) ? true : (l == 3 && world.isBlockFaceIndirectlyPowered(i, j, k - 1, 2) ? true : (l == 4 && world.isBlockFaceIndirectlyPowered(i, j, k + 1, 3) ? true : (l == 1 && world.isBlockFaceIndirectlyPowered(i - 1, j, k, 4) ? true : l == 2 && world.isBlockFaceIndirectlyPowered(i + 1, j, k, 5))));
90 }
91
92 public void a(World world, int i, int j, int k, Random random) {
93 boolean flag = this.g(world, i, j, k);
94
95 while (b.size() > 0 && world.getTime() - ((RedstoneUpdateInfo) b.get(0)).d > 100L) {
96 b.remove(0);
97 }
98
99 // CraftBukkit start
100 org.bukkit.plugin.PluginManager manager = world.getServer().getPluginManager();
101 org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
102 int oldCurrent = this.isOn ? 15 : 0;
103
104 BlockRedstoneEvent event = new BlockRedstoneEvent(block, oldCurrent, oldCurrent);
105 // CraftBukkit end
106
107 if (this.isOn) {
108 if (flag) {
109 // CraftBukkit start
110 if (oldCurrent != 0) {
111 event.setNewCurrent(0);
112 manager.callEvent(event);
113 if (event.getNewCurrent() != 0) {
114 return;
115 }
116 }
117 // CraftBukkit end
118
119 world.setTypeIdAndData(i, j, k, Block.REDSTONE_TORCH_OFF.id, world.getData(i, j, k));
120 if (this.a(world, i, j, k, true)) {
121 world.makeSound((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), "random.fizz", 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F);
122
123 for (int l = 0; l < 5; ++l) {
124 double d0 = (double) i + random.nextDouble() * 0.6D + 0.2D;
125 double d1 = (double) j + random.nextDouble() * 0.6D + 0.2D;
126 double d2 = (double) k + random.nextDouble() * 0.6D + 0.2D;
127
128 world.a("smoke", d0, d1, d2, 0.0D, 0.0D, 0.0D);
129 }
130 }
131 }
132 } else if (!flag && !this.a(world, i, j, k, false)) {
133 // CraftBukkit start
134 if (oldCurrent != 15) {
135 event.setNewCurrent(15);
136 manager.callEvent(event);
137 if (event.getNewCurrent() != 15) {
138 return;
139 }
140 }
141 // CraftBukkit end
142
143 world.setTypeIdAndData(i, j, k, Block.REDSTONE_TORCH_ON.id, world.getData(i, j, k));
144 }
145 }
146
147 public void doPhysics(World world, int i, int j, int k, int l) {
148 super.doPhysics(world, i, j, k, l);
149 world.c(i, j, k, this.id, this.c());
150 }
151
152 public boolean d(World world, int i, int j, int k, int l) {
153 return l == 0 ? this.a(world, i, j, k, l) : false;
154 }
155
156 public int a(int i, Random random) {
157 return Block.REDSTONE_TORCH_ON.id;
158 }
159
160 public boolean isPowerSource() {
161 return true;
162 }
163}