diff --git a/src/main/java/com/projectswg/holocore/resources/objects/awareness/TerrainMap.java b/src/main/java/com/projectswg/holocore/resources/objects/awareness/TerrainMap.java index 54f186c3b..ef726b1d3 100644 --- a/src/main/java/com/projectswg/holocore/resources/objects/awareness/TerrainMap.java +++ b/src/main/java/com/projectswg/holocore/resources/objects/awareness/TerrainMap.java @@ -88,6 +88,7 @@ public class TerrainMap { aware = getNearbyAware(obj); else aware = superParent.getAware(AwarenessType.OBJECT); + aware.removeIf(a -> !AwarenessUtilities.isInAwareness(a)); recursiveAdd(aware, obj); return aware; } diff --git a/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java b/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java index 71e1db9c5..d074914db 100644 --- a/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java +++ b/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java @@ -104,6 +104,19 @@ public class CreatureObject extends TangibleObject { awareness.flushAware(getOwner()); } + public void resetObjectsAware() { + if (isPlayer()) + awareness.resetObjectsAware(); + } + + public void addObjectsAware() { + if (isPlayer()) { + for (SWGObject obj : getAware()) { + awareness.addAware(obj); + } + } + } + @Override public void addObject(SWGObject obj) { super.addObject(obj); diff --git a/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObjectAwareness.java b/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObjectAwareness.java index d5dd6247b..c3202a3d8 100644 --- a/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObjectAwareness.java +++ b/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObjectAwareness.java @@ -93,6 +93,12 @@ public class CreatureObjectAwareness { } } + public synchronized void resetObjectsAware() { + aware.clear(); + pendingAdd.clear(); + pendingRemove.clear(); + } + List getCreateList() { List list = new ArrayList<>(); List sortedDepth = new ArrayList<>(pendingAdd); diff --git a/src/main/java/com/projectswg/holocore/services/objects/AwarenessService.java b/src/main/java/com/projectswg/holocore/services/objects/AwarenessService.java index 979f25e49..733709436 100644 --- a/src/main/java/com/projectswg/holocore/services/objects/AwarenessService.java +++ b/src/main/java/com/projectswg/holocore/services/objects/AwarenessService.java @@ -166,8 +166,10 @@ public class AwarenessService extends Service { creature.systemMove(parent, loc); creature.setOwner(null); creature.setAware(AwarenessType.OBJECT, Collections.emptyList()); + creature.resetObjectsAware(); creature.setOwner(player); startZone(creature, firstZone); + creature.addObjectsAware(); awareness.updateObject(creature); }