From: "Enrico Weigelt, metux IT consult" <[email protected]>
---
.../client/gui/dialog/EditSettlementDialog.java | 2 +-
.../client/gui/panel/report/ReportIndianPanel.java | 2 +-
src/net/sf/freecol/common/model/Player.java | 74 ++++++++++++++--------
.../sf/freecol/common/model/SimpleCombatModel.java | 4 +-
src/net/sf/freecol/server/FreeColServer.java | 4 +-
src/net/sf/freecol/server/ai/NativeAIPlayer.java | 8 +--
src/net/sf/freecol/server/model/ServerGame.java | 9 +--
src/net/sf/freecol/server/model/ServerPlayer.java | 18 +++---
.../freecol/server/generator/MapGeneratorTest.java | 2 +-
9 files changed, 71 insertions(+), 52 deletions(-)
diff --git a/src/net/sf/freecol/client/gui/dialog/EditSettlementDialog.java
b/src/net/sf/freecol/client/gui/dialog/EditSettlementDialog.java
index 8cde7a524bb..9ac37076c90 100644
--- a/src/net/sf/freecol/client/gui/dialog/EditSettlementDialog.java
+++ b/src/net/sf/freecol/client/gui/dialog/EditSettlementDialog.java
@@ -228,7 +228,7 @@ public final class EditSettlementDialog extends
FreeColDialog<IndianSettlement>
if (this.capital.isSelected() && !is.isCapital()) {
// make sure we downgrade the old capital
for (IndianSettlement indianSettlement
- : is.getOwner().getIndianSettlementList()) {
+ : is.getOwner().getIndianSettlements()) {
indianSettlement.setCapital(false);
}
is.setCapital(true);
diff --git a/src/net/sf/freecol/client/gui/panel/report/ReportIndianPanel.java
b/src/net/sf/freecol/client/gui/panel/report/ReportIndianPanel.java
index b01ab6ee434..a531adaa804 100644
--- a/src/net/sf/freecol/client/gui/panel/report/ReportIndianPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/report/ReportIndianPanel.java
@@ -94,7 +94,7 @@ public final class ReportIndianPanel extends ReportPanel {
private void buildIndianAdvisorPanel(Player player, Player opponent) {
final NationSummary ns = igc().getNationSummary(opponent);
List<IndianSettlement> nativeSettlements
- = opponent.getIndianSettlementList();
+ = opponent.getIndianSettlements();
String numSettlements = String.valueOf(nativeSettlements.size())
+ " / " + ((ns == null) ? "?"
: String.valueOf(ns.getNumberOfSettlements()));
diff --git a/src/net/sf/freecol/common/model/Player.java
b/src/net/sf/freecol/common/model/Player.java
index f0354687958..1714d5ec7f7 100644
--- a/src/net/sf/freecol/common/model/Player.java
+++ b/src/net/sf/freecol/common/model/Player.java
@@ -2426,8 +2426,12 @@ public class Player extends FreeColGameObject implements
Nameable {
* or null if not found.
*/
public IndianSettlement getIndianSettlementByName(String name) {
- return find(getIndianSettlements(),
- matchKeyEquals(name, IndianSettlement::getName));
+ synchronized (this.settlements) {
+ for (Settlement s : this.settlements)
+ if (s instanceof IndianSettlement && Utils.equals(name,
((IndianSettlement)s).getName()))
+ return (IndianSettlement)s;
+ }
+ return null;
}
/**
@@ -2488,25 +2492,35 @@ public class Player extends FreeColGameObject
implements Nameable {
}
/**
- * Get a stream of all the indian settlements this player owns.
+ * Get a list of all the IndianSettlements this player owns.
*
- * @return A stream of the {@code IndianSettlement}s this player owns.
+ * @return A list of the {@code IndianSettlement}s this player owns.
*/
- public Stream<IndianSettlement> getIndianSettlements() {
- return getIndianSettlementList().stream();
+ public List<IndianSettlement> getIndianSettlements() {
+ synchronized (this.settlements) {
+ List<IndianSettlement> result = new ArrayList<>();
+ for (Settlement s : this.settlements)
+ if (s instanceof IndianSettlement)
+ result.add((IndianSettlement)s);
+ return result;
+ }
}
/**
- * Get a list of all the IndianSettlements this player owns.
+ * Get a list of all the IndianSettlements this player owns, that have
+ * been contacted by given player.
*
- * @return A list of the {@code IndianSettlement}s this player owns.
+ * @return A list of this player's {@code IndianSettlement}s, that have
+ * been contacted by given player.
*/
- public List<IndianSettlement> getIndianSettlementList() {
- List<IndianSettlement> result = new ArrayList<>();
- for (Settlement s : this.settlements)
- if (s instanceof IndianSettlement)
- result.add((IndianSettlement)s);
- return result;
+ public List<IndianSettlement> getIndianSettlementsContacted(Player player)
{
+ synchronized (this.settlements) {
+ List<IndianSettlement> result = new ArrayList<>();
+ for (Settlement s : this.settlements)
+ if (s instanceof IndianSettlement && s.hasContacted(player))
+ result.add((IndianSettlement)s);
+ return result;
+ }
}
/**
@@ -2517,24 +2531,32 @@ public class Player extends FreeColGameObject
implements Nameable {
* @return A list of the {@code IndianSettlement}s with a matching
* missionary.
*/
- public List<IndianSettlement>
getIndianSettlementsWithMissionaryList(Player p) {
- List<IndianSettlement> result = new ArrayList<>();
- for (Settlement s : this.settlements)
- if ((s instanceof IndianSettlement) &&
((IndianSettlement)s).hasMissionary(p))
- result.add((IndianSettlement)s);
- return result;
+ public List<IndianSettlement> getIndianSettlementsWithMissionary(Player p)
{
+ synchronized (this.settlements) {
+ List<IndianSettlement> result = new ArrayList<>();
+ for (Settlement s : this.settlements)
+ if ((s instanceof IndianSettlement) &&
((IndianSettlement)s).hasMissionary(p))
+ result.add((IndianSettlement)s);
+ return result;
+ }
}
/**
- * Get a stream of all indian settlements owned by this player with
+ * Check whether player has an indian settlements owned by this player with
* a missionary from a given player.
*
* @param p The {@code Player}.
- * @return A stream of the {@code IndianSettlement}s with a matching
- * missionary.
+ * @return A True if there player has an indian settlement with missionary
+ * from given player.
*/
- public Stream<IndianSettlement> getIndianSettlementsWithMissionary(Player
p) {
- return getIndianSettlementsWithMissionaryList(p).stream();
+ public final boolean hasIndianSettlementsWithMissionary(Player p) {
+ synchronized (this.settlements) {
+ List<IndianSettlement> result = new ArrayList<>();
+ for (Settlement s : this.settlements)
+ if ((s instanceof IndianSettlement) &&
((IndianSettlement)s).hasMissionary(p))
+ return true;
+ return false;
+ }
}
/**
@@ -2902,7 +2924,7 @@ public class Player extends FreeColGameObject implements
Nameable {
// All missions if using enhanced missionaries.
if (spec.getBoolean(GameOptions.ENHANCED_MISSIONARIES))
for (Player other : getGame().getLiveNativePlayers(this))
- for (IndianSettlement is :
getIndianSettlementsWithMissionaryList(this))
+ for (IndianSettlement is :
getIndianSettlementsWithMissionary(this))
vismap.setVisible(is);
// All other European settlements if can see all colonies.
diff --git a/src/net/sf/freecol/common/model/SimpleCombatModel.java
b/src/net/sf/freecol/common/model/SimpleCombatModel.java
index 64fc90d4cb1..a536559adcb 100644
--- a/src/net/sf/freecol/common/model/SimpleCombatModel.java
+++ b/src/net/sf/freecol/common/model/SimpleCombatModel.java
@@ -794,10 +794,8 @@ public class SimpleCombatModel extends CombatModel {
lose++;
}
} else if (r >= 1.0 - winner.getBurnProbability()) {
- if (any(transform(loserPlayer.getIndianSettlements(),
- s -> s.hasMissionary(winnerPlayer)))) {
+ if
(loserPlayer.hasIndianSettlementsWithMissionary(winnerPlayer))
crs.add(CombatResult.BURN_MISSIONS);
- }
}
}
if (settlement.getUnitCount() + tile.getUnitCount() <= lose) {
diff --git a/src/net/sf/freecol/server/FreeColServer.java
b/src/net/sf/freecol/server/FreeColServer.java
index 2ded50a8033..c056fed241a 100644
--- a/src/net/sf/freecol/server/FreeColServer.java
+++ b/src/net/sf/freecol/server/FreeColServer.java
@@ -1155,7 +1155,7 @@ public final class FreeColServer {
p.setReady(true); // Players in running game must be ready
// @compat 0.10.5
if (p.isIndian()) {
- for (IndianSettlement is : p.getIndianSettlementList()) {
+ for (IndianSettlement is : p.getIndianSettlements()) {
((ServerIndianSettlement)is).updateMostHated();
}
}
@@ -1317,7 +1317,7 @@ public final class FreeColServer {
+ Tension.Level.CONTENT.getLimit()) / 2;
for (Player other :
serverGame.getLiveNativePlayers(player)) {
player.setStance(other, Stance.PEACE);
- for (IndianSettlement is :
player.getIndianSettlementList()) {
+ for (IndianSettlement is :
player.getIndianSettlements()) {
is.setAlarm(other, new Tension(alarm));
}
}
diff --git a/src/net/sf/freecol/server/ai/NativeAIPlayer.java
b/src/net/sf/freecol/server/ai/NativeAIPlayer.java
index 4121139630e..237002960c0 100644
--- a/src/net/sf/freecol/server/ai/NativeAIPlayer.java
+++ b/src/net/sf/freecol/server/ai/NativeAIPlayer.java
@@ -140,7 +140,7 @@ public class NativeAIPlayer extends MissionAIPlayer {
// Give defensive missions up to the minimum expected defence,
// leave the rest with the default wander-hostile mission.
- for (IndianSettlement is : player.getIndianSettlementList()) {
+ for (IndianSettlement is : player.getIndianSettlements()) {
List<Unit> units = is.getAllUnitsList();
while (units.size() > is.getRequiredDefenders()) {
Unit u = units.remove(0);
@@ -189,7 +189,7 @@ public class NativeAIPlayer extends MissionAIPlayer {
private void secureSettlements(int[] randoms, LogBuilder lb) {
int randomIdx = 0;
List<IndianSettlement> settlements
- = getPlayer().getIndianSettlementList();
+ = getPlayer().getIndianSettlements();
for (IndianSettlement is : settlements) {
// Spread arms and horses between camps
// FIXME: maybe make this dependent on difficulty level?
@@ -467,7 +467,7 @@ public class NativeAIPlayer extends MissionAIPlayer {
int randomIdx = 0;
lb.mark();
- for (IndianSettlement is : player.getIndianSettlementList()) {
+ for (IndianSettlement is : player.getIndianSettlements()) {
// Do not bring gifts all the time.
if (randoms[randomIdx++] >= giftProbability) continue;
@@ -567,7 +567,7 @@ public class NativeAIPlayer extends MissionAIPlayer {
int randomIdx = 0;
lb.mark();
- for (IndianSettlement is : player.getIndianSettlementList()) {
+ for (IndianSettlement is : player.getIndianSettlements()) {
// Do not demand tribute all of the time.
if (randoms[randomIdx++] >= demandProbability) continue;
diff --git a/src/net/sf/freecol/server/model/ServerGame.java
b/src/net/sf/freecol/server/model/ServerGame.java
index 815f7660010..a9899897bf5 100644
--- a/src/net/sf/freecol/server/model/ServerGame.java
+++ b/src/net/sf/freecol/server/model/ServerGame.java
@@ -50,6 +50,7 @@ import net.sf.freecol.common.model.Goods;
import net.sf.freecol.common.model.GoodsLocation;
import net.sf.freecol.common.model.HighSeas;
import net.sf.freecol.common.model.HistoryEvent;
+import net.sf.freecol.common.model.IndianSettlement;
import net.sf.freecol.common.model.Limit;
import net.sf.freecol.common.model.Location;
import net.sf.freecol.common.model.ModelMessage;
@@ -367,9 +368,8 @@ public class ServerGame extends Game implements
ServerModelObject {
Set<Tile> updated = new HashSet<>();
ServerPlayer strongest = (ServerPlayer)strongAI;
ServerPlayer weakest = (ServerPlayer)weakAI;
- forEach(flatten(getLiveNativePlayers(),
- p -> p.getIndianSettlementsWithMissionary(weakest)),
- is -> {
+ for (Player p : getLiveNativePlayers()) {
+ for (IndianSettlement is :
p.getIndianSettlementsWithMissionary(weakest)) {
lb.add(" ", is.getName(), "(mission)");
is.getTile().cacheUnseen(strongest);//+til
tiles.add(is.getTile());
@@ -380,7 +380,8 @@ public class ServerGame extends Game implements
ServerModelObject {
is.getTile().updateIndianSettlement(strongest);
cs.add(See.perhaps().always(strongest), is);
}
- });
+ }
+ }
for (Colony c : weakest.getColonies()) {
updated.addAll(c.getOwnedTiles());
((ServerColony)c).csChangeOwner(strongest, false,
cs);//-vis(both),-til
diff --git a/src/net/sf/freecol/server/model/ServerPlayer.java
b/src/net/sf/freecol/server/model/ServerPlayer.java
index 745401de83a..d904f23ffe2 100644
--- a/src/net/sf/freecol/server/model/ServerPlayer.java
+++ b/src/net/sf/freecol/server/model/ServerPlayer.java
@@ -633,7 +633,7 @@ public class ServerPlayer extends Player implements
ServerModelObject {
// Clean up missions and remove tension/alarm/stance.
for (Player other : getGame().getLivePlayers(this)) {
if (isEuropean() && other.isIndian()) {
- for (IndianSettlement is : other.getIndianSettlementList()) {
+ for (IndianSettlement is : other.getIndianSettlements()) {
ServerIndianSettlement sis = (ServerIndianSettlement)is;
if (is.hasMissionary(this)) sis.csKillMissionary(null, cs);
is.getTile().cacheUnseen();//+til
@@ -1384,9 +1384,9 @@ public class ServerPlayer extends Player implements
ServerModelObject {
// Propagate tension change as settlement alarm to all
// settlements except the one that originated it (if any).
if (isIndian()) {
- for (IndianSettlement is : transform(getIndianSettlements(),
- i -> i != origin && i.hasContacted(player))) {
- ((ServerIndianSettlement)is).csModifyAlarm(player, add,
+ for (IndianSettlement is : getIndianSettlementsContacted(player)) {
+ if (is != origin)
+ ((ServerIndianSettlement)is).csModifyAlarm(player, add,
false, cs);//+til
}
}
@@ -1758,7 +1758,7 @@ outer: for (Effect effect : effects) {
// The simple way to do it is just to save all old tension
// levels and check if they have changed after applying
// all the changes.
- List<IndianSettlement> allSettlements = getIndianSettlementList();
+ List<IndianSettlement> allSettlements = getIndianSettlements();
java.util.Map<IndianSettlement,
java.util.Map<Player, Tension.Level>> oldLevels = new
HashMap<>();
for (IndianSettlement is : allSettlements) {
@@ -1970,8 +1970,7 @@ outer: for (Effect effect : effects) {
for (Player p : transform(game.getLiveNativePlayers(),
p -> p.hasContacted(this))) {
p.setTension(this, new Tension(Tension.TENSION_MIN));
- for (IndianSettlement is :
transform(p.getIndianSettlements(),
- is ->
is.hasContacted(this))) {
+ for (IndianSettlement is :
p.getIndianSettlementsContacted(this)) {
is.getTile().cacheUnseen();//+til
is.setAlarm(this, new
Tension(Tension.TENSION_MIN));//-til
cs.add(See.only(this), is);
@@ -2557,8 +2556,7 @@ outer: for (Effect effect : effects) {
// FIXME: just the tension
cs.add(See.perhaps().always(this), defenderPlayer);
csChangeStance(Stance.PEACE, defenderPlayer, true, cs);
- for (IndianSettlement is :
transform(defenderPlayer.getIndianSettlements(),
- is -> is.hasContacted(this)))
{
+ for (IndianSettlement is : defenderPlayer.getIndianSettlements()) {
is.getAlarm(this).setValue(Tension.SURRENDERED);
// Only update attacker with settlements that have
// been seen, as contact can occur with its members.
@@ -2704,7 +2702,7 @@ outer: for (Effect effect : effects) {
// Burn down the missions
boolean here = is.hasMissionary(attackerPlayer);
- for (IndianSettlement s :
nativePlayer.getIndianSettlementsWithMissionaryList(attackerPlayer)) {
+ for (IndianSettlement s :
nativePlayer.getIndianSettlementsWithMissionary(attackerPlayer)) {
((ServerIndianSettlement)s).csKillMissionary(null, cs);
}
// Backtrack on updating this tile, avoiding duplication in csCombat
diff --git a/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
b/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
index aea6944b7c8..2960c83a78f 100644
--- a/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
+++ b/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
@@ -178,7 +178,7 @@ public class MapGeneratorTest extends FreeColTestCase {
// has at least one settlement.
int settlements = 0;
int capitals = 0;
- for (IndianSettlement s : p.getIndianSettlementList()) {
+ for (IndianSettlement s : p.getIndianSettlements()) {
settlements++;
if (s.isCapital()) capitals++;
}
--
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/freecol-developers