From: "Enrico Weigelt, metux IT consult" <enrico.weig...@gr13.net>
--- .../freecol/client/gui/panel/FindSettlementPanel.java | 2 +- src/net/sf/freecol/common/model/Game.java | 8 ++++++-- src/net/sf/freecol/common/model/Operand.java | 6 +++--- src/net/sf/freecol/common/model/Player.java | 18 ++++++++++-------- src/net/sf/freecol/common/model/Unit.java | 2 +- src/net/sf/freecol/server/ai/EuropeanAIPlayer.java | 2 +- src/net/sf/freecol/server/model/ServerPlayer.java | 6 +++--- test/src/net/sf/freecol/common/model/ColonyTest.java | 2 +- 8 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/net/sf/freecol/client/gui/panel/FindSettlementPanel.java b/src/net/sf/freecol/client/gui/panel/FindSettlementPanel.java index d17db5b1c88..718d7d1baf7 100644 --- a/src/net/sf/freecol/client/gui/panel/FindSettlementPanel.java +++ b/src/net/sf/freecol/client/gui/panel/FindSettlementPanel.java @@ -177,7 +177,7 @@ public final class FindSettlementPanel extends FreeColPanel break; } if (ok) { - for (Settlement s : player.getSettlementList()) { + for (Settlement s : player.getSettlements()) { model.addElement(s); } } diff --git a/src/net/sf/freecol/common/model/Game.java b/src/net/sf/freecol/common/model/Game.java index 4c1c1004beb..c98265b33e8 100644 --- a/src/net/sf/freecol/common/model/Game.java +++ b/src/net/sf/freecol/common/model/Game.java @@ -1070,8 +1070,12 @@ public class Game extends FreeColGameObject { * specified name (the settlement might not be visible to a client). */ public Settlement getSettlementByName(String name) { - return find(flatten(getLivePlayers(), Player::getSettlements), - matchKeyEquals(name, Settlement::getName)); + for (Player p : this.players) + if (p.isLive()) + for (Settlement s : p.getSettlements()) + if (Utils.equals(name, s.getName())) + return s; + return null; } /** diff --git a/src/net/sf/freecol/common/model/Operand.java b/src/net/sf/freecol/common/model/Operand.java index 97f4ee76b21..a91ecd4034f 100644 --- a/src/net/sf/freecol/common/model/Operand.java +++ b/src/net/sf/freecol/common/model/Operand.java @@ -210,7 +210,7 @@ public class Operand extends Scope { c -> ourCount(c.getBuildings())); break; case SETTLEMENTS: - result += ourCount(player.getSettlementList()); + result += ourCount(player.getSettlements()); break; case FOUNDING_FATHERS: result += ourCount(player.getFathers()); @@ -249,11 +249,11 @@ public class Operand extends Scope { return sum(player.getColonies(), c -> ourCount(c.getBuildings())); case SETTLEMENTS: if (methodName == null) { - return ourCount(player.getSettlementList()) + return ourCount(player.getSettlements()) + spec.getInteger(GameOptions.SETTLEMENT_LIMIT_MODIFIER); } final String methodValue = getMethodValue(); - return count(player.getSettlementList(), + return count(player.getSettlements(), s -> String.valueOf(s.invokeMethod(methodName, Boolean.class, Boolean.FALSE)).equals(methodValue)); case FOUNDING_FATHERS: diff --git a/src/net/sf/freecol/common/model/Player.java b/src/net/sf/freecol/common/model/Player.java index 1714d5ec7f7..feeff525076 100644 --- a/src/net/sf/freecol/common/model/Player.java +++ b/src/net/sf/freecol/common/model/Player.java @@ -2253,21 +2253,23 @@ public class Player extends FreeColGameObject implements Nameable { /** * Gets a the settlements this player owns. * - * @return The list of {@code Settlements} this player owns. + * @return The list of {@code Settlement}s this player owns. */ - public List<Settlement> getSettlementList() { + public List<Settlement> getSettlements() { synchronized (this.settlements) { return new ArrayList<>(this.settlements); } } /** - * Get a stream of the settlements this player owns. + * Gets the first settlement this player owns. * - * @return The strean of {@code Settlements} this player owns. + * @return The first {@code Settlement} this player owns. */ - public Stream<Settlement> getSettlements() { - return getSettlementList().stream(); + public Settlement getFirstSettlement() { + synchronized (this.settlements) { + return this.settlements.get(0); + } } /** @@ -2916,7 +2918,7 @@ public class Player extends FreeColGameObject implements Nameable { vismap.setVisible(unit); // All the settlements. - for (Settlement settlement : getSettlementList()) + for (Settlement settlement : getSettlements()) vismap.setVisible(settlement); if (isEuropean()) { @@ -3381,7 +3383,7 @@ public class Player extends FreeColGameObject implements Nameable { * @return True if the player has no settlements (on the map) yet. */ private boolean hasZeroSettlements() { - List<Settlement> settlements = getSettlementList(); + List<Settlement> settlements = getSettlements(); return settlements.isEmpty() || (settlements.size() == 1 && settlements.get(0).getTile().getSettlement() == null); diff --git a/src/net/sf/freecol/common/model/Unit.java b/src/net/sf/freecol/common/model/Unit.java index 5be31dd2bc9..e4e545a8559 100644 --- a/src/net/sf/freecol/common/model/Unit.java +++ b/src/net/sf/freecol/common/model/Unit.java @@ -2648,7 +2648,7 @@ public class Unit extends GoodsLocation final Player owner = getOwner(); Settlement sett = minimize(owner.getSettlements(), settlementStartComparator); - if (sett == null) sett = first(owner.getSettlements()); + if (sett == null) sett = owner.getFirstSettlement(); if (sett != null) return sett; // Owner has no settlements. If it is the REF, start from a diff --git a/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java b/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java index ea707d51be6..61f71351dd8 100644 --- a/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java +++ b/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java @@ -1338,7 +1338,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer { if (!player.canBuildColonies()) return 0; int nColonies = 0, nPorts = 0, nWorkers = 0, nEuropean = 0; - for (Settlement settlement : player.getSettlementList()) { + for (Settlement settlement : player.getSettlements()) { nColonies++; if (settlement.isConnectedPort()) nPorts++; nWorkers += count(settlement.getAllUnitsList(), Unit::isPerson); diff --git a/src/net/sf/freecol/server/model/ServerPlayer.java b/src/net/sf/freecol/server/model/ServerPlayer.java index d904f23ffe2..d1cd92e0666 100644 --- a/src/net/sf/freecol/server/model/ServerPlayer.java +++ b/src/net/sf/freecol/server/model/ServerPlayer.java @@ -645,7 +645,7 @@ public class ServerPlayer extends Player implements ServerModelObject { } // Remove settlements. Update formerly owned tiles. - List<Settlement> settlements = getSettlementList(); + List<Settlement> settlements = getSettlements(); while (!settlements.isEmpty()) { csDisposeSettlement(settlements.remove(0), cs); } @@ -950,7 +950,7 @@ public class ServerPlayer extends Player implements ServerModelObject { } invalidateCanSeeTiles();//+vis(this) if (!reveal) { - for (Settlement s : getSettlementList()) exploreForSettlement(s); + for (Settlement s : getSettlements()) exploreForSettlement(s); for (Unit u : getUnitList()) exploreForUnit(u); } return result; @@ -4360,7 +4360,7 @@ outer: for (Effect effect : effects) { final Game game = getGame(); // Settlements - List<Settlement> settlements = getSettlementList(); + List<Settlement> settlements = getSettlements(); int newSoL = 0, newImmigration = getImmigration(); for (Settlement settlement : settlements) { ((ServerModelObject)settlement).csNewTurn(random, lb, cs); diff --git a/test/src/net/sf/freecol/common/model/ColonyTest.java b/test/src/net/sf/freecol/common/model/ColonyTest.java index 71b1827cb34..fe2c1803eca 100644 --- a/test/src/net/sf/freecol/common/model/ColonyTest.java +++ b/test/src/net/sf/freecol/common/model/ColonyTest.java @@ -494,7 +494,7 @@ public class ColonyTest extends FreeColTestCase { assertEquals(colony.getName(), copied.getName()); // Note: we can not check that player.hasSettlement(copied) is false // because it too will use FCGO.equals(). - for (Settlement s : player.getSettlementList()) { + for (Settlement s : player.getSettlements()) { assertFalse(s == copied); } -- 2.11.0.rc0.7.gbe5a750 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Freecol-developers mailing list Freecol-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freecol-developers