Added metadata sensitive Chunk constructor for Bioxx
This commit is contained in:
parent
2f89f566cf
commit
722fe597b8
2 changed files with 122 additions and 24 deletions
|
@ -20,7 +20,56 @@
|
|||
|
||||
if (var9 != 0)
|
||||
{
|
||||
@@ -585,7 +589,7 @@
|
||||
@@ -139,6 +143,48 @@
|
||||
}
|
||||
|
||||
/**
|
||||
+ * Metadata sensitive Chunk constructor for use in new ChunkProviders that
|
||||
+ * use metadata sensitive blocks during generation.
|
||||
+ *
|
||||
+ * @param world The world this chunk belongs to
|
||||
+ * @param ids A ByteArray containing all the BlockID's to set this chunk to
|
||||
+ * @param metadata A ByteArray containing all the metadata to set this chunk to
|
||||
+ * @param chunkX The chunk's X position
|
||||
+ * @param chunkZ The Chunk's Z position
|
||||
+ */
|
||||
+ public Chunk(World world, byte[] ids, byte[] metadata, int chunkX, int chunkZ)
|
||||
+ {
|
||||
+ this(world, chunkX, chunkZ);
|
||||
+ int height = ids.length / 256;
|
||||
+
|
||||
+ for (int x = 0; x < 16; ++x)
|
||||
+ {
|
||||
+ for (int z = 0; z < 16; ++z)
|
||||
+ {
|
||||
+ for (int y = 0; y < height; ++y)
|
||||
+ {
|
||||
+ int index = x << 11 | z << 7 | y;
|
||||
+ int id = ids[index] & 0xFF;
|
||||
+ int meta = metadata[index] & 0x0F;
|
||||
+
|
||||
+ if (id != 0)
|
||||
+ {
|
||||
+ int chunkY = y >> 4;
|
||||
+
|
||||
+ if (storageArrays[chunkY] == null)
|
||||
+ {
|
||||
+ storageArrays[chunkY] = new ExtendedBlockStorage(chunkY << 4);
|
||||
+ }
|
||||
+
|
||||
+ storageArrays[chunkY].setExtBlockID(x, y & 15, z, id);
|
||||
+ storageArrays[chunkY].setExtBlockMetadata(x, y & 15, z, meta);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
* Checks whether the chunk is at the X/Z location specified
|
||||
*/
|
||||
public boolean isAtLocation(int par1, int par2)
|
||||
@@ -585,7 +631,7 @@
|
||||
{
|
||||
Block.blocksList[var8].onBlockRemoval(this.worldObj, var11, par2, var12);
|
||||
}
|
||||
|
@ -29,7 +78,7 @@
|
|||
{
|
||||
this.worldObj.removeBlockTileEntity(var11, par2, var12);
|
||||
}
|
||||
@@ -629,32 +633,23 @@
|
||||
@@ -629,32 +675,23 @@
|
||||
Block.blocksList[par4].onBlockAdded(this.worldObj, var11, par2, var12);
|
||||
}
|
||||
|
||||
|
@ -65,7 +114,7 @@
|
|||
this.isModified = true;
|
||||
return true;
|
||||
}
|
||||
@@ -686,7 +681,7 @@
|
||||
@@ -686,7 +723,7 @@
|
||||
var5.setExtBlockMetadata(par1, par2 & 15, par3, par4);
|
||||
int var7 = var5.getExtBlockID(par1, par2 & 15, par3);
|
||||
|
||||
|
@ -74,7 +123,7 @@
|
|||
{
|
||||
TileEntity var8 = this.getChunkBlockTileEntity(par1, par2, par3);
|
||||
|
||||
@@ -852,34 +847,33 @@
|
||||
@@ -852,34 +889,33 @@
|
||||
{
|
||||
ChunkPosition var4 = new ChunkPosition(par1, par2, par3);
|
||||
TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(var4);
|
||||
|
@ -120,7 +169,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -894,7 +888,7 @@
|
||||
@@ -894,7 +930,7 @@
|
||||
|
||||
if (this.isChunkLoaded)
|
||||
{
|
||||
|
@ -129,7 +178,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -909,8 +903,14 @@
|
||||
@@ -909,8 +945,14 @@
|
||||
par4TileEntity.yCoord = par2;
|
||||
par4TileEntity.zCoord = this.zPosition * 16 + par3;
|
||||
|
||||
|
@ -145,7 +194,7 @@
|
|||
par4TileEntity.validate();
|
||||
this.chunkTileEntityMap.put(var5, par4TileEntity);
|
||||
}
|
||||
@@ -946,6 +946,7 @@
|
||||
@@ -946,6 +988,7 @@
|
||||
{
|
||||
this.worldObj.addLoadedEntities(this.entityLists[var1]);
|
||||
}
|
||||
|
@ -153,7 +202,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -966,6 +967,7 @@
|
||||
@@ -966,6 +1009,7 @@
|
||||
{
|
||||
this.worldObj.unloadEntities(this.entityLists[var3]);
|
||||
}
|
||||
|
@ -161,7 +210,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -982,8 +984,8 @@
|
||||
@@ -982,8 +1026,8 @@
|
||||
*/
|
||||
public void getEntitiesWithinAABBForEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB, List par3List)
|
||||
{
|
||||
|
@ -172,7 +221,7 @@
|
|||
|
||||
if (var4 < 0)
|
||||
{
|
||||
@@ -1030,8 +1032,8 @@
|
||||
@@ -1030,8 +1074,8 @@
|
||||
*/
|
||||
public void getEntitiesOfTypeWithinAAAB(Class par1Class, AxisAlignedBB par2AxisAlignedBB, List par3List)
|
||||
{
|
||||
|
@ -183,7 +232,7 @@
|
|||
|
||||
if (var4 < 0)
|
||||
{
|
||||
@@ -1228,6 +1230,16 @@
|
||||
@@ -1228,6 +1272,16 @@
|
||||
|
||||
public void func_48494_a(byte[] par1ArrayOfByte, int par2, int par3, boolean par4)
|
||||
{
|
||||
|
@ -200,7 +249,7 @@
|
|||
int var5 = 0;
|
||||
int var6;
|
||||
|
||||
@@ -1324,12 +1336,26 @@
|
||||
@@ -1324,12 +1378,26 @@
|
||||
}
|
||||
|
||||
this.generateHeightMap();
|
||||
|
@ -232,7 +281,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -1435,4 +1461,18 @@
|
||||
@@ -1435,4 +1503,18 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,56 @@
|
|||
|
||||
if (var9 != 0)
|
||||
{
|
||||
@@ -545,7 +549,7 @@
|
||||
@@ -139,6 +143,48 @@
|
||||
}
|
||||
|
||||
/**
|
||||
+ * Metadata sensitive Chunk constructor for use in new ChunkProviders that
|
||||
+ * use metadata sensitive blocks during generation.
|
||||
+ *
|
||||
+ * @param world The world this chunk belongs to
|
||||
+ * @param ids A ByteArray containing all the BlockID's to set this chunk to
|
||||
+ * @param metadata A ByteArray containing all the metadata to set this chunk to
|
||||
+ * @param chunkX The chunk's X position
|
||||
+ * @param chunkZ The Chunk's Z position
|
||||
+ */
|
||||
+ public Chunk(World world, byte[] ids, byte[] metadata, int chunkX, int chunkZ)
|
||||
+ {
|
||||
+ this(world, chunkX, chunkZ);
|
||||
+ int height = ids.length / 256;
|
||||
+
|
||||
+ for (int x = 0; x < 16; ++x)
|
||||
+ {
|
||||
+ for (int z = 0; z < 16; ++z)
|
||||
+ {
|
||||
+ for (int y = 0; y < height; ++y)
|
||||
+ {
|
||||
+ int index = x << 11 | z << 7 | y;
|
||||
+ int id = ids[index] & 0xFF;
|
||||
+ int meta = metadata[index] & 0x0F;
|
||||
+
|
||||
+ if (id != 0)
|
||||
+ {
|
||||
+ int chunkY = y >> 4;
|
||||
+
|
||||
+ if (storageArrays[chunkY] == null)
|
||||
+ {
|
||||
+ storageArrays[chunkY] = new ExtendedBlockStorage(chunkY << 4);
|
||||
+ }
|
||||
+
|
||||
+ storageArrays[chunkY].setExtBlockID(x, y & 15, z, id);
|
||||
+ storageArrays[chunkY].setExtBlockMetadata(x, y & 15, z, meta);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
* Checks whether the chunk is at the X/Z location specified
|
||||
*/
|
||||
public boolean isAtLocation(int par1, int par2)
|
||||
@@ -545,7 +591,7 @@
|
||||
{
|
||||
Block.blocksList[var8].onBlockRemoval(this.worldObj, var11, par2, var12);
|
||||
}
|
||||
|
@ -29,7 +78,7 @@
|
|||
{
|
||||
this.worldObj.removeBlockTileEntity(var11, par2, var12);
|
||||
}
|
||||
@@ -589,32 +593,23 @@
|
||||
@@ -589,32 +635,23 @@
|
||||
Block.blocksList[par4].onBlockAdded(this.worldObj, var11, par2, var12);
|
||||
}
|
||||
|
||||
|
@ -65,7 +114,7 @@
|
|||
this.isModified = true;
|
||||
return true;
|
||||
}
|
||||
@@ -646,7 +641,7 @@
|
||||
@@ -646,7 +683,7 @@
|
||||
var5.setExtBlockMetadata(par1, par2 & 15, par3, par4);
|
||||
int var7 = var5.getExtBlockID(par1, par2 & 15, par3);
|
||||
|
||||
|
@ -74,7 +123,7 @@
|
|||
{
|
||||
TileEntity var8 = this.getChunkBlockTileEntity(par1, par2, par3);
|
||||
|
||||
@@ -812,34 +807,31 @@
|
||||
@@ -812,34 +849,31 @@
|
||||
{
|
||||
ChunkPosition var4 = new ChunkPosition(par1, par2, par3);
|
||||
TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(var4);
|
||||
|
@ -119,7 +168,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -854,7 +846,7 @@
|
||||
@@ -854,7 +888,7 @@
|
||||
|
||||
if (this.isChunkLoaded)
|
||||
{
|
||||
|
@ -128,7 +177,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -869,8 +861,14 @@
|
||||
@@ -869,8 +903,14 @@
|
||||
par4TileEntity.yCoord = par2;
|
||||
par4TileEntity.zCoord = this.zPosition * 16 + par3;
|
||||
|
||||
|
@ -144,7 +193,7 @@
|
|||
par4TileEntity.validate();
|
||||
this.chunkTileEntityMap.put(var5, par4TileEntity);
|
||||
}
|
||||
@@ -906,6 +904,7 @@
|
||||
@@ -906,6 +946,7 @@
|
||||
{
|
||||
this.worldObj.addLoadedEntities(this.entityLists[var1]);
|
||||
}
|
||||
|
@ -152,7 +201,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -926,6 +925,7 @@
|
||||
@@ -926,6 +967,7 @@
|
||||
{
|
||||
this.worldObj.unloadEntities(this.entityLists[var3]);
|
||||
}
|
||||
|
@ -160,7 +209,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -942,8 +942,8 @@
|
||||
@@ -942,8 +984,8 @@
|
||||
*/
|
||||
public void getEntitiesWithinAABBForEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB, List par3List)
|
||||
{
|
||||
|
@ -171,7 +220,7 @@
|
|||
|
||||
if (var4 < 0)
|
||||
{
|
||||
@@ -990,8 +990,8 @@
|
||||
@@ -990,8 +1032,8 @@
|
||||
*/
|
||||
public void getEntitiesOfTypeWithinAAAB(Class par1Class, AxisAlignedBB par2AxisAlignedBB, List par3List)
|
||||
{
|
||||
|
@ -182,7 +231,7 @@
|
|||
|
||||
if (var4 < 0)
|
||||
{
|
||||
@@ -1287,4 +1287,18 @@
|
||||
@@ -1287,4 +1329,18 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue