package buildcraft.robotics.map;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IntHashMap;
import buildcraft.api.core.INBTStoreable;
public class MapRegion implements INBTStoreable {
private final IntHashMap chunks = new IntHashMap();
private final int x, z;
public MapRegion(int x, int z) {
this.x = x;
this.z = z;
}
public int getX() {
return x;
}
public int getZ() {
return z;
}
public boolean hasChunk(int x, int z) {
return chunks.containsItem((z << 4) | x);
}
public MapChunk getChunk(int x, int z) {
int id = (z << 4) | x;
MapChunk chunk = (MapChunk) chunks.lookup(id);
if (chunk == null) {
chunk = new MapChunk(x, z);
chunks.addKey(id, chunk);
}
return chunk;
}
@Override
public void readFromNBT(NBTTagCompound tag) {
chunks.clearMap();
if (tag != null) {
for (int i = 0; i < 256; i++) {
if (tag.hasKey("r" + i)) {
MapChunk chunk = new MapChunk(tag.getCompoundTag("r" + i));
chunks.addKey(i, chunk);
}
}
}
}
@Override
public void writeToNBT(NBTTagCompound tag) {
for (int i = 0; i < 256; i++) {
MapChunk chunk = (MapChunk) chunks.lookup(i);
if (chunk != null) {
NBTTagCompound chunkNBT = new NBTTagCompound();
synchronized (chunk) {
chunk.writeToNBT(chunkNBT);
}
tag.setTag("r" + i, chunkNBT);
}
}
}
}