From 656ff2ab83be82ea91392af83ba1be3700fa744a Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Thu, 26 Nov 2015 23:59:46 -0800
Subject: [PATCH] fixing the gold bug

---
 .../com/comandante/creeper/ConfigureNpc.java  |  2 +-
 .../com/comandante/creeper/Items/Loot.java    | 10 +++---
 .../comandante/creeper/Items/LootManager.java |  7 ++--
 .../comandante/creeper/command/Command.java   | 12 +++++++
 .../creeper/command/LootCommand.java          |  2 +-
 .../comandante/creeper/npc/NpcAdapter.java    | 36 +++++++++----------
 .../com/comandante/creeper/player/Player.java |  4 +--
 .../creeper/player/PlayerMetadata.java        |  2 +-
 .../{BlackHole.java => BlackHoleSpell.java}   |  6 ++--
 world/npcs/luchtigen.json                     |  2 +-
 10 files changed, 48 insertions(+), 35 deletions(-)
 rename src/main/java/com/comandante/creeper/spells/{BlackHole.java => BlackHoleSpell.java} (94%)

diff --git a/src/main/java/com/comandante/creeper/ConfigureNpc.java b/src/main/java/com/comandante/creeper/ConfigureNpc.java
index 9e4277fe..85d1f95c 100755
--- a/src/main/java/com/comandante/creeper/ConfigureNpc.java
+++ b/src/main/java/com/comandante/creeper/ConfigureNpc.java
@@ -445,6 +445,6 @@ public class ConfigureNpc {
         SpellRegistry.addSpell(new ClumsinessSpell(gameManager));
         SpellRegistry.addSpell(new RestoreSpell(gameManager));
         SpellRegistry.addSpell(new AidsSpell(gameManager));
-        SpellRegistry.addSpell(new BlackholeSpell(gameManager));
+        SpellRegistry.addSpell(new BlackHoleSpell(gameManager));
     }
 }
diff --git a/src/main/java/com/comandante/creeper/Items/Loot.java b/src/main/java/com/comandante/creeper/Items/Loot.java
index ff21ac25..c45ea8e9 100644
--- a/src/main/java/com/comandante/creeper/Items/Loot.java
+++ b/src/main/java/com/comandante/creeper/Items/Loot.java
@@ -6,10 +6,10 @@ import java.util.Set;
 public class Loot implements Serializable {
 
     private final Set<ItemType> items;
-    private final int lootGoldMax;
-    private final int lootGoldMin;
+    private final long lootGoldMax;
+    private final long lootGoldMin;
 
-    public Loot(int lootGoldMin, int lootGoldMax, Set<ItemType> items) {
+    public Loot(long lootGoldMin, long lootGoldMax, Set<ItemType> items) {
         this.items = items;
         this.lootGoldMax = lootGoldMax;
         this.lootGoldMin = lootGoldMin;
@@ -19,11 +19,11 @@ public class Loot implements Serializable {
         return items;
     }
 
-    public int getLootGoldMax() {
+    public long getLootGoldMax() {
         return lootGoldMax;
     }
 
-    public int getLootGoldMin() {
+    public long getLootGoldMin() {
         return lootGoldMin;
     }
 }
diff --git a/src/main/java/com/comandante/creeper/Items/LootManager.java b/src/main/java/com/comandante/creeper/Items/LootManager.java
index cd7e2f97..88011344 100644
--- a/src/main/java/com/comandante/creeper/Items/LootManager.java
+++ b/src/main/java/com/comandante/creeper/Items/LootManager.java
@@ -2,6 +2,7 @@ package com.comandante.creeper.Items;
 
 import com.comandante.creeper.managers.GameManager;
 import com.google.common.collect.Sets;
+import org.apache.commons.lang.math.JVMRandom;
 
 import java.util.Random;
 import java.util.Set;
@@ -16,8 +17,8 @@ public class LootManager {
 
     private final Random  random = new Random();
 
-    private int randInt(int min, int max) {
-        return random.nextInt((max - min) + 1) + min;
+    private long randInt(long min, long max) {
+        return JVMRandom.nextLong((max - min) + 1) + min;
     }
 
     public boolean lootDropSuccess(double percent) {
@@ -27,7 +28,7 @@ public class LootManager {
         return randomValue <= percent;
     }
 
-    public int lootGoldAmountReturn(Loot loot) {
+    public long lootGoldAmountReturn(Loot loot) {
         return randInt(loot.getLootGoldMin(), loot.getLootGoldMax());
     }
 
diff --git a/src/main/java/com/comandante/creeper/command/Command.java b/src/main/java/com/comandante/creeper/command/Command.java
index 83cbc665..43a19015 100644
--- a/src/main/java/com/comandante/creeper/command/Command.java
+++ b/src/main/java/com/comandante/creeper/command/Command.java
@@ -163,4 +163,16 @@ public abstract class Command extends SimpleChannelUpstreamHandler {
         // assumes the target class has a no-args Constructor
         return clazz.getConstructor(GameManager.class).newInstance(gameManager);
     }
+
+    public static boolean isLong(String s) {
+        try {
+            Long.parseLong(s);
+        } catch(NumberFormatException e) {
+            return false;
+        } catch(NullPointerException e) {
+            return false;
+        }
+        // only got here if we didn't return false
+        return true;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/comandante/creeper/command/LootCommand.java b/src/main/java/com/comandante/creeper/command/LootCommand.java
index 3b1113bf..0099f075 100644
--- a/src/main/java/com/comandante/creeper/command/LootCommand.java
+++ b/src/main/java/com/comandante/creeper/command/LootCommand.java
@@ -32,7 +32,7 @@ public class LootCommand extends Command {
                     if (item.getItemTypeId() == Item.CORPSE_ID_RESERVED) {
                         Loot loot = item.getLoot();
                         if (loot != null) {
-                            int gold = lootManager.lootGoldAmountReturn(loot);
+                            long gold = lootManager.lootGoldAmountReturn(loot);
                             if (gold > 0) {
                                 write("You looted " + NumberFormat.getNumberInstance(Locale.US).format(gold) + Color.YELLOW + " gold" + Color.RESET + " from a " + item.getItemName() + ".\r\n");
                                 player.incrementGold(gold);
diff --git a/src/main/java/com/comandante/creeper/npc/NpcAdapter.java b/src/main/java/com/comandante/creeper/npc/NpcAdapter.java
index a2727f5a..ce58b46d 100644
--- a/src/main/java/com/comandante/creeper/npc/NpcAdapter.java
+++ b/src/main/java/com/comandante/creeper/npc/NpcAdapter.java
@@ -108,9 +108,9 @@ public class NpcAdapter extends TypeAdapter<Npc> {
         jsonReader.nextName();
         jsonReader.beginObject();
         jsonReader.nextName();
-        final int lootGoldMin = jsonReader.nextInt();
+        final long lootGoldMin = jsonReader.nextLong();
         jsonReader.nextName();
-        final int lootGoldMax = jsonReader.nextInt();
+        final long lootGoldMax = jsonReader.nextLong();
         jsonReader.nextName();
         jsonReader.beginArray();
         Set<ItemType> items = Sets.newHashSet();
@@ -135,37 +135,37 @@ public class NpcAdapter extends TypeAdapter<Npc> {
         while (jsonReader.hasNext()) {
             String nextName = jsonReader.nextName();
             if (nextName.equals("agile")) {
-                statsBuilder.setAgile(jsonReader.nextInt());
+                statsBuilder.setAgile(jsonReader.nextLong());
             } else if (nextName.equals("aim")) {
-                statsBuilder.setAim(jsonReader.nextInt());
+                statsBuilder.setAim(jsonReader.nextLong());
             } else if (nextName.equals("armorRating")) {
-                statsBuilder.setArmorRating(jsonReader.nextInt());
+                statsBuilder.setArmorRating(jsonReader.nextLong());
             } else if (nextName.equals("currentHealth")) {
-                statsBuilder.setCurrentHealth(jsonReader.nextInt());
+                statsBuilder.setCurrentHealth(jsonReader.nextLong());
             } else if (nextName.equals("currentMana")) {
-                statsBuilder.setCurrentMana(jsonReader.nextInt());
+                statsBuilder.setCurrentMana(jsonReader.nextLong());
             } else if (nextName.equals("experience")) {
-                statsBuilder.setExperience(jsonReader.nextInt());
+                statsBuilder.setExperience(jsonReader.nextLong());
             } else if (nextName.equals("maxHealth")) {
-                statsBuilder.setMaxHealth(jsonReader.nextInt());
+                statsBuilder.setMaxHealth(jsonReader.nextLong());
             } else if (nextName.equals("maxMana")) {
-                statsBuilder.setMaxMana(jsonReader.nextInt());
+                statsBuilder.setMaxMana(jsonReader.nextLong());
             } else if (nextName.equals("meleSkill")) {
-                statsBuilder.setMeleSkill(jsonReader.nextInt());
+                statsBuilder.setMeleSkill(jsonReader.nextLong());
             } else if (nextName.equals("numberOfWeaponRolls")) {
-                statsBuilder.setNumberOfWeaponRolls(jsonReader.nextInt());
+                statsBuilder.setNumberOfWeaponRolls(jsonReader.nextLong());
             } else if (nextName.equals("strength")) {
-                statsBuilder.setStrength(jsonReader.nextInt());
+                statsBuilder.setStrength(jsonReader.nextLong());
             } else if (nextName.equals("weaponRatingMax")) {
-                statsBuilder.setWeaponRatingMax(jsonReader.nextInt());
+                statsBuilder.setWeaponRatingMax(jsonReader.nextLong());
             }else if (nextName.equals("weaponRatingMin")) {
-                statsBuilder.setWeaponRatingMin(jsonReader.nextInt());
+                statsBuilder.setWeaponRatingMin(jsonReader.nextLong());
             }else if (nextName.equals("willPower")) {
-                statsBuilder.setWillpower(jsonReader.nextInt());
+                statsBuilder.setWillpower(jsonReader.nextLong());
             }else if (nextName.equals("foraging")) {
-                statsBuilder.setForaging(jsonReader.nextInt());
+                statsBuilder.setForaging(jsonReader.nextLong());
             }else if (nextName.equals("inventorySize")) {
-                statsBuilder.setInventorySize(jsonReader.nextInt());
+                statsBuilder.setInventorySize(jsonReader.nextLong());
             }
         }
         jsonReader.endObject();
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index d741a795..74e2c180 100755
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -251,7 +251,7 @@ public class Player extends CreeperEntity {
         }
     }
 
-    public void transferGoldToBank(int amt) {
+    public void transferGoldToBank(long amt) {
         synchronized (interner.intern(playerId)) {
             PlayerMetadata playerMetadata = getPlayerMetadata();
             playerMetadata.transferGoldToBank(amt);
@@ -267,7 +267,7 @@ public class Player extends CreeperEntity {
         }
     }
 
-    public void incrementGold(int amt) {
+    public void incrementGold(long amt) {
         synchronized (interner.intern(playerId)) {
             PlayerMetadata playerMetadata = getPlayerMetadata();
             playerMetadata.incrementGold(amt);
diff --git a/src/main/java/com/comandante/creeper/player/PlayerMetadata.java b/src/main/java/com/comandante/creeper/player/PlayerMetadata.java
index 38b092d1..44004e8a 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerMetadata.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerMetadata.java
@@ -169,7 +169,7 @@ public class PlayerMetadata implements Serializable {
         this.goldInBank = amt;
     }
 
-    protected void incrementGold(int amt) {
+    protected void incrementGold(long amt) {
         this.gold = gold + amt;
     }
 
diff --git a/src/main/java/com/comandante/creeper/spells/BlackHole.java b/src/main/java/com/comandante/creeper/spells/BlackHoleSpell.java
similarity index 94%
rename from src/main/java/com/comandante/creeper/spells/BlackHole.java
rename to src/main/java/com/comandante/creeper/spells/BlackHoleSpell.java
index bab4595b..800eafc1 100644
--- a/src/main/java/com/comandante/creeper/spells/BlackHole.java
+++ b/src/main/java/com/comandante/creeper/spells/BlackHoleSpell.java
@@ -16,7 +16,7 @@ import java.util.Set;
 
 import static com.comandante.creeper.server.Color.BOLD_ON;
 
-public class BlackholeSpell extends Spell {
+public class BlackHoleSpell extends Spell {
 
     private final static String NAME = BOLD_ON + Color.BLACK + "black" + Color.RESET + " hole";
     private final static String DESCRIPTION = "A black hole.";
@@ -44,7 +44,7 @@ public class BlackholeSpell extends Spell {
             .setFrozenMovement(false)
             .setLifeSpanTicks(2);
 
-    public BlackholeSpell(GameManager gameManager) {
+    public BlackHoleSpell(GameManager gameManager) {
         super(gameManager, validTriggers, manaCost, attackStats, attackMessages, DESCRIPTION, NAME, Sets.newHashSet(holeEffect.createEffect()), isAreaSpell, null, coolDownTicks);
     }
 
@@ -52,7 +52,7 @@ public class BlackholeSpell extends Spell {
     public void attackSpell(Set<String> npcIds, Player player) {
         Stats playerStats = player.getPlayerStatsWithEquipmentAndLevel();
         long willpower = playerStats.getWillpower();
-        long i = 66666666666 + (willpower * 3);
+        long i = 66666666666L + (willpower * 3);
         this.setEffects(Sets.newHashSet(holeEffect.setApplyStatsOnTick(new StatsBuilder().setCurrentHealth(-i).createStats()).createEffect()));
         super.attackSpell(npcIds, player);
     }
diff --git a/world/npcs/luchtigen.json b/world/npcs/luchtigen.json
index 37bb48af..f5c41326 100644
--- a/world/npcs/luchtigen.json
+++ b/world/npcs/luchtigen.json
@@ -32,7 +32,7 @@
       "maxPerRoom": 1,
       "spawnIntervalTicks": 600,
       "maxInstances": 3
-    }, 
+    }
   },
   "validTriggers": [
     "luchtigen",
-- 
GitLab