From ee86b68092d8c94b911f7e45e52cf3f536893890 Mon Sep 17 00:00:00 2001
From: Petr Fiser <priestcz@gmail.com>
Date: Sun, 13 Apr 2014 19:17:03 +0200
Subject: [PATCH] fixed gaining horses by natives. ref #2684

---
 .../freecol/server/control/InGameController.java   |  4 +++
 .../server/model/ServerIndianSettlement.java       |  8 +++++-
 src/net/sf/freecol/server/model/ServerPlayer.java  | 31 ++++++++++++++++++++++
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/src/net/sf/freecol/server/control/InGameController.java b/src/net/sf/freecol/server/control/InGameController.java
index 9844b69..1ed699e 100644
--- a/src/net/sf/freecol/server/control/InGameController.java
+++ b/src/net/sf/freecol/server/control/InGameController.java
@@ -3143,6 +3143,10 @@ public final class InGameController extends Controller {
                 Tension.TENSION_ADD_MAJOR, cs);//+til
         }
 
+        //europeans met natives, they give them horses
+        logger.finest("first contact of " + serverPlayer.getName() + " with " + other.getName() + ".");
+        other.acquireHorsesFromEuropeans();
+        
         sendToOthers(serverPlayer, cs);
         return cs.build(serverPlayer);
     }
diff --git a/src/net/sf/freecol/server/model/ServerIndianSettlement.java b/src/net/sf/freecol/server/model/ServerIndianSettlement.java
index 8b7f9e6..89d3d59 100644
--- a/src/net/sf/freecol/server/model/ServerIndianSettlement.java
+++ b/src/net/sf/freecol/server/model/ServerIndianSettlement.java
@@ -63,7 +63,9 @@ public class ServerIndianSettlement extends IndianSettlement
 
     public static final int MAX_HORSES_PER_TURN = 2;
 
-
+    /** How many horses indians acquire during first contact with europeans. */
+    public static final int FIRST_CONTACT_ACQ_HORSES_COUNT = 2;
+    
     /**
      * Trivial constructor for all ServerModelObjects.
      */
@@ -240,6 +242,10 @@ public class ServerIndianSettlement extends IndianSettlement
         // Produce goods.
         List<GoodsType> goodsList = spec.getGoodsTypeList();
         for (GoodsType g : goodsList) {
+            //horses are goods but are bred, not grown. skip them
+            if(g.toString().equals("model.goods.horses")){
+                continue;
+            }
             addGoods(g.getStoredAs(), getTotalProductionOf(g));
         }
 
diff --git a/src/net/sf/freecol/server/model/ServerPlayer.java b/src/net/sf/freecol/server/model/ServerPlayer.java
index f56bfe3..905af9b 100644
--- a/src/net/sf/freecol/server/model/ServerPlayer.java
+++ b/src/net/sf/freecol/server/model/ServerPlayer.java
@@ -352,6 +352,37 @@ public class ServerPlayer extends Player implements ServerModelObject {
                 + sb.toString().substring(2));
         }
     }
+    
+    /**
+     * Used in first contact between european and indian nation.
+     * The indians acquire possibility to breed horses by getting 2 horses into
+     * their capital (or first suitable settlement if the capital is not available).
+     * Is called only on native player and only through 
+     * <code>InGameController.nativeFirstContact</code>.
+     * 
+     */
+    public void acquireHorsesFromEuropeans() {
+        if (!isIndian()){
+            logger.finest("acquireHorsesFromEuropeans() failed for " + getName() + " reason: not indian");
+            return;
+        }
+
+        //get name of indian player capital
+        IndianSettlement target = getIndianSettlementByName(capitalName);
+        //capital is null, therefore choose first suitable settlement
+        if (target == null && getIndianSettlements().size() > 0) {
+            logger.finest("acquireHorsesFromEuropeans() capital is null, using other settlement");
+            target = getIndianSettlements().get(0);
+        }
+        // player has no settlements so we will not waste horses
+        if (target == null) {
+            logger.finest("acquireHorsesFromEuropeans() target is null, exiting routine");
+            return;
+        }
+        //add two horses
+        GoodsType horsesType = getSpecification().getGoodsType("model.goods.horses");
+        target.addGoods(horsesType, ServerIndianSettlement.FIRST_CONTACT_ACQ_HORSES_COUNT);
+    }
 
     /**
      * Checks if this player has died.
-- 
1.7.11.msysgit.0

