Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 163 lines 5.9 kB view raw
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}