peytonplayz585-infdev/source/net/minecraft/src/ChunkLoader.java

187 lines
5.1 KiB
Java
Raw Normal View History

2023-09-22 23:47:15 -07:00
package net.minecraft.src;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
public class ChunkLoader implements IChunkLoader {
private File saveDir;
private boolean createIfNecessary;
public ChunkLoader(File var1, boolean var2) {
this.saveDir = var1;
this.createIfNecessary = var2;
}
private File chunkFileForXZ(int var1, int var2) {
String var3 = "c." + Integer.toString(var1, 36) + "." + Integer.toString(var2, 36) + ".dat";
String var4 = Integer.toString(var1 & 63, 36);
String var5 = Integer.toString(var2 & 63, 36);
File var6 = new File(this.saveDir, var4);
if(!var6.exists()) {
if(!this.createIfNecessary) {
return null;
}
var6.mkdir();
}
var6 = new File(var6, var5);
if(!var6.exists()) {
if(!this.createIfNecessary) {
return null;
}
var6.mkdir();
}
var6 = new File(var6, var3);
return !var6.exists() && !this.createIfNecessary ? null : var6;
}
public Chunk loadChunk(World var1, int var2, int var3) {
File var4 = this.chunkFileForXZ(var2, var3);
if(var4 != null && var4.exists()) {
try {
FileInputStream var5 = new FileInputStream(var4);
NBTTagCompound var6 = CompressedStreamTools.readCompressed(var5);
return loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level"));
} catch (Exception var7) {
var7.printStackTrace();
}
}
return null;
}
public void saveChunk(World var1, Chunk var2) {
File var3 = this.chunkFileForXZ(var2.xPosition, var2.zPosition);
if(var3.exists()) {
var1.setSizeOnDisk -= var3.length();
}
try {
File var4 = new File(this.saveDir, "tmp_chunk.dat");
FileOutputStream var5 = new FileOutputStream(var4);
NBTTagCompound var6 = new NBTTagCompound();
NBTTagCompound var7 = new NBTTagCompound();
var6.setTag("Level", var7);
this.storeChunkInCompound(var2, var1, var7);
CompressedStreamTools.writeCompressed(var6, var5);
var5.close();
if(var3.exists()) {
var3.delete();
}
var4.renameTo(var3);
var1.setSizeOnDisk += var3.length();
} catch (Exception var8) {
var8.printStackTrace();
}
}
public void storeChunkInCompound(Chunk var1, World var2, NBTTagCompound var3) {
var3.setInteger("xPos", var1.xPosition);
var3.setInteger("zPos", var1.zPosition);
var3.setLong("LastUpdate", var2.worldTime);
var3.setByteArray("Blocks", var1.blocks);
var3.setByteArray("Data", var1.data.data);
var3.setByteArray("SkyLight", var1.skylightMap.data);
var3.setByteArray("BlockLight", var1.blocklightMap.data);
var3.setByteArray("HeightMap", var1.heightMap);
var3.setBoolean("TerrainPopulated", var1.isTerrainPopulated);
var1.hasEntities = false;
NBTTagList var4 = new NBTTagList();
Iterator var6;
NBTTagCompound var8;
for(int var5 = 0; var5 < var1.entities.length; ++var5) {
var6 = var1.entities[var5].iterator();
while(var6.hasNext()) {
Entity var7 = (Entity)var6.next();
var1.hasEntities = true;
var8 = new NBTTagCompound();
if(var7.addEntityID(var8)) {
var4.setTag(var8);
}
}
}
var3.setTag("Entities", var4);
NBTTagList var9 = new NBTTagList();
var6 = var1.chunkTileEntityMap.values().iterator();
while(var6.hasNext()) {
TileEntity var10 = (TileEntity)var6.next();
var8 = new NBTTagCompound();
var10.writeToNBT(var8);
var9.setTag(var8);
}
var3.setTag("TileEntities", var9);
}
public static Chunk loadChunkIntoWorldFromCompound(World var0, NBTTagCompound var1) {
int var2 = var1.getInteger("xPos");
int var3 = var1.getInteger("zPos");
Chunk var4 = new Chunk(var0, var2, var3);
var4.blocks = var1.getByteArray("Blocks");
var4.data = new NibbleArray(var1.getByteArray("Data"));
var4.skylightMap = new NibbleArray(var1.getByteArray("SkyLight"));
var4.blocklightMap = new NibbleArray(var1.getByteArray("BlockLight"));
var4.heightMap = var1.getByteArray("HeightMap");
var4.isTerrainPopulated = var1.getBoolean("TerrainPopulated");
if(!var4.data.isValid()) {
var4.data = new NibbleArray(var4.blocks.length);
}
if(var4.heightMap == null || !var4.skylightMap.isValid()) {
var4.heightMap = new byte[256];
var4.skylightMap = new NibbleArray(var4.blocks.length);
var4.generateHeightMap();
}
if(!var4.blocklightMap.isValid()) {
var4.blocklightMap = new NibbleArray(var4.blocks.length);
var4.doNothing();
}
NBTTagList var5 = var1.getTagList("Entities");
if(var5 != null) {
for(int var6 = 0; var6 < var5.tagCount(); ++var6) {
NBTTagCompound var7 = (NBTTagCompound)var5.tagAt(var6);
Entity var8 = EntityList.createEntityFromNBT(var7, var0);
var4.hasEntities = true;
if(var8 != null) {
var4.addEntity(var8);
}
}
}
NBTTagList var10 = var1.getTagList("TileEntities");
if(var10 != null) {
for(int var11 = 0; var11 < var10.tagCount(); ++var11) {
NBTTagCompound var12 = (NBTTagCompound)var10.tagAt(var11);
TileEntity var9 = TileEntity.createAndLoadEntity(var12);
if(var9 != null) {
var4.addTileEntity(var9);
}
}
}
return var4;
}
public void chunkTick() {
}
public void saveExtraData() {
}
public void saveExtraChunkData(World var1, Chunk var2) {
}
}