New TileEntity function to determine if the TE should be destroied when Block/Meta changes, For Issue #300
This commit is contained in:
parent
ee0763fb4a
commit
599591e883
2 changed files with 49 additions and 22 deletions
|
@ -164,16 +164,24 @@
|
|||
ExtendedBlockStorage var10 = this.storageArrays[par2 >> 4];
|
||||
boolean var11 = false;
|
||||
|
||||
@@ -607,7 +705,7 @@
|
||||
@@ -607,9 +705,13 @@
|
||||
{
|
||||
Block.blocksList[var8].breakBlock(this.worldObj, var12, par2, var13, var8, var9);
|
||||
}
|
||||
- else if (Block.blocksList[var8] instanceof BlockContainer && var8 != par4)
|
||||
- {
|
||||
- this.worldObj.removeBlockTileEntity(var12, par2, var13);
|
||||
+ else if (Block.blocksList[var8] != null && Block.blocksList[var8].hasTileEntity(var9))
|
||||
{
|
||||
this.worldObj.removeBlockTileEntity(var12, par2, var13);
|
||||
+ {
|
||||
+ TileEntity te = worldObj.getBlockTileEntity(var12, par2, var13);
|
||||
+ if (te != null && te.shouldRefresh(var8, par4, var9, par5, worldObj, var12, par2, var13))
|
||||
+ {
|
||||
+ this.worldObj.removeBlockTileEntity(var12, par2, var13);
|
||||
+ }
|
||||
}
|
||||
@@ -627,7 +725,7 @@
|
||||
}
|
||||
|
||||
@@ -627,7 +729,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -182,7 +190,7 @@
|
|||
{
|
||||
if (par2 >= var7)
|
||||
{
|
||||
@@ -651,29 +749,21 @@
|
||||
@@ -651,29 +753,21 @@
|
||||
Block.blocksList[par4].onBlockAdded(this.worldObj, var12, par2, var13);
|
||||
}
|
||||
|
||||
|
@ -215,7 +223,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -688,7 +778,7 @@
|
||||
@@ -688,7 +782,7 @@
|
||||
*/
|
||||
public boolean setBlockMetadata(int par1, int par2, int par3, int par4)
|
||||
{
|
||||
|
@ -224,7 +232,7 @@
|
|||
|
||||
if (var5 == null)
|
||||
{
|
||||
@@ -708,7 +798,7 @@
|
||||
@@ -708,7 +802,7 @@
|
||||
var5.setExtBlockMetadata(par1, par2 & 15, par3, par4);
|
||||
int var7 = var5.getExtBlockID(par1, par2 & 15, par3);
|
||||
|
||||
|
@ -233,7 +241,7 @@
|
|||
{
|
||||
TileEntity var8 = this.getChunkBlockTileEntity(par1, par2, par3);
|
||||
|
||||
@@ -729,7 +819,7 @@
|
||||
@@ -729,7 +823,7 @@
|
||||
*/
|
||||
public int getSavedLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4)
|
||||
{
|
||||
|
@ -242,7 +250,7 @@
|
|||
return var5 == null ? (this.canBlockSeeTheSky(par2, par3, par4) ? par1EnumSkyBlock.defaultLightValue : 0) : (par1EnumSkyBlock == EnumSkyBlock.Sky ? var5.getExtSkylightValue(par2, par3 & 15, par4) : (par1EnumSkyBlock == EnumSkyBlock.Block ? var5.getExtBlocklightValue(par2, par3 & 15, par4) : par1EnumSkyBlock.defaultLightValue));
|
||||
}
|
||||
|
||||
@@ -739,6 +829,11 @@
|
||||
@@ -739,6 +833,11 @@
|
||||
*/
|
||||
public void setLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4, int par5)
|
||||
{
|
||||
|
@ -254,7 +262,7 @@
|
|||
ExtendedBlockStorage var6 = this.storageArrays[par3 >> 4];
|
||||
|
||||
if (var6 == null)
|
||||
@@ -767,7 +862,7 @@
|
||||
@@ -767,7 +866,7 @@
|
||||
*/
|
||||
public int getBlockLightValue(int par1, int par2, int par3, int par4)
|
||||
{
|
||||
|
@ -263,7 +271,7 @@
|
|||
|
||||
if (var5 == null)
|
||||
{
|
||||
@@ -820,7 +915,7 @@
|
||||
@@ -820,7 +919,7 @@
|
||||
{
|
||||
var4 = this.entityLists.length - 1;
|
||||
}
|
||||
|
@ -272,7 +280,7 @@
|
|||
par1Entity.addedToChunk = true;
|
||||
par1Entity.chunkCoordX = this.xPosition;
|
||||
par1Entity.chunkCoordY = var4;
|
||||
@@ -870,33 +965,33 @@
|
||||
@@ -870,33 +969,33 @@
|
||||
ChunkPosition var4 = new ChunkPosition(par1, par2, par3);
|
||||
TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(var4);
|
||||
|
||||
|
@ -317,7 +325,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -911,7 +1006,7 @@
|
||||
@@ -911,7 +1010,7 @@
|
||||
|
||||
if (this.isChunkLoaded)
|
||||
{
|
||||
|
@ -326,7 +334,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -926,8 +1021,14 @@
|
||||
@@ -926,8 +1025,14 @@
|
||||
par4TileEntity.yCoord = par2;
|
||||
par4TileEntity.zCoord = this.zPosition * 16 + par3;
|
||||
|
||||
|
@ -343,7 +351,7 @@
|
|||
par4TileEntity.validate();
|
||||
this.chunkTileEntityMap.put(var5, par4TileEntity);
|
||||
}
|
||||
@@ -963,6 +1064,7 @@
|
||||
@@ -963,6 +1068,7 @@
|
||||
{
|
||||
this.worldObj.addLoadedEntities(this.entityLists[var1]);
|
||||
}
|
||||
|
@ -351,7 +359,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -983,6 +1085,7 @@
|
||||
@@ -983,6 +1089,7 @@
|
||||
{
|
||||
this.worldObj.unloadEntities(this.entityLists[var3]);
|
||||
}
|
||||
|
@ -359,7 +367,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -999,8 +1102,8 @@
|
||||
@@ -999,8 +1106,8 @@
|
||||
*/
|
||||
public void getEntitiesWithinAABBForEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB, List par3List)
|
||||
{
|
||||
|
@ -370,7 +378,7 @@
|
|||
|
||||
if (var4 < 0)
|
||||
{
|
||||
@@ -1047,8 +1150,8 @@
|
||||
@@ -1047,8 +1154,8 @@
|
||||
*/
|
||||
public void getEntitiesOfTypeWithinAAAB(Class par1Class, AxisAlignedBB par2AxisAlignedBB, List par3List, IEntitySelector par4IEntitySelector)
|
||||
{
|
||||
|
@ -381,7 +389,7 @@
|
|||
|
||||
if (var5 < 0)
|
||||
{
|
||||
@@ -1231,6 +1334,15 @@
|
||||
@@ -1231,6 +1338,15 @@
|
||||
*/
|
||||
public void fillChunk(byte[] par1ArrayOfByte, int par2, int par3, boolean par4)
|
||||
{
|
||||
|
@ -397,7 +405,7 @@
|
|||
int var5 = 0;
|
||||
int var6;
|
||||
|
||||
@@ -1327,12 +1439,26 @@
|
||||
@@ -1327,12 +1443,26 @@
|
||||
}
|
||||
|
||||
this.generateHeightMap();
|
||||
|
@ -430,7 +438,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -1441,4 +1567,18 @@
|
||||
@@ -1441,4 +1571,18 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- ../src_base/common/net/minecraft/src/TileEntity.java
|
||||
+++ ../src_work/common/net/minecraft/src/TileEntity.java
|
||||
@@ -287,4 +287,33 @@
|
||||
@@ -287,4 +287,52 @@
|
||||
addMapping(TileEntityBeacon.class, "Beacon");
|
||||
addMapping(TileEntitySkull.class, "Skull");
|
||||
}
|
||||
|
@ -32,5 +32,24 @@
|
|||
+ */
|
||||
+ public void onChunkUnload()
|
||||
+ {
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Called from Chunk.setBlockIDWithMetadata, determines if this tile entity should be re-created when the ID, or Metadata changes.
|
||||
+ * Use with caution as this will leave straggler TileEntities, or create conflicts with other TileEntities if not used properly.
|
||||
+ *
|
||||
+ * @param oldID The old ID of the block
|
||||
+ * @param newID The new ID of the block (May be the same)
|
||||
+ * @param oldMeta The old metadata of the block
|
||||
+ * @param newMeta The new metadata of the block (May be the same)
|
||||
+ * @param world Current world
|
||||
+ * @param x X Postion
|
||||
+ * @param y Y Position
|
||||
+ * @param z Z Position
|
||||
+ * @return True to remove the old tile entity, false to keep it in tact {and create a new one if the new values specify to}
|
||||
+ */
|
||||
+ public boolean shouldRefresh(int oldID, int newID, int oldMeta, int newMeta, World world, int x, int y, int z)
|
||||
+ {
|
||||
+ return true;
|
||||
+ }
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue