From ca56597bc1a348ba33a794a3c116e2b07d221044 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Wed, 1 Jul 2015 00:40:11 -0700
Subject: [PATCH] number formatting and xp command output formatting

---
 .../comandante/creeper/command/GoldCommand.java   |  4 +++-
 .../comandante/creeper/command/LootCommand.java   |  4 +++-
 .../com/comandante/creeper/command/XpCommand.java | 15 +++++++++------
 .../bank/commands/AccountQueryCommand.java        |  6 ++++--
 .../merchant/bank/commands/DepositCommand.java    |  4 +++-
 .../merchant/bank/commands/WithdrawalCommand.java |  4 +++-
 .../com/comandante/creeper/player/Player.java     | 10 +++++++---
 .../comandante/creeper/player/PlayerMetadata.java |  4 ----
 8 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/command/GoldCommand.java b/src/main/java/com/comandante/creeper/command/GoldCommand.java
index 0fbcfeb5..605b0c15 100644
--- a/src/main/java/com/comandante/creeper/command/GoldCommand.java
+++ b/src/main/java/com/comandante/creeper/command/GoldCommand.java
@@ -6,8 +6,10 @@ import com.comandante.creeper.server.Color;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
+import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 public class GoldCommand extends Command {
 
@@ -23,7 +25,7 @@ public class GoldCommand extends Command {
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
         configure(e);
         try {
-          write("You have " + playerManager.getPlayerMetadata(playerId).getGold() + Color.YELLOW + " gold." + Color.RESET);
+          write("You have " + NumberFormat.getNumberInstance(Locale.US).format(playerManager.getPlayerMetadata(playerId).getGold()) + Color.YELLOW + " gold." + Color.RESET);
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/command/LootCommand.java b/src/main/java/com/comandante/creeper/command/LootCommand.java
index 957c4483..3b1113bf 100644
--- a/src/main/java/com/comandante/creeper/command/LootCommand.java
+++ b/src/main/java/com/comandante/creeper/command/LootCommand.java
@@ -7,8 +7,10 @@ import com.comandante.creeper.server.Color;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
+import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 public class LootCommand extends Command {
@@ -32,7 +34,7 @@ public class LootCommand extends Command {
                         if (loot != null) {
                             int gold = lootManager.lootGoldAmountReturn(loot);
                             if (gold > 0) {
-                                write("You looted " + gold + Color.YELLOW + " gold" + Color.RESET + " from a " + item.getItemName() + ".\r\n");
+                                write("You looted " + NumberFormat.getNumberInstance(Locale.US).format(gold) + Color.YELLOW + " gold" + Color.RESET + " from a " + item.getItemName() + ".\r\n");
                                 player.incrementGold(gold);
                             }
                             Set<Item> items = lootManager.lootItemsReturn(loot);
diff --git a/src/main/java/com/comandante/creeper/command/XpCommand.java b/src/main/java/com/comandante/creeper/command/XpCommand.java
index 5d98bfe1..9715f59b 100644
--- a/src/main/java/com/comandante/creeper/command/XpCommand.java
+++ b/src/main/java/com/comandante/creeper/command/XpCommand.java
@@ -4,7 +4,6 @@ import com.codahale.metrics.Meter;
 import com.comandante.creeper.Main;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.player.Levels;
-import com.comandante.creeper.player.Player;
 import com.comandante.creeper.player.PlayerMetadata;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
@@ -18,7 +17,6 @@ import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
-import java.util.Set;
 
 
 public class XpCommand extends Command {
@@ -40,12 +38,17 @@ public class XpCommand extends Command {
             int expToNextLevel = Levels.getXp(nextLevel) - playerMetadata.getStats().getExperience();
             Meter meter = Main.metrics.meter("experience-" + player.getPlayerName());
             StringBuilder sb = new StringBuilder();
-            sb.append(expToNextLevel).append(" experience to level ").append(nextLevel).append(".\r\n");
+            sb.append(NumberFormat.getNumberInstance(Locale.US).format(expToNextLevel)).append(" experience to level ").append(nextLevel).append(".\r\n");
 
             Table t = new Table(2, BorderStyle.CLASSIC_COMPATIBLE,
-                    ShownBorders.HEADER_AND_COLUMNS);
-            t.addCell("time window");
-            t.addCell("rate");
+                    ShownBorders.NONE);
+
+            t.setColumnWidth(0, 8, 20);
+            t.setColumnWidth(1, 10, 13);
+
+
+            t.addCell("Window");
+            t.addCell("Rate");
             t.addCell(" 1 min");
             t.addCell(String.valueOf(round(meter.getOneMinuteRate())) + " xp/sec");
             t.addCell(" 5 min");
diff --git a/src/main/java/com/comandante/creeper/merchant/bank/commands/AccountQueryCommand.java b/src/main/java/com/comandante/creeper/merchant/bank/commands/AccountQueryCommand.java
index 2b2c7f31..be872078 100644
--- a/src/main/java/com/comandante/creeper/merchant/bank/commands/AccountQueryCommand.java
+++ b/src/main/java/com/comandante/creeper/merchant/bank/commands/AccountQueryCommand.java
@@ -6,8 +6,10 @@ import com.comandante.creeper.server.Color;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
+import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 public class AccountQueryCommand extends BankCommand {
 
@@ -24,8 +26,8 @@ public class AccountQueryCommand extends BankCommand {
         try {
             int goldInBank = playerManager.getPlayerMetadata(playerId).getGoldInBank();
             int gold = playerManager.getPlayerMetadata(playerId).getGold();
-            write("You have " + goldInBank + Color.YELLOW + " gold" + Color.RESET + " in your bank account."+ "\r\n");
-            write("You have " + gold + Color.YELLOW + " gold" + Color.RESET + " in your inventory."+ "\r\n");
+            write("You have " + NumberFormat.getNumberInstance(Locale.US).format(goldInBank) + Color.YELLOW + " gold" + Color.RESET + " in your bank account."+ "\r\n");
+            write("You have " + NumberFormat.getNumberInstance(Locale.US).format(gold) + Color.YELLOW + " gold" + Color.RESET + " in your inventory."+ "\r\n");
         } finally {
             super.messageReceived(ctx, e);
         }
diff --git a/src/main/java/com/comandante/creeper/merchant/bank/commands/DepositCommand.java b/src/main/java/com/comandante/creeper/merchant/bank/commands/DepositCommand.java
index 314dfe9d..f1330abf 100644
--- a/src/main/java/com/comandante/creeper/merchant/bank/commands/DepositCommand.java
+++ b/src/main/java/com/comandante/creeper/merchant/bank/commands/DepositCommand.java
@@ -7,8 +7,10 @@ import com.comandante.creeper.server.Color;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
+import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 public class DepositCommand extends BankCommand {
 
@@ -27,7 +29,7 @@ public class DepositCommand extends BankCommand {
                 int depositAmt = Integer.parseInt(originalMessageParts.get(1));
                 if (areFundsAvailable(depositAmt)) {
                     player.transferGoldToBank(depositAmt);
-                    write("Your funds of " + depositAmt + Color.YELLOW + " gold " + Color.RESET + "have been transferred to your bank account."+ "\r\n");
+                    write("Your funds of " + NumberFormat.getNumberInstance(Locale.US).format(depositAmt) + Color.YELLOW + " gold " + Color.RESET + "have been transferred to your bank account."+ "\r\n");
                 } else {
                     write("You don't have enough" + Color.YELLOW + " gold "+ Color.RESET + "to cover the deposit amount."+ "\r\n");
                 }
diff --git a/src/main/java/com/comandante/creeper/merchant/bank/commands/WithdrawalCommand.java b/src/main/java/com/comandante/creeper/merchant/bank/commands/WithdrawalCommand.java
index a1f1f5b7..23946a7d 100644
--- a/src/main/java/com/comandante/creeper/merchant/bank/commands/WithdrawalCommand.java
+++ b/src/main/java/com/comandante/creeper/merchant/bank/commands/WithdrawalCommand.java
@@ -6,8 +6,10 @@ import com.comandante.creeper.server.Color;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
+import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 public class WithdrawalCommand extends BankCommand {
 
@@ -26,7 +28,7 @@ public class WithdrawalCommand extends BankCommand {
                 int withdrawalAmount = Integer.parseInt(originalMessageParts.get(1));
                 if (areBankFundsAvailable(withdrawalAmount)) {
                     player.transferBankGoldToPlayer(withdrawalAmount);
-                    write("Your funds of " + withdrawalAmount + Color.YELLOW + " gold " + Color.RESET + "have been withdrawn from your bank account." + "\r\n");
+                    write("Your funds of " + NumberFormat.getNumberInstance(Locale.US).format(withdrawalAmount) + Color.YELLOW + " gold " + Color.RESET + "have been withdrawn from your bank account." + "\r\n");
                 } else {
                     write("You don't have enough" + Color.YELLOW + " gold "+ Color.RESET + "to cover the withdrawal amount." + "\r\n");
                 }
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index 5b3aca67..a7e2ee56 100755
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -109,12 +109,14 @@ public class Player extends CreeperEntity {
     private void processEffects() {
         synchronized (interner.intern(playerId)) {
             PlayerMetadata playerMetadata = getPlayerMetadata();
-            for (String effectId : playerMetadata.getEffects()) {
+            Iterator<String> iterator = playerMetadata.getEffects().iterator();
+            while (iterator.hasNext()) {
+                String effectId =  iterator.next();
                 Effect effect = gameManager.getEntityManager().getEffectEntity(effectId);
                 if (effect.getEffectApplications() >= effect.getMaxEffectApplications()) {
                     gameManager.getChannelUtils().write(playerId, effect.getEffectName() + " has worn off.\r\n", true);
                     gameManager.getEntityManager().removeEffect(effect);
-                    playerMetadata.removeEffectId(effectId);
+                    iterator.remove();
                 } else {
                     effect.setEffectApplications(effect.getEffectApplications() + 1);
                     gameManager.getEffectsManager().application(effect, playerMetadata);
@@ -646,7 +648,9 @@ public class Player extends CreeperEntity {
             if (playerMetadata.getEffects() != null) {
                 for (String effectId : playerMetadata.getEffects()) {
                     Effect effect = gameManager.getEntityManager().getEffectEntity(effectId);
-                    StatsHelper.combineStats(newStats, effect.getDurationStats());
+                    if (effect != null) {
+                        StatsHelper.combineStats(newStats, effect.getDurationStats());
+                    }
                 }
             }
             return newStats;
diff --git a/src/main/java/com/comandante/creeper/player/PlayerMetadata.java b/src/main/java/com/comandante/creeper/player/PlayerMetadata.java
index 9998838c..ed4853e9 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerMetadata.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerMetadata.java
@@ -122,10 +122,6 @@ public class PlayerMetadata implements Serializable {
         effects.add(effectId);
     }
 
-    protected void removeEffectId(String effectId) {
-        effects.remove(effectId);
-    }
-
     public String getPlayerName() {
         return playerName;
     }
-- 
GitLab