From b42905a558d4693ac402a6ee3c70dbf3f1143dff Mon Sep 17 00:00:00 2001 From: Ross Allan Date: Wed, 19 Jun 2013 00:19:45 +0100 Subject: [PATCH] Ensure TE/E not in previous tick region if multiple add( calls. Signed-off-by: Ross Allan --- .../tickthreading/minecraft/TickManager.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/common/nallar/tickthreading/minecraft/TickManager.java b/src/common/nallar/tickthreading/minecraft/TickManager.java index eddf73d5..a160fa6e 100644 --- a/src/common/nallar/tickthreading/minecraft/TickManager.java +++ b/src/common/nallar/tickthreading/minecraft/TickManager.java @@ -147,7 +147,14 @@ private void processChanges() { } public boolean add(TileEntity tileEntity, boolean newEntity) { + TileEntityTickRegion lastTickRegion = tileEntity.tickRegion; TileEntityTickRegion tileEntityTickRegion = getOrCreateRegion(tileEntity); + if (lastTickRegion != null) { + if (lastTickRegion == tileEntityTickRegion) { + return false; + } + lastTickRegion.remove(tileEntity); + } if (tileEntityTickRegion.add(tileEntity)) { tileEntity.tickRegion = tileEntityTickRegion; if (newEntity) { @@ -161,7 +168,14 @@ public boolean add(TileEntity tileEntity, boolean newEntity) { } public boolean add(Entity entity, boolean newEntity) { + EntityTickRegion lastTickRegion = entity.tickRegion; EntityTickRegion entityTickRegion = getOrCreateRegion(entity); + if (lastTickRegion != null) { + if (lastTickRegion == entityTickRegion) { + return false; + } + lastTickRegion.remove(entity); + } if (entityTickRegion.add(entity)) { entity.tickRegion = entityTickRegion; if (newEntity) { @@ -232,8 +246,8 @@ public void batchRemoveTileEntities(HashSet tileEntities) { for (TileEntity tileEntity : tileEntities) { TileEntityTickRegion tickRegion = tileEntity.tickRegion; if (tickRegion != null) { - tickRegion.remove(tileEntity); tileEntity.tickRegion = null; + tickRegion.remove(tileEntity); tileEntity.onChunkUnload(); } unlock(tileEntity);