@Override public boolean checkMobParticleHit(Particle p) { if (gameController.multiplayerMode != gameController.multiplayerMode.CLIENT) { Monster monster = null; try { for (String key : monsters.keySet()) { monster = (Monster) monsters.get(key); if (monster.getPerimeter().intersects(p.getRect())) { monster.applyDamage(p.getDamage(), p.getSource(), p.isFromPlaceable(), false); return true; } } } catch (ConcurrentModificationException concEx) { // another thread was trying to modify monsters while iterating // we'll continue and the new item can be grabbed on the next update } } return false; }
public void processMonsterUpdate(UpdateMonster um) { if (um != null) { if (monsters.containsKey(um.id)) { Monster monster = monsters.get(um.id); if (monster != null) { EIError.debugMsg( "Setting " + um.id + " to " + um.mapX + ":" + um.mapY + ", Action: " + um.action); monster.setPosition(um.mapX, um.mapY); if (um.previousGoal != null) { monster.ai.setPreviousGoal(um.previousGoal); } if (um.currentGoal != null) { monster.ai.setCurrentGoal(um.currentGoal); } if (um.action.equals("ApplyDamage")) { monster.applyDamage(um.dataInt, um.actor); } else if (um.action.equals("ApplyKnockBack")) { monster.applyKnockBack(um.dataInt, um.dataInt2); } else if (um.action.equals("Die")) { monster.setHitPoints(0); } else if (um.action.equals("Fear")) { monster.applyKnockBack(um.dataInt, um.dataInt2); monster.fear(um.dataPoint, um.dataLong); } } } else { if (gameController.multiplayerMode == gameController.multiplayerMode.CLIENT && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { EIError.debugMsg("Monster not found - need " + um.id); registry.getNetworkThread().sendData("send monster data: " + um.id); } } } } }