geforkt von Mirrors/Paper
186 Zeilen
4.4 KiB
Java
186 Zeilen
4.4 KiB
Java
package net.minecraft.server;
|
|
|
|
public class ChunkSection {
|
|
|
|
private int a;
|
|
private int b;
|
|
private int c;
|
|
private byte[] d;
|
|
private NibbleArray e;
|
|
private NibbleArray f;
|
|
private NibbleArray g;
|
|
private NibbleArray h;
|
|
|
|
public ChunkSection(int i) {
|
|
this.a = i;
|
|
this.d = new byte[4096];
|
|
this.f = new NibbleArray(this.d.length, 4);
|
|
this.h = new NibbleArray(this.d.length, 4);
|
|
this.g = new NibbleArray(this.d.length, 4);
|
|
}
|
|
|
|
// CraftBukkit start
|
|
public ChunkSection(int y, byte[] blkData, byte[] extBlkData) {
|
|
this.a = y;
|
|
this.d = blkData;
|
|
if (extBlkData != null) {
|
|
this.e = new NibbleArray(extBlkData, 4);
|
|
}
|
|
this.f = new NibbleArray(this.d.length, 4);
|
|
this.h = new NibbleArray(this.d.length, 4);
|
|
this.g = new NibbleArray(this.d.length, 4);
|
|
this.d();
|
|
}
|
|
// CraftBukkit end
|
|
|
|
public int a(int i, int j, int k) {
|
|
int l = this.d[j << 8 | k << 4 | i] & 255;
|
|
|
|
return this.e != null ? this.e.a(i, j, k) << 8 | l : l;
|
|
}
|
|
|
|
public void a(int i, int j, int k, int l) {
|
|
int i1 = this.d[j << 8 | k << 4 | i] & 255;
|
|
|
|
if (this.e != null) {
|
|
i1 |= this.e.a(i, j, k) << 8;
|
|
}
|
|
|
|
if (i1 == 0 && l != 0) {
|
|
++this.b;
|
|
if (Block.byId[l] != null && Block.byId[l].m()) {
|
|
++this.c;
|
|
}
|
|
} else if (i1 != 0 && l == 0) {
|
|
--this.b;
|
|
if (Block.byId[i1] != null && Block.byId[i1].m()) {
|
|
--this.c;
|
|
}
|
|
} else if (Block.byId[i1] != null && Block.byId[i1].m() && (Block.byId[l] == null || !Block.byId[l].m())) {
|
|
--this.c;
|
|
} else if ((Block.byId[i1] == null || !Block.byId[i1].m()) && Block.byId[l] != null && Block.byId[l].m()) {
|
|
++this.c;
|
|
}
|
|
|
|
this.d[j << 8 | k << 4 | i] = (byte) (l & 255);
|
|
if (l > 255) {
|
|
if (this.e == null) {
|
|
this.e = new NibbleArray(this.d.length, 4);
|
|
}
|
|
|
|
this.e.a(i, j, k, (l & 3840) >> 8);
|
|
} else if (this.e != null) {
|
|
this.e.a(i, j, k, 0);
|
|
}
|
|
}
|
|
|
|
public int b(int i, int j, int k) {
|
|
return this.f.a(i, j, k);
|
|
}
|
|
|
|
public void b(int i, int j, int k, int l) {
|
|
this.f.a(i, j, k, l);
|
|
}
|
|
|
|
public boolean a() {
|
|
return this.b == 0;
|
|
}
|
|
|
|
public boolean b() {
|
|
return this.c > 0;
|
|
}
|
|
|
|
public int c() {
|
|
return this.a;
|
|
}
|
|
|
|
public void c(int i, int j, int k, int l) {
|
|
this.h.a(i, j, k, l);
|
|
}
|
|
|
|
public int c(int i, int j, int k) {
|
|
return this.h.a(i, j, k);
|
|
}
|
|
|
|
public void d(int i, int j, int k, int l) {
|
|
this.g.a(i, j, k, l);
|
|
}
|
|
|
|
public int d(int i, int j, int k) {
|
|
return this.g.a(i, j, k);
|
|
}
|
|
|
|
public void d() {
|
|
this.b = 0;
|
|
this.c = 0;
|
|
|
|
for (int i = 0; i < 16; ++i) {
|
|
for (int j = 0; j < 16; ++j) {
|
|
for (int k = 0; k < 16; ++k) {
|
|
int l = this.a(i, j, k);
|
|
|
|
if (l > 0) {
|
|
if (Block.byId[l] == null) {
|
|
this.d[j << 8 | k << 4 | i] = 0;
|
|
if (this.e != null) {
|
|
this.e.a(i, j, k, 0);
|
|
}
|
|
} else {
|
|
++this.b;
|
|
if (Block.byId[l].m()) {
|
|
++this.c;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void e() {}
|
|
|
|
public int f() {
|
|
return this.b;
|
|
}
|
|
|
|
public byte[] g() {
|
|
return this.d;
|
|
}
|
|
|
|
public NibbleArray h() {
|
|
return this.e;
|
|
}
|
|
|
|
public NibbleArray i() {
|
|
return this.f;
|
|
}
|
|
|
|
public NibbleArray j() {
|
|
return this.g;
|
|
}
|
|
|
|
public NibbleArray k() {
|
|
return this.h;
|
|
}
|
|
|
|
public void a(byte[] abyte) {
|
|
this.d = abyte;
|
|
}
|
|
|
|
public void a(NibbleArray nibblearray) {
|
|
this.e = nibblearray;
|
|
}
|
|
|
|
public void b(NibbleArray nibblearray) {
|
|
this.f = nibblearray;
|
|
}
|
|
|
|
public void c(NibbleArray nibblearray) {
|
|
this.g = nibblearray;
|
|
}
|
|
|
|
public void d(NibbleArray nibblearray) {
|
|
this.h = nibblearray;
|
|
}
|
|
}
|