private void checkCastleVicinity(Iterable<Position> triggerPositions, int score) { for (Position p : triggerPositions) { for (Entry<Castle, Position[]> entry : scoreableCastleVicinity.entrySet()) { Position[] vicinity = entry.getValue(); for (int i = 0; i < vicinity.length; i++) { if (vicinity[i].equals(p)) { Castle master = entry.getKey(); Integer currentCastleScore = castleScore.get(master); if (currentCastleScore == null || currentCastleScore < score) { castleScore.put(master, score); // chain reaction, one completed castle triggers another checkCastleVicinity(Arrays.asList(master.getCastleBase()), score); } break; } } } } }