diff --git a/src/minecraft/net/minecraft/src/Chunk.java b/src/minecraft/net/minecraft/src/Chunk.java index 28173e1..8345130 100644 --- a/src/minecraft/net/minecraft/src/Chunk.java +++ b/src/minecraft/net/minecraft/src/Chunk.java @@ -130,7 +130,7 @@ public class Chunk { int var10 = var8 >> 4; - getBlockStorage(var10).setExtBlockID(var6, var8 & 15, var7, var9); + getBlockStorage(var10).setExtBlockID(var6, var8 & 15, var7, var9); } } } diff --git a/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java b/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java index 2e0d424..6fd9aa8 100644 --- a/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java +++ b/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java @@ -472,7 +472,7 @@ public class ChunkProviderGenerate implements IChunkProvider int var7 = var4 + 1; byte var8 = 3; int var9 = var4 + 1; - byte[] par3ArrayOfByte = storage.getBlockLSBArray(); + byte[] par3ArrayOfByte = new byte[1 << 12]; this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, x.multiply(BigInteger.valueOf(4)).subtract(BigInteger.valueOf(2)), z.multiply(BigInteger.valueOf(4)).subtract(BigInteger.valueOf(2)), var7 + 5, var9 + 5); double[] noiseArray = initializeNoiseField(null, x.multiply(BigInteger.valueOf(var4)), y * var4, z.multiply(BigInteger.valueOf(var4)), var7, var8, var9); for (int var10 = 0; var10 < var4; ++var10) @@ -540,6 +540,10 @@ public class ChunkProviderGenerate implements IChunkProvider } } } + for(int i = 0; i < 16; i++) for(int j = 0; j < 16; j++) for(int k = 0; k < 16; k++) { + int blockId = par3ArrayOfByte[i << 8 | k << 4 | j] & 0xFF; + if(blockId != 0) storage.setExtBlockID(i, j, k, blockId); + } } /** diff --git a/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java b/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java index 247563f..ebe3348 100644 --- a/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java +++ b/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java @@ -317,4 +317,12 @@ public class ExtendedBlockStorage this.blockMSBArray = new NibbleArray(this.blockLSBArray.length, 4); return this.blockMSBArray; } + + public int getBlockRefCnt() { + return this.blockRefCount; + } + + public void setBlockRefCnt(int blockRefCnt) { + this.blockRefCount = blockRefCnt; + } } diff --git a/src/minecraft/net/minecraft/src/NetClientHandler.java b/src/minecraft/net/minecraft/src/NetClientHandler.java index 243ba59..a311e81 100644 --- a/src/minecraft/net/minecraft/src/NetClientHandler.java +++ b/src/minecraft/net/minecraft/src/NetClientHandler.java @@ -583,12 +583,15 @@ public class NetClientHandler extends NetHandler } public void handleAddExtraChunk(Packet57ExtraChunk packet) { - ExtendedBlockStorage storage = this.worldClient.getChunkFromChunkCoords(packet.getX(), packet.getZ()).getBlockStorage(packet.getY()); + Chunk chunk = this.worldClient.getChunkFromChunkCoords(packet.getX(), packet.getZ()); + if(chunk instanceof EmptyChunk) throw new RuntimeException("Attempt send extra chunk data on empty chunk!"); + ExtendedBlockStorage storage = chunk.getBlockStorage(packet.getY()); System.arraycopy(packet.getBlockLSB() , 0, storage.getBlockLSBArray() , 0, storage.getBlockLSBArray() .length); System.arraycopy(packet.getBlockMSB() , 0, storage.getBlockMSBArray() .data, 0, storage.getBlockMSBArray() .data.length); System.arraycopy(packet.getMetadata() , 0, storage.getMetadataArray() .data, 0, storage.getMetadataArray() .data.length); System.arraycopy(packet.getSkyLight() , 0, storage.getSkylightArray() .data, 0, storage.getSkylightArray() .data.length); System.arraycopy(packet.getBlockLight(), 0, storage.getBlocklightArray().data, 0, storage.getBlocklightArray().data.length); + storage.setBlockRefCnt(packet.getBlockRefCnt()); this.worldClient.markBlocksDirty(packet.getX().shiftLeft(4), packet.getY() << 4, packet.getZ().shiftLeft(4), (packet.getX().shiftLeft(4)).add(BigInteger.valueOf(15)), packet.getY() + 16, (packet.getZ().shiftLeft(4)).add(BigInteger.valueOf(15))); } diff --git a/src/minecraft/net/minecraft/src/Packet57ExtraChunk.java b/src/minecraft/net/minecraft/src/Packet57ExtraChunk.java index 3b90b3d..024807a 100644 --- a/src/minecraft/net/minecraft/src/Packet57ExtraChunk.java +++ b/src/minecraft/net/minecraft/src/Packet57ExtraChunk.java @@ -10,19 +10,20 @@ public class Packet57ExtraChunk extends Packet { private byte[] blockLSB, blockMSB, metadata, skyLight, blockLight; private BigInteger x, z; - private int y; - + private int y, blockRefCnt; + public Packet57ExtraChunk() {} public Packet57ExtraChunk(BigInteger x, int y, BigInteger z, ExtendedBlockStorage storage) { this.x = x; this.y = y; this.z = z; - this.blockLSB = storage.getBlockLSBArray(); - this.blockMSB = storage.getBlockMSBArray().data; - this.metadata = storage.getMetadataArray().data; - this.skyLight = storage.getSkylightArray().data; - this.blockLight = storage.getBlocklightArray().data; + this.blockLSB = storage.getBlockLSBArray(); + this.blockMSB = storage.getBlockMSBArray().data; + this.metadata = storage.getMetadataArray().data; + this.skyLight = storage.getSkylightArray().data; + this.blockLight = storage.getBlocklightArray().data; + this.blockRefCnt = storage.getBlockRefCnt(); } @Override @@ -30,11 +31,12 @@ public class Packet57ExtraChunk extends Packet { this.x = readBigInteger(var1); this.y = var1.readInt(); this.z = readBigInteger(var1); - this.blockLSB = readBytesFromStream(var1); - this.blockMSB = readBytesFromStream(var1); - this.metadata = readBytesFromStream(var1); - this.skyLight = readBytesFromStream(var1); - this.blockLight = readBytesFromStream(var1); + this.blockLSB = readBytesFromStream(var1); + this.blockMSB = readBytesFromStream(var1); + this.metadata = readBytesFromStream(var1); + this.skyLight = readBytesFromStream(var1); + this.blockLight = readBytesFromStream(var1); + this.blockRefCnt = var1.readInt(); } @Override @@ -42,11 +44,12 @@ public class Packet57ExtraChunk extends Packet { writeBigInteger(var1, this.x); var1.writeInt(this.y); writeBigInteger(var1, this.z); - writeByteArray(var1, blockLSB); - writeByteArray(var1, blockMSB); - writeByteArray(var1, metadata); - writeByteArray(var1, skyLight); - writeByteArray(var1, blockLight); + writeByteArray(var1, this.blockLSB); + writeByteArray(var1, this.blockMSB); + writeByteArray(var1, this.metadata); + writeByteArray(var1, this.skyLight); + writeByteArray(var1, this.blockLight); + var1.writeInt(blockRefCnt); } @Override @@ -90,5 +93,9 @@ public class Packet57ExtraChunk extends Packet { public int getY() { return y; } + + public int getBlockRefCnt() { + return blockRefCnt; + } }