From: "Enrico Weigelt, metux IT consult" <enrico.weig...@gr13.net>
--- src/net/sf/freecol/common/model/NativeTrade.java | 29 ++++++++++++++++++++++ src/net/sf/freecol/server/ai/NativeAIPlayer.java | 6 ++--- .../freecol/server/control/InGameController.java | 9 +++---- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/net/sf/freecol/common/model/NativeTrade.java b/src/net/sf/freecol/common/model/NativeTrade.java index 28b8e65d0ae..17b356615a5 100644 --- a/src/net/sf/freecol/common/model/NativeTrade.java +++ b/src/net/sf/freecol/common/model/NativeTrade.java @@ -360,6 +360,13 @@ public class NativeTrade extends FreeColGameObject { this.item = nti; } + private static NativeTradeItem findMatchingItem(List<NativeTradeItem> items, NativeTradeItem i) { + for (NativeTradeItem nt : items) + if (nt.getGoods().equals(i.getGoods())) + return nt; + return null; + } + /** * Get the list of items the unit is able to offer the settlement. * @@ -372,6 +379,17 @@ public class NativeTrade extends FreeColGameObject { } /** + * Find a item the unit is able to offer the settlement. + * + * Note: some of these items might be currently invalid. + * + * @return A {@code NativeTradeItem} the unit might sell. + */ + public NativeTradeItem findUnitToSettlement(NativeTradeItem i) { + return findMatchingItem(this.unitToSettlement, i); + } + + /** * Get the list of items the settlement is able to offer the unit. * * Note: some of these items might be currently invalid. @@ -383,6 +401,17 @@ public class NativeTrade extends FreeColGameObject { } /** + * Find an item the settlement is able to offer the unit. + * + * Note: some of these items might be currently invalid. + * + * @return A {@code NativeTradeItem} the unit might buy. + */ + public NativeTradeItem findSettlementToUnit(NativeTradeItem i) { + return findMatchingItem(this.settlementToUnit, i); + } + + /** * Add an item to the unit list of items. * * @param nti The {@code NativeTradeItem} to add. diff --git a/src/net/sf/freecol/server/ai/NativeAIPlayer.java b/src/net/sf/freecol/server/ai/NativeAIPlayer.java index feb3558edcc..87be4e3bac9 100644 --- a/src/net/sf/freecol/server/ai/NativeAIPlayer.java +++ b/src/net/sf/freecol/server/ai/NativeAIPlayer.java @@ -897,7 +897,7 @@ public class NativeAIPlayer extends MissionAIPlayer { } if (anger < 0) return NativeTradeAction.NAK_HOSTILE; updateTrade(nt, anger); - ours = find(nt.getSettlementToUnit(), nt.getItem().goodsMatcher()); + ours = nt.findSettlementToUnit(nt.getItem()); if (ours == null) return NativeTradeAction.NAK_INVALID; if (nt.getItem().priceIsSet() && nt.getItem().getPrice() >= ours.getPrice()) { @@ -932,7 +932,7 @@ public class NativeAIPlayer extends MissionAIPlayer { } if (anger < 0) return NativeTradeAction.NAK_HOSTILE; updateTrade(nt, anger); - ours = find(nt.getUnitToSettlement(), nt.getItem().goodsMatcher()); + ours = nt.findUnitToSettlement(nt.getItem()); if (ours == null) return NativeTradeAction.NAK_INVALID; if (nt.getItem().priceIsSet() && nt.getItem().getPrice() <= ours.getPrice()) { @@ -949,7 +949,7 @@ public class NativeAIPlayer extends MissionAIPlayer { return NativeTradeAction.ACK_SELL_HAGGLE; case GIFT: - ours = find(nt.getUnitToSettlement(), nt.getItem().goodsMatcher()); + ours = nt.findUnitToSettlement(nt.getItem()); if (ours == null) return NativeTradeAction.NAK_INVALID; return (is.canAdd(nt.getItem().getGoods())) ? NativeTradeAction.ACK_GIFT diff --git a/src/net/sf/freecol/server/control/InGameController.java b/src/net/sf/freecol/server/control/InGameController.java index 72a2eed515f..4b1f6cc7a04 100644 --- a/src/net/sf/freecol/server/control/InGameController.java +++ b/src/net/sf/freecol/server/control/InGameController.java @@ -2965,8 +2965,7 @@ public final class InGameController extends Controller { return serverPlayer.clientError("Null purchase: " + nt); } else if (!nt.canBuy()) { return serverPlayer.clientError("Can not buy: " + nt); - } else if (find(nt.getSettlementToUnit(), - item.goodsMatcher()) == null) { + } else if (nt.findSettlementToUnit(item) == null) { return serverPlayer.clientError("Item missing for " + action + ": " + nt); } @@ -2982,8 +2981,7 @@ public final class InGameController extends Controller { return serverPlayer.clientError("Null sale: " + nt); } else if (!nt.canSell()) { return serverPlayer.clientError("Can not sell: " + nt); - } else if (find(nt.getUnitToSettlement(), - item.goodsMatcher()) == null) { + } else if (nt.findUnitToSettlement(item) == null) { return serverPlayer.clientError("Item missing for " + action + ": " + nt); } @@ -2999,8 +2997,7 @@ public final class InGameController extends Controller { return serverPlayer.clientError("Null gift: " + nt); } else if (!nt.canGift()) { return serverPlayer.clientError("Can not gift: " + nt); - } else if (find(nt.getUnitToSettlement(), - item.goodsMatcher()) == null) { + } else if (nt.findUnitToSettlement(item) == null) { return serverPlayer.clientError("Item missing for " + action + ": " + nt); } -- 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