public void processThreatEvent(ThreatRefStatusChangeEvent threatRefStatusChangeEvent) { threatRefStatusChangeEvent.setThreatManager(this); // now we can set the threat manager HostileReference hostilRef = threatRefStatusChangeEvent.getReference(); switch (threatRefStatusChangeEvent.getType()) { case UnitEventTypes.ThreatRefThreatChange: if ((getCurrentVictim() == hostilRef && threatRefStatusChangeEvent.getFValue() < 0.0f) || (getCurrentVictim() != hostilRef && threatRefStatusChangeEvent.getFValue() > 0.0f)) { setDirty(true); // the order in the threat list might have changed } break; case UnitEventTypes.ThreatRefOnlineStatus: if (!hostilRef.isOnline()) { if (hostilRef == getCurrentVictim()) { setCurrentVictim(null); setDirty(true); } Owner.SendRemoveFromThreatList(hostilRef); threatContainer.remove(hostilRef); threatOfflineContainer.addReference(hostilRef); } else { if (getCurrentVictim() != null && hostilRef.getThreat() > (1.1f * getCurrentVictim().getThreat())) { setDirty(true); } threatContainer.addReference(hostilRef); threatOfflineContainer.remove(hostilRef); } break; case UnitEventTypes.ThreatRefRemoveFromList: if (hostilRef == getCurrentVictim()) { setCurrentVictim(null); setDirty(true); } Owner.SendRemoveFromThreatList(hostilRef); if (hostilRef.isOnline()) { threatContainer.remove(hostilRef); } else { threatOfflineContainer.remove(hostilRef); } break; } }