New onChunkUnload event for TileEntities, for psxlover.

This commit is contained in:
LexManos 2012-06-13 21:19:08 -07:00
parent d56f0d0d55
commit 7711505b92
4 changed files with 78 additions and 46 deletions

View File

@ -1,6 +1,6 @@
--- ../src_base/minecraft/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
@@ -223,4 +223,24 @@
@@ -223,4 +223,29 @@
public static void addNewTileEntityMapping(Class<? extends TileEntity> tileEntityClass, String id) {
addMapping(tileEntityClass, id);
}
@ -24,4 +24,9 @@
+ * @param pkt The data packet
+ */
+ public void onDataPacket(NetworkManager net, Packet132TileEntityData pkt){}
+
+ /**
+ * Called when the chunk this TileEntity is on is Unloaded.
+ */
+ public void onChunkUnload(){}
}

View File

@ -92,7 +92,18 @@
}
}
}
@@ -2098,18 +2119,18 @@
@@ -2078,6 +2099,10 @@
if (!this.entityRemoval.isEmpty())
{
+ for (Object tile : entityRemoval)
+ {
+ ((TileEntity)tile).onChunkUnload();
+ }
this.loadedTileEntityList.removeAll(this.entityRemoval);
this.entityRemoval.clear();
}
@@ -2098,18 +2123,18 @@
{
this.loadedTileEntityList.add(var8);
}
@ -115,18 +126,18 @@
}
}
@@ -2122,13 +2143,13 @@
@@ -2122,13 +2147,13 @@
public void addTileEntity(Collection par1Collection)
{
- if (this.scanningTileEntities)
- {
- this.addedTileEntityList.addAll(par1Collection);
- }
- else
+ List dest = scanningTileEntities ? addedTileEntityList : loadedTileEntityList;
+ for(Object entity : par1Collection)
{
- this.addedTileEntityList.addAll(par1Collection);
- }
- else
- {
- this.loadedTileEntityList.addAll(par1Collection);
+ if(((TileEntity)entity).canUpdate())
+ {
@ -135,7 +146,7 @@
}
}
@@ -2150,7 +2171,7 @@
@@ -2150,7 +2175,7 @@
int var4 = MathHelper.floor_double(par1Entity.posZ);
byte var5 = 32;
@ -144,7 +155,7 @@
{
par1Entity.lastTickPosX = par1Entity.posX;
par1Entity.lastTickPosY = par1Entity.posY;
@@ -2327,7 +2348,14 @@
@@ -2327,7 +2352,14 @@
if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID)
{
return true;
@ -160,7 +171,7 @@
}
}
}
@@ -2631,25 +2659,19 @@
@@ -2631,25 +2663,19 @@
*/
public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity)
{
@ -198,21 +209,21 @@
}
}
@@ -2658,27 +2680,10 @@
@@ -2658,27 +2684,10 @@
*/
public void removeBlockTileEntity(int par1, int par2, int par3)
{
- TileEntity var4 = this.getBlockTileEntity(par1, par2, par3);
-
- if (var4 != null && this.scanningTileEntities)
- {
+ Chunk chunk = getChunkFromChunkCoords(par1 >> 4, par3 >> 4);
+ if (chunk != null)
{
- var4.invalidate();
- this.addedTileEntityList.remove(var4);
- }
- else
+ Chunk chunk = getChunkFromChunkCoords(par1 >> 4, par3 >> 4);
+ if (chunk != null)
{
- {
- if (var4 != null)
- {
- this.addedTileEntityList.remove(var4);
@ -229,7 +240,7 @@
}
}
@@ -2704,7 +2709,8 @@
@@ -2704,7 +2713,8 @@
*/
public boolean isBlockNormalCube(int par1, int par2, int par3)
{
@ -239,7 +250,7 @@
}
/**
@@ -2720,7 +2726,7 @@
@@ -2720,7 +2730,7 @@
if (var5 != null && !var5.isEmpty())
{
Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)];
@ -248,7 +259,7 @@
}
else
{
@@ -2985,6 +2991,7 @@
@@ -2985,6 +2995,7 @@
}
}
}
@ -256,7 +267,7 @@
Profiler.endSection();
@@ -3308,7 +3315,7 @@
@@ -3308,7 +3319,7 @@
private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6)
{
@ -265,7 +276,7 @@
int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6;
int var9 = this.getSavedLightValue(EnumSkyBlock.Block, par2 + 1, par3, par4) - par6;
int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6;
@@ -3668,10 +3675,10 @@
@@ -3668,10 +3679,10 @@
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
{
this.entitiesWithinAABBExcludingEntity.clear();
@ -280,7 +291,7 @@
for (int var7 = var3; var7 <= var4; ++var7)
{
@@ -3692,10 +3699,10 @@
@@ -3692,10 +3703,10 @@
*/
public List getEntitiesWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB)
{
@ -295,7 +306,7 @@
ArrayList var7 = new ArrayList();
for (int var8 = var3; var8 <= var4; ++var8)
@@ -3840,7 +3847,10 @@
@@ -3840,7 +3851,10 @@
{
var8 = null;
}
@ -307,7 +318,7 @@
return par1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, par2, par3, par4, par6);
}
}
@@ -4449,4 +4459,39 @@
@@ -4449,4 +4463,39 @@
{
return this.worldInfo.getTerrainType() == WorldType.FLAT ? 0.0D : 63.0D;
}

View File

@ -1,6 +1,6 @@
--- ../src_base/minecraft_server/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
@@ -207,4 +207,24 @@
@@ -207,4 +207,29 @@
public static void addNewTileEntityMapping(Class<? extends TileEntity> tileEntityClass, String id) {
addMapping(tileEntityClass, id);
}
@ -24,4 +24,9 @@
+ * @param pkt The data packet
+ */
+ public void onDataPacket(NetworkManager net, Packet132TileEntityData pkt){}
+
+ /**
+ * Called when the chunk this TileEntity is on is Unloaded.
+ */
+ public void onChunkUnload(){}
}

View File

@ -62,7 +62,18 @@
}
}
}
@@ -1634,14 +1646,16 @@
@@ -1614,6 +1626,10 @@
if (!this.entityRemoval.isEmpty())
{
+ for (Object tile : entityRemoval)
+ {
+ ((TileEntity)tile).onChunkUnload();
+ }
this.loadedTileEntityList.removeAll(this.entityRemoval);
this.entityRemoval.clear();
}
@@ -1634,14 +1650,16 @@
{
this.loadedTileEntityList.add(var8);
}
@ -81,18 +92,18 @@
}
}
@@ -1658,13 +1672,13 @@
@@ -1658,13 +1676,13 @@
public void addTileEntity(Collection par1Collection)
{
- if (this.scanningTileEntities)
- {
- this.addedTileEntityList.addAll(par1Collection);
- }
- else
+ List dest = scanningTileEntities ? addedTileEntityList : loadedTileEntityList;
+ for(Object entity : par1Collection)
{
- this.addedTileEntityList.addAll(par1Collection);
- }
- else
- {
- this.loadedTileEntityList.addAll(par1Collection);
+ if(((TileEntity)entity).canUpdate())
+ {
@ -101,7 +112,7 @@
}
}
@@ -1686,7 +1700,7 @@
@@ -1686,7 +1704,7 @@
int var4 = MathHelper.floor_double(par1Entity.posZ);
byte var5 = 32;
@ -110,7 +121,7 @@
{
par1Entity.lastTickPosX = par1Entity.posX;
par1Entity.lastTickPosY = par1Entity.posY;
@@ -1909,6 +1923,13 @@
@@ -1909,6 +1927,13 @@
if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID)
{
return true;
@ -124,7 +135,7 @@
}
}
}
@@ -2192,25 +2213,21 @@
@@ -2192,25 +2217,21 @@
*/
public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity)
{
@ -163,21 +174,21 @@
}
}
@@ -2219,27 +2236,10 @@
@@ -2219,27 +2240,10 @@
*/
public void removeBlockTileEntity(int par1, int par2, int par3)
{
- TileEntity var4 = this.getBlockTileEntity(par1, par2, par3);
-
- if (var4 != null && this.scanningTileEntities)
- {
+ Chunk var5 = this.getChunkFromChunkCoords(par1 >> 4, par3 >> 4);
+ if (var5 != null)
{
- var4.invalidate();
- this.addedTileEntityList.remove(var4);
- }
- else
+ Chunk var5 = this.getChunkFromChunkCoords(par1 >> 4, par3 >> 4);
+ if (var5 != null)
{
- {
- if (var4 != null)
- {
- this.addedTileEntityList.remove(var4);
@ -194,7 +205,7 @@
}
}
@@ -2265,7 +2265,8 @@
@@ -2265,7 +2269,8 @@
*/
public boolean isBlockNormalCube(int par1, int par2, int par3)
{
@ -204,7 +215,7 @@
}
/**
@@ -2281,7 +2282,7 @@
@@ -2281,7 +2286,7 @@
if (var5 != null && !var5.isEmpty())
{
Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)];
@ -213,7 +224,7 @@
}
else
{
@@ -2540,6 +2541,7 @@
@@ -2540,6 +2545,7 @@
}
}
}
@ -221,7 +232,7 @@
Profiler.endSection();
@@ -2863,7 +2865,7 @@
@@ -2863,7 +2869,7 @@
private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6)
{
@ -230,7 +241,7 @@
int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6;
int var9 = this.getSavedLightValue(EnumSkyBlock.Block, par2 + 1, par3, par4) - par6;
int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6;
@@ -3196,10 +3198,10 @@
@@ -3196,10 +3202,10 @@
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
{
this.entitiesWithinAABBExcludingEntity.clear();
@ -245,7 +256,7 @@
for (int var7 = var3; var7 <= var4; ++var7)
{
@@ -3220,10 +3222,10 @@
@@ -3220,10 +3226,10 @@
*/
public List getEntitiesWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB)
{
@ -260,7 +271,7 @@
ArrayList var7 = new ArrayList();
for (int var8 = var3; var8 <= var4; ++var8)
@@ -3349,6 +3351,11 @@
@@ -3349,6 +3355,11 @@
{
var8 = null;
}
@ -272,7 +283,7 @@
return par1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, par2, par3, par4, par6);
}
@@ -3864,4 +3871,38 @@
@@ -3864,4 +3875,38 @@
{
return this.getChunkProvider().findClosestStructure(this, par1Str, par2, par3, par4);
}