Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 217 lines 7.0 kB view raw
1package net.minecraft.server; 2 3public class MetadataChunkBlock { 4 5 public final EnumSkyBlock a; 6 public int b; 7 public int c; 8 public int d; 9 public int e; 10 public int f; 11 public int g; 12 13 public MetadataChunkBlock(EnumSkyBlock enumskyblock, int i, int j, int k, int l, int i1, int j1) { 14 this.a = enumskyblock; 15 this.b = i; 16 this.c = j; 17 this.d = k; 18 this.e = l; 19 this.f = i1; 20 this.g = j1; 21 } 22 23 public void a(World world) { 24 int i = this.e - this.b + 1; 25 int j = this.f - this.c + 1; 26 int k = this.g - this.d + 1; 27 int l = i * j * k; 28 29 if (l > '\u8000') { 30 System.out.println("Light too large, skipping!"); 31 } else { 32 int i1 = 0; 33 int j1 = 0; 34 boolean flag = false; 35 boolean flag1 = false; 36 37 for (int k1 = this.b; k1 <= this.e; ++k1) { 38 for (int l1 = this.d; l1 <= this.g; ++l1) { 39 int i2 = k1 >> 4; 40 int j2 = l1 >> 4; 41 boolean flag2 = false; 42 43 if (flag && i2 == i1 && j2 == j1) { 44 flag2 = flag1; 45 } else { 46 flag2 = world.areChunksLoaded(k1, 0, l1, 1); 47 if (flag2) { 48 Chunk chunk = world.getChunkAt(k1 >> 4, l1 >> 4); 49 50 if (chunk.isEmpty()) { 51 flag2 = false; 52 } 53 } 54 55 flag1 = flag2; 56 i1 = i2; 57 j1 = j2; 58 } 59 60 if (flag2) { 61 if (this.c < 0) { 62 this.c = 0; 63 } 64 65 if (this.f >= 128) { 66 this.f = 127; 67 } 68 69 for (int k2 = this.c; k2 <= this.f; ++k2) { 70 int l2 = world.a(this.a, k1, k2, l1); 71 boolean flag3 = false; 72 int i3 = world.getTypeId(k1, k2, l1); 73 int j3 = Block.q[i3]; 74 75 if (j3 == 0) { 76 j3 = 1; 77 } 78 79 int k3 = 0; 80 81 if (this.a == EnumSkyBlock.SKY) { 82 if (world.m(k1, k2, l1)) { 83 k3 = 15; 84 } 85 } else if (this.a == EnumSkyBlock.BLOCK) { 86 k3 = Block.s[i3]; 87 } 88 89 int l3; 90 int i4; 91 92 if (j3 >= 15 && k3 == 0) { 93 i4 = 0; 94 } else { 95 l3 = world.a(this.a, k1 - 1, k2, l1); 96 int j4 = world.a(this.a, k1 + 1, k2, l1); 97 int k4 = world.a(this.a, k1, k2 - 1, l1); 98 int l4 = world.a(this.a, k1, k2 + 1, l1); 99 int i5 = world.a(this.a, k1, k2, l1 - 1); 100 int j5 = world.a(this.a, k1, k2, l1 + 1); 101 102 i4 = l3; 103 if (j4 > l3) { 104 i4 = j4; 105 } 106 107 if (k4 > i4) { 108 i4 = k4; 109 } 110 111 if (l4 > i4) { 112 i4 = l4; 113 } 114 115 if (i5 > i4) { 116 i4 = i5; 117 } 118 119 if (j5 > i4) { 120 i4 = j5; 121 } 122 123 i4 -= j3; 124 if (i4 < 0) { 125 i4 = 0; 126 } 127 128 if (k3 > i4) { 129 i4 = k3; 130 } 131 } 132 133 if (l2 != i4) { 134 world.b(this.a, k1, k2, l1, i4); 135 l3 = i4 - 1; 136 if (l3 < 0) { 137 l3 = 0; 138 } 139 140 world.a(this.a, k1 - 1, k2, l1, l3); 141 world.a(this.a, k1, k2 - 1, l1, l3); 142 world.a(this.a, k1, k2, l1 - 1, l3); 143 if (k1 + 1 >= this.e) { 144 world.a(this.a, k1 + 1, k2, l1, l3); 145 } 146 147 if (k2 + 1 >= this.f) { 148 world.a(this.a, k1, k2 + 1, l1, l3); 149 } 150 151 if (l1 + 1 >= this.g) { 152 world.a(this.a, k1, k2, l1 + 1, l3); 153 } 154 } 155 } 156 } 157 } 158 } 159 } 160 } 161 162 public boolean a(int i, int j, int k, int l, int i1, int j1) { 163 if (i >= this.b && j >= this.c && k >= this.d && l <= this.e && i1 <= this.f && j1 <= this.g) { 164 return true; 165 } else { 166 byte b0 = 1; 167 168 if (i >= this.b - b0 && j >= this.c - b0 && k >= this.d - b0 && l <= this.e + b0 && i1 <= this.f + b0 && j1 <= this.g + b0) { 169 int k1 = this.e - this.b; 170 int l1 = this.f - this.c; 171 int i2 = this.g - this.d; 172 173 if (i > this.b) { 174 i = this.b; 175 } 176 177 if (j > this.c) { 178 j = this.c; 179 } 180 181 if (k > this.d) { 182 k = this.d; 183 } 184 185 if (l < this.e) { 186 l = this.e; 187 } 188 189 if (i1 < this.f) { 190 i1 = this.f; 191 } 192 193 if (j1 < this.g) { 194 j1 = this.g; 195 } 196 197 int j2 = l - i; 198 int k2 = i1 - j; 199 int l2 = j1 - k; 200 int i3 = k1 * l1 * i2; 201 int j3 = j2 * k2 * l2; 202 203 if (j3 - i3 <= 2) { 204 this.b = i; 205 this.c = j; 206 this.d = k; 207 this.e = l; 208 this.f = i1; 209 this.g = j1; 210 return true; 211 } 212 } 213 214 return false; 215 } 216 } 217}