Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 234 lines 6.6 kB view raw
1package net.minecraft.server; 2 3import java.util.Random; 4 5public abstract class BlockFluids extends Block { 6 7 protected BlockFluids(int i, Material material) { 8 super(i, (material == Material.LAVA ? 14 : 12) * 16 + 13, material); 9 float f = 0.0F; 10 float f1 = 0.0F; 11 12 this.a(0.0F + f1, 0.0F + f, 0.0F + f1, 1.0F + f1, 1.0F + f, 1.0F + f1); 13 this.a(true); 14 } 15 16 public static float c(int i) { 17 if (i >= 8) { 18 i = 0; 19 } 20 21 float f = (float) (i + 1) / 9.0F; 22 23 return f; 24 } 25 26 public int a(int i) { 27 return i != 0 && i != 1 ? this.textureId + 1 : this.textureId; 28 } 29 30 protected int g(World world, int i, int j, int k) { 31 return world.getMaterial(i, j, k) != this.material ? -1 : world.getData(i, j, k); 32 } 33 34 protected int b(IBlockAccess iblockaccess, int i, int j, int k) { 35 if (iblockaccess.getMaterial(i, j, k) != this.material) { 36 return -1; 37 } else { 38 int l = iblockaccess.getData(i, j, k); 39 40 if (l >= 8) { 41 l = 0; 42 } 43 44 return l; 45 } 46 } 47 48 public boolean b() { 49 return false; 50 } 51 52 public boolean a() { 53 return false; 54 } 55 56 public boolean a(int i, boolean flag) { 57 return flag && i == 0; 58 } 59 60 public boolean b(IBlockAccess iblockaccess, int i, int j, int k, int l) { 61 Material material = iblockaccess.getMaterial(i, j, k); 62 63 return material == this.material ? false : (material == Material.ICE ? false : (l == 1 ? true : super.b(iblockaccess, i, j, k, l))); 64 } 65 66 public AxisAlignedBB e(World world, int i, int j, int k) { 67 return null; 68 } 69 70 public int a(int i, Random random) { 71 return 0; 72 } 73 74 public int a(Random random) { 75 return 0; 76 } 77 78 private Vec3D c(IBlockAccess iblockaccess, int i, int j, int k) { 79 Vec3D vec3d = Vec3D.create(0.0D, 0.0D, 0.0D); 80 int l = this.b(iblockaccess, i, j, k); 81 82 for (int i1 = 0; i1 < 4; ++i1) { 83 int j1 = i; 84 int k1 = k; 85 86 if (i1 == 0) { 87 j1 = i - 1; 88 } 89 90 if (i1 == 1) { 91 k1 = k - 1; 92 } 93 94 if (i1 == 2) { 95 ++j1; 96 } 97 98 if (i1 == 3) { 99 ++k1; 100 } 101 102 int l1 = this.b(iblockaccess, j1, j, k1); 103 int i2; 104 105 if (l1 < 0) { 106 if (!iblockaccess.getMaterial(j1, j, k1).isSolid()) { 107 l1 = this.b(iblockaccess, j1, j - 1, k1); 108 if (l1 >= 0) { 109 i2 = l1 - (l - 8); 110 vec3d = vec3d.add((double) ((j1 - i) * i2), (double) ((j - j) * i2), (double) ((k1 - k) * i2)); 111 } 112 } 113 } else if (l1 >= 0) { 114 i2 = l1 - l; 115 vec3d = vec3d.add((double) ((j1 - i) * i2), (double) ((j - j) * i2), (double) ((k1 - k) * i2)); 116 } 117 } 118 119 if (iblockaccess.getData(i, j, k) >= 8) { 120 boolean flag = false; 121 122 if (flag || this.b(iblockaccess, i, j, k - 1, 2)) { 123 flag = true; 124 } 125 126 if (flag || this.b(iblockaccess, i, j, k + 1, 3)) { 127 flag = true; 128 } 129 130 if (flag || this.b(iblockaccess, i - 1, j, k, 4)) { 131 flag = true; 132 } 133 134 if (flag || this.b(iblockaccess, i + 1, j, k, 5)) { 135 flag = true; 136 } 137 138 if (flag || this.b(iblockaccess, i, j + 1, k - 1, 2)) { 139 flag = true; 140 } 141 142 if (flag || this.b(iblockaccess, i, j + 1, k + 1, 3)) { 143 flag = true; 144 } 145 146 if (flag || this.b(iblockaccess, i - 1, j + 1, k, 4)) { 147 flag = true; 148 } 149 150 if (flag || this.b(iblockaccess, i + 1, j + 1, k, 5)) { 151 flag = true; 152 } 153 154 if (flag) { 155 vec3d = vec3d.b().add(0.0D, -6.0D, 0.0D); 156 } 157 } 158 159 vec3d = vec3d.b(); 160 return vec3d; 161 } 162 163 public void a(World world, int i, int j, int k, Entity entity, Vec3D vec3d) { 164 Vec3D vec3d1 = this.c((IBlockAccess) world, i, j, k); 165 166 vec3d.a += vec3d1.a; 167 vec3d.b += vec3d1.b; 168 vec3d.c += vec3d1.c; 169 } 170 171 public int c() { 172 return this.material == Material.WATER ? 5 : (this.material == Material.LAVA ? 30 : 0); 173 } 174 175 public void a(World world, int i, int j, int k, Random random) { 176 super.a(world, i, j, k, random); 177 } 178 179 public void c(World world, int i, int j, int k) { 180 this.i(world, i, j, k); 181 } 182 183 public void doPhysics(World world, int i, int j, int k, int l) { 184 this.i(world, i, j, k); 185 } 186 187 private void i(World world, int i, int j, int k) { 188 if (world.getTypeId(i, j, k) == this.id) { 189 if (this.material == Material.LAVA) { 190 boolean flag = false; 191 192 if (flag || world.getMaterial(i, j, k - 1) == Material.WATER) { 193 flag = true; 194 } 195 196 if (flag || world.getMaterial(i, j, k + 1) == Material.WATER) { 197 flag = true; 198 } 199 200 if (flag || world.getMaterial(i - 1, j, k) == Material.WATER) { 201 flag = true; 202 } 203 204 if (flag || world.getMaterial(i + 1, j, k) == Material.WATER) { 205 flag = true; 206 } 207 208 if (flag || world.getMaterial(i, j + 1, k) == Material.WATER) { 209 flag = true; 210 } 211 212 if (flag) { 213 int l = world.getData(i, j, k); 214 215 if (l == 0) { 216 world.setTypeId(i, j, k, Block.OBSIDIAN.id); 217 } else if (l <= 4) { 218 world.setTypeId(i, j, k, Block.COBBLESTONE.id); 219 } 220 221 this.h(world, i, j, k); 222 } 223 } 224 } 225 } 226 227 protected void h(World world, int i, int j, int k) { 228 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); 229 230 for (int l = 0; l < 8; ++l) { 231 world.a("largesmoke", (double) i + Math.random(), (double) j + 1.2D, (double) k + Math.random(), 0.0D, 0.0D, 0.0D); 232 } 233 } 234}