diff options
Diffstat (limited to 'src/main/java/net/minecraft/server/ChunkRegionLoader.java')
-rw-r--r-- | src/main/java/net/minecraft/server/ChunkRegionLoader.java | 139 |
1 files changed, 72 insertions, 67 deletions
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java index 8a21f359..d5cf88d9 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java @@ -11,32 +11,36 @@ import java.util.Iterator; import java.util.List; import java.util.Set; -public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; - private List a = new ArrayList(); - private Set b = new HashSet(); - private Object c = new Object(); - private final File d; +public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { + + private static final Logger a = LogManager.getLogger(); + private List b = new ArrayList(); + private Set c = new HashSet(); + private Object d = new Object(); + private final File e; public ChunkRegionLoader(File file1) { - this.d = file1; + this.e = file1; } // CraftBukkit start public boolean chunkExists(World world, int i, int j) { ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j); - synchronized (this.c) { - if (this.b.contains(chunkcoordintpair)) { - for (int k = 0; k < this.a.size(); ++k) { - if (((PendingChunkToSave) this.a.get(k)).a.equals(chunkcoordintpair)) { + synchronized (this.d) { + if (this.c.contains(chunkcoordintpair)) { + for (int k = 0; k < this.b.size(); ++k) { + if (((PendingChunkToSave) this.b.get(k)).a.equals(chunkcoordintpair)) { return true; } } } } - return RegionFileCache.a(this.d, i, j).chunkExists(i & 31, j & 31); + return RegionFileCache.a(this.e, i, j).chunkExists(i & 31, j & 31); } // CraftBukkit end @@ -57,13 +61,13 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { // CraftBukkit end NBTTagCompound nbttagcompound = null; ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j); - Object object = this.c; + Object object = this.d; - synchronized (this.c) { - if (this.b.contains(chunkcoordintpair)) { - for (int k = 0; k < this.a.size(); ++k) { - if (((PendingChunkToSave) this.a.get(k)).a.equals(chunkcoordintpair)) { - nbttagcompound = ((PendingChunkToSave) this.a.get(k)).b; + synchronized (this.d) { + if (this.c.contains(chunkcoordintpair)) { + for (int k = 0; k < this.b.size(); ++k) { + if (((PendingChunkToSave) this.b.get(k)).a.equals(chunkcoordintpair)) { + nbttagcompound = ((PendingChunkToSave) this.b.get(k)).b; break; } } @@ -71,7 +75,7 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } if (nbttagcompound == null) { - DataInputStream datainputstream = RegionFileCache.c(this.d, i, j); + DataInputStream datainputstream = RegionFileCache.c(this.e, i, j); if (datainputstream == null) { return null; @@ -84,33 +88,32 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } protected Object[] a(World world, int i, int j, NBTTagCompound nbttagcompound) { // CraftBukkit - return Chunk -> Object[] - if (!nbttagcompound.hasKey("Level")) { - world.getLogger().severe("Chunk file at " + i + "," + j + " is missing level data, skipping"); + if (!nbttagcompound.hasKeyOfType("Level", 10)) { + a.error("Chunk file at " + i + "," + j + " is missing level data, skipping"); return null; - } else if (!nbttagcompound.getCompound("Level").hasKey("Sections")) { - world.getLogger().severe("Chunk file at " + i + "," + j + " is missing block data, skipping"); + } else if (!nbttagcompound.getCompound("Level").hasKeyOfType("Sections", 9)) { + a.error("Chunk file at " + i + "," + j + " is missing block data, skipping"); return null; } else { Chunk chunk = this.a(world, nbttagcompound.getCompound("Level")); if (!chunk.a(i, j)) { - world.getLogger().severe("Chunk file at " + i + "," + j + " is in the wrong location; relocating. (Expected " + i + ", " + j + ", got " + chunk.x + ", " + chunk.z + ")"); + a.error("Chunk file at " + i + "," + j + " is in the wrong location; relocating. (Expected " + i + ", " + j + ", got " + chunk.locX + ", " + chunk.locZ + ")"); nbttagcompound.getCompound("Level").setInt("xPos", i); // CraftBukkit - .getCompound("Level") nbttagcompound.getCompound("Level").setInt("zPos", j); // CraftBukkit - .getCompound("Level") // CraftBukkit start - Have to move tile entities since we don't load them at this stage - NBTTagList tileEntities = nbttagcompound.getCompound("Level").getList("TileEntities"); + NBTTagList tileEntities = nbttagcompound.getCompound("Level").getList("TileEntities", 10); if (tileEntities != null) { for (int te = 0; te < tileEntities.size(); te++) { NBTTagCompound tileEntity = (NBTTagCompound) tileEntities.get(te); - int x = tileEntity.getInt("x") - chunk.x * 16; - int z = tileEntity.getInt("z") - chunk.z * 16; + int x = tileEntity.getInt("x") - chunk.locX * 16; + int z = tileEntity.getInt("z") - chunk.locZ * 16; tileEntity.setInt("x", i * 16 + x); tileEntity.setInt("z", j * 16 + z); } } // CraftBukkit end - chunk = this.a(world, nbttagcompound.getCompound("Level")); } @@ -126,7 +129,7 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { public void a(World world, Chunk chunk) { // CraftBukkit start - "handle" exception try { - world.G(); + world.F(); } catch (ExceptionWorldConflict ex) { ex.printStackTrace(); } @@ -145,35 +148,35 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } protected void a(ChunkCoordIntPair chunkcoordintpair, NBTTagCompound nbttagcompound) { - Object object = this.c; + Object object = this.d; - synchronized (this.c) { - if (this.b.contains(chunkcoordintpair)) { - for (int i = 0; i < this.a.size(); ++i) { - if (((PendingChunkToSave) this.a.get(i)).a.equals(chunkcoordintpair)) { - this.a.set(i, new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); + synchronized (this.d) { + if (this.c.contains(chunkcoordintpair)) { + for (int i = 0; i < this.b.size(); ++i) { + if (((PendingChunkToSave) this.b.get(i)).a.equals(chunkcoordintpair)) { + this.b.set(i, new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); return; } } } - this.a.add(new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); - this.b.add(chunkcoordintpair); + this.b.add(new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); + this.c.add(chunkcoordintpair); FileIOThread.a.a(this); } } public boolean c() { PendingChunkToSave pendingchunktosave = null; - Object object = this.c; + Object object = this.d; - synchronized (this.c) { - if (this.a.isEmpty()) { + synchronized (this.d) { + if (this.b.isEmpty()) { return false; } - pendingchunktosave = (PendingChunkToSave) this.a.remove(0); - this.b.remove(pendingchunktosave.a); + pendingchunktosave = (PendingChunkToSave) this.b.remove(0); + this.c.remove(pendingchunktosave.a); } if (pendingchunktosave != null) { @@ -188,7 +191,7 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } public void a(PendingChunkToSave pendingchunktosave) throws java.io.IOException { // CraftBukkit - public -> private, added throws - DataOutputStream dataoutputstream = RegionFileCache.d(this.d, pendingchunktosave.a.x, pendingchunktosave.a.z); + DataOutputStream dataoutputstream = RegionFileCache.d(this.e, pendingchunktosave.a.x, pendingchunktosave.a.z); NBTCompressedStreamTools.a(pendingchunktosave.b, (DataOutput) dataoutputstream); dataoutputstream.close(); @@ -205,14 +208,16 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } private void a(Chunk chunk, World world, NBTTagCompound nbttagcompound) { - nbttagcompound.setInt("xPos", chunk.x); - nbttagcompound.setInt("zPos", chunk.z); + nbttagcompound.setByte("V", (byte) 1); + nbttagcompound.setInt("xPos", chunk.locX); + nbttagcompound.setInt("zPos", chunk.locZ); nbttagcompound.setLong("LastUpdate", world.getTime()); nbttagcompound.setIntArray("HeightMap", chunk.heightMap); nbttagcompound.setBoolean("TerrainPopulated", chunk.done); - nbttagcompound.setLong("InhabitedTime", chunk.q); + nbttagcompound.setBoolean("LightPopulated", chunk.lit); + nbttagcompound.setLong("InhabitedTime", chunk.s); ChunkSection[] achunksection = chunk.i(); - NBTTagList nbttaglist = new NBTTagList("Sections"); + NBTTagList nbttaglist = new NBTTagList(); boolean flag = !world.worldProvider.g; ChunkSection[] achunksection1 = achunksection; int i = achunksection.length; @@ -244,7 +249,7 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { nbttagcompound.set("Sections", nbttaglist); nbttagcompound.setByteArray("Biomes", chunk.m()); - chunk.m = false; + chunk.o = false; NBTTagList nbttaglist1 = new NBTTagList(); Iterator iterator; @@ -257,7 +262,7 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { nbttagcompound1 = new NBTTagCompound(); if (entity.d(nbttagcompound1)) { - chunk.m = true; + chunk.o = true; nbttaglist1.add(nbttagcompound1); } } @@ -288,12 +293,12 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { NextTickListEntry nextticklistentry = (NextTickListEntry) iterator1.next(); NBTTagCompound nbttagcompound2 = new NBTTagCompound(); - nbttagcompound2.setInt("i", nextticklistentry.d); + nbttagcompound2.setInt("i", Block.b(nextticklistentry.a())); nbttagcompound2.setInt("x", nextticklistentry.a); nbttagcompound2.setInt("y", nextticklistentry.b); nbttagcompound2.setInt("z", nextticklistentry.c); - nbttagcompound2.setInt("t", (int) (nextticklistentry.e - k)); - nbttagcompound2.setInt("p", nextticklistentry.f); + nbttagcompound2.setInt("t", (int) (nextticklistentry.d - k)); + nbttagcompound2.setInt("p", nextticklistentry.e); nbttaglist3.add(nbttagcompound2); } @@ -308,19 +313,20 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { chunk.heightMap = nbttagcompound.getIntArray("HeightMap"); chunk.done = nbttagcompound.getBoolean("TerrainPopulated"); - chunk.q = nbttagcompound.getLong("InhabitedTime"); - NBTTagList nbttaglist = nbttagcompound.getList("Sections"); + chunk.lit = nbttagcompound.getBoolean("LightPopulated"); + chunk.s = nbttagcompound.getLong("InhabitedTime"); + NBTTagList nbttaglist = nbttagcompound.getList("Sections", 10); byte b0 = 16; ChunkSection[] achunksection = new ChunkSection[b0]; boolean flag = !world.worldProvider.g; for (int k = 0; k < nbttaglist.size(); ++k) { - NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.get(k); + NBTTagCompound nbttagcompound1 = nbttaglist.get(k); byte b1 = nbttagcompound1.getByte("Y"); ChunkSection chunksection = new ChunkSection(b1 << 4, flag); chunksection.setIdArray(nbttagcompound1.getByteArray("Blocks")); - if (nbttagcompound1.hasKey("Add")) { + if (nbttagcompound1.hasKeyOfType("Add", 7)) { chunksection.setExtendedIdArray(new NibbleArray(nbttagcompound1.getByteArray("Add"), 4)); } @@ -335,7 +341,7 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } chunk.a(achunksection); - if (nbttagcompound.hasKey("Biomes")) { + if (nbttagcompound.hasKeyOfType("Biomes", 7)) { chunk.a(nbttagcompound.getByteArray("Biomes")); } @@ -345,20 +351,19 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { public void loadEntities(Chunk chunk, NBTTagCompound nbttagcompound, World world) { // CraftBukkit end - - NBTTagList nbttaglist1 = nbttagcompound.getList("Entities"); + NBTTagList nbttaglist1 = nbttagcompound.getList("Entities", 10); if (nbttaglist1 != null) { for (int l = 0; l < nbttaglist1.size(); ++l) { - NBTTagCompound nbttagcompound2 = (NBTTagCompound) nbttaglist1.get(l); + NBTTagCompound nbttagcompound2 = nbttaglist1.get(l); Entity entity = EntityTypes.a(nbttagcompound2, world); - chunk.m = true; + chunk.o = true; if (entity != null) { chunk.a(entity); Entity entity1 = entity; - for (NBTTagCompound nbttagcompound3 = nbttagcompound2; nbttagcompound3.hasKey("Riding"); nbttagcompound3 = nbttagcompound3.getCompound("Riding")) { + for (NBTTagCompound nbttagcompound3 = nbttagcompound2; nbttagcompound3.hasKeyOfType("Riding", 10); nbttagcompound3 = nbttagcompound3.getCompound("Riding")) { Entity entity2 = EntityTypes.a(nbttagcompound3.getCompound("Riding"), world); if (entity2 != null) { @@ -372,11 +377,11 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } } - NBTTagList nbttaglist2 = nbttagcompound.getList("TileEntities"); + NBTTagList nbttaglist2 = nbttagcompound.getList("TileEntities", 10); if (nbttaglist2 != null) { for (int i1 = 0; i1 < nbttaglist2.size(); ++i1) { - NBTTagCompound nbttagcompound4 = (NBTTagCompound) nbttaglist2.get(i1); + NBTTagCompound nbttagcompound4 = nbttaglist2.get(i1); TileEntity tileentity = TileEntity.c(nbttagcompound4); if (tileentity != null) { @@ -385,14 +390,14 @@ public class ChunkRegionLoader implements IAsyncChunkSaver, IChunkLoader { } } - if (nbttagcompound.hasKey("TileTicks")) { - NBTTagList nbttaglist3 = nbttagcompound.getList("TileTicks"); + if (nbttagcompound.hasKeyOfType("TileTicks", 9)) { + NBTTagList nbttaglist3 = nbttagcompound.getList("TileTicks", 10); if (nbttaglist3 != null) { for (int j1 = 0; j1 < nbttaglist3.size(); ++j1) { - NBTTagCompound nbttagcompound5 = (NBTTagCompound) nbttaglist3.get(j1); + NBTTagCompound nbttagcompound5 = nbttaglist3.get(j1); - world.b(nbttagcompound5.getInt("x"), nbttagcompound5.getInt("y"), nbttagcompound5.getInt("z"), nbttagcompound5.getInt("i"), nbttagcompound5.getInt("t"), nbttagcompound5.getInt("p")); + world.b(nbttagcompound5.getInt("x"), nbttagcompound5.getInt("y"), nbttagcompound5.getInt("z"), Block.e(nbttagcompound5.getInt("i")), nbttagcompound5.getInt("t"), nbttagcompound5.getInt("p")); } } } |