From 737b0ce4f79c3f694c2b59b674d3ae0c3adbb06c Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris.kearney@urbanairship.com>
Date: Sun, 24 Aug 2014 19:57:10 -0700
Subject: [PATCH] proper spacing for prompt

---
 .../creeper/Items/ItemUseHandler.java         |  2 +-
 .../creeper/command/commands/Command.java     | 17 ++++
 .../creeper/command/commands/DropCommand.java |  4 +-
 .../command/commands/GossipCommand.java       | 20 +++-
 .../command/commands/InventoryCommand.java    |  2 +-
 .../command/commands/MovementCommand.java     | 12 +--
 .../command/commands/PickUpCommand.java       |  2 +-
 .../creeper/command/commands/SayCommand.java  | 27 ++++-
 .../creeper/command/commands/TellCommand.java | 34 ++++++-
 .../creeper/command/commands/UseCommand.java  |  2 +-
 .../creeper/command/commands/WhoCommand.java  | 19 +++-
 .../command/commands/WhoamiCommand.java       |  2 +-
 .../creeper/managers/GameManager.java         | 99 +------------------
 .../java/com/comandante/creeper/npc/Npc.java  |  1 -
 .../creeper/server/ChannelUtils.java          | 12 ++-
 15 files changed, 135 insertions(+), 120 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java b/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java
index b454ce10..824fd8e2 100644
--- a/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java
+++ b/src/main/java/com/comandante/creeper/Items/ItemUseHandler.java
@@ -63,7 +63,7 @@ public class ItemUseHandler {
     }
 
     private void writeToPlayer(String message) {
-        gameManager.getChannelUtils().write(playerId, message);
+        gameManager.getChannelUtils().writeNoPrompt(playerId, message);
     }
 
     private void incrementUses(Item item) {
diff --git a/src/main/java/com/comandante/creeper/command/commands/Command.java b/src/main/java/com/comandante/creeper/command/commands/Command.java
index eab784e7..2746bc6b 100644
--- a/src/main/java/com/comandante/creeper/command/commands/Command.java
+++ b/src/main/java/com/comandante/creeper/command/commands/Command.java
@@ -1,10 +1,12 @@
 package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Set;
 
 public abstract class Command implements Runnable {
 
@@ -58,4 +60,19 @@ public abstract class Command implements Runnable {
         String[] split = s.split(" ");
         return new ArrayList<String>(Arrays.asList(split));
     }
+
+    public void commandWrite(String message) {
+        getGameManager().getChannelUtils().write(getPlayerId(), message);
+    }
+
+    public void roomSay(Integer roomId, String message) {
+        Set<String> presentPlayerIds = getGameManager().getRoomManager().getRoom(roomId).getPresentPlayerIds();
+        for (String playerId : presentPlayerIds) {
+            Player player = getGameManager().getPlayerManager().getPlayer(playerId);
+            if (player.getPlayerId().equals(getPlayerId())) {
+                commandWrite(message);
+            }
+            getGameManager().getChannelUtils().writeNoPrompt(player.getPlayerId(), message);
+        }
+    }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/DropCommand.java b/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
index 7a1d2181..9dc9a99d 100644
--- a/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/DropCommand.java
@@ -27,7 +27,7 @@ public class DropCommand extends Command {
     public void run() {
         ArrayList<String> originalMessageParts = getOriginalMessageParts();
         if (originalMessageParts.size() == 1) {
-            getGameManager().getChannelUtils().write(getPlayerId(), "No item specified.");
+            commandWrite("No item specified.");
             return;
         }
         String itemTarget = originalMessageParts.get(1);
@@ -42,7 +42,7 @@ public class DropCommand extends Command {
                 getGameManager().getPlayerManager().savePlayerMetadata(playerMetadata);
                 getGameManager().getItemDecayManager().addItem(itemEntity);
                 getGameManager().getEntityManager().addItem(itemEntity);
-                getGameManager().roomSay(playerCurrentRoom.getRoomId(),getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " dropped " + itemEntity.getItemName());
+                roomSay(playerCurrentRoom.getRoomId(),getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " dropped " + itemEntity.getItemName());
                 return;
             }
         }
diff --git a/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java b/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java
index 3c24d17f..b5a99cfa 100644
--- a/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/GossipCommand.java
@@ -4,6 +4,10 @@ package com.comandante.creeper.command.commands;
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
+import org.fusesource.jansi.Ansi;
+
+import java.util.Iterator;
+import java.util.Map;
 
 public class GossipCommand extends Command {
 
@@ -19,7 +23,19 @@ public class GossipCommand extends Command {
 
     @Override
     public void run() {
-        Player player = getGameManager().getPlayerManager().getPlayer(getPlayerId());
-        getGameManager().gossip(player, getOriginalMessage().replaceFirst("^gossip ", ""));
+        Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        Iterator<Map.Entry<String, Player>> players = getGameManager().getPlayerManager().getPlayers();
+        while (players.hasNext()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            Player player = players.next().getValue();
+            stringBuilder.append(new Ansi().fg(Ansi.Color.MAGENTA).toString());
+            stringBuilder.append("[").append(sourcePlayer.getPlayerName()).append("] ").append(getOriginalMessage());
+            stringBuilder.append(new Ansi().reset().toString());
+            if (player.getPlayerId().equals(sourcePlayer.getPlayerId())) {
+                commandWrite(stringBuilder.toString());
+            } else {
+                getGameManager().getChannelUtils().writeNoPrompt(player.getPlayerId(), stringBuilder.toString());
+            }
+        }
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java b/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java
index 72538e62..d068ec44 100644
--- a/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/InventoryCommand.java
@@ -50,6 +50,6 @@ public class InventoryCommand extends Command {
             }
             sb.append("\r\n");
         }
-        getGameManager().getChannelUtils().write(getPlayerId(), sb.toString());
+        commandWrite(sb.toString());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java b/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java
index de08f65c..cd87fc2b 100644
--- a/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java
@@ -53,7 +53,7 @@ public class MovementCommand extends Command {
         }
         if (northTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getNorthId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no northern exit.");
+                commandWrite("There's no northern exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getNorthId().get());
@@ -61,7 +61,7 @@ public class MovementCommand extends Command {
         }
         if (southTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getSouthId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no southern exit.");
+                commandWrite("There's no southern exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getSouthId().get());
@@ -69,7 +69,7 @@ public class MovementCommand extends Command {
         }
         if (eastTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getEastId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no eastern exit.");
+                commandWrite("There's no eastern exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getEastId().get());
@@ -77,7 +77,7 @@ public class MovementCommand extends Command {
         }
         if (westTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getWestId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no western exit.");
+                commandWrite("There's no western exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getWestId().get());
@@ -85,7 +85,7 @@ public class MovementCommand extends Command {
         }
         if (upTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getUpId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no up exit.");
+                commandWrite("There's no up exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getUpId().get());
@@ -93,7 +93,7 @@ public class MovementCommand extends Command {
         }
         if (downTriggers.contains(command.toLowerCase())) {
             if (!currentRoom.getDownId().isPresent()) {
-                channelUtils.write(player.getPlayerId(), "There's no down exit.");
+                commandWrite("There's no down exit.");
                 return;
             }
             Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getDownId().get());
diff --git a/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java b/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
index ef797ea0..c3a7c153 100644
--- a/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/PickUpCommand.java
@@ -33,7 +33,7 @@ public class PickUpCommand extends Command {
             Item itemEntity = getGameManager().getEntityManager().getItemEntity(next);
             if (itemEntity.getShortName().equalsIgnoreCase(originalMessageParts.get(1))) {
                 getGameManager().acquireItem(player, itemEntity.getItemId());
-                getGameManager().roomSay(playerCurrentRoom.getRoomId(),getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " picked up " + itemEntity.getItemName());
+                roomSay(playerCurrentRoom.getRoomId(), getGameManager().getPlayerManager().getPlayer(getPlayerId()).getPlayerName() + " picked up " + itemEntity.getItemName());
                 return;
             }
         }
diff --git a/src/main/java/com/comandante/creeper/command/commands/SayCommand.java b/src/main/java/com/comandante/creeper/command/commands/SayCommand.java
index cc0c30a9..219453dd 100644
--- a/src/main/java/com/comandante/creeper/command/commands/SayCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/SayCommand.java
@@ -2,7 +2,12 @@ package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.model.Player;
+import com.comandante.creeper.model.Room;
+import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
+import org.fusesource.jansi.Ansi;
+
+import java.util.Set;
 
 public class SayCommand extends Command {
 
@@ -18,8 +23,24 @@ public class SayCommand extends Command {
 
     @Override
     public void run() {
-        GameManager gameManager = getGameManager();
-        Player player = gameManager.getPlayerManager().getPlayer(getPlayerId());
-        getGameManager().say(player, getOriginalMessage().trim().replaceFirst("^say ", ""));
+        Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        String message = getOriginalMessage().replaceFirst("^say ", "");
+        Optional<Room> playerCurrentRoomOpt = getGameManager().getRoomManager().getPlayerCurrentRoom(sourcePlayer);
+        if (!playerCurrentRoomOpt.isPresent()) {
+            throw new RuntimeException("playerCurrentRoom is missing!");
+        }
+        Room playerCurrentRoom = playerCurrentRoomOpt.get();
+        Set<Player> presentPlayers = getGameManager().getPlayerManager().getPresentPlayers(playerCurrentRoom);
+        for (Player presentPlayer : presentPlayers) {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append(new Ansi().fg(Ansi.Color.RED).toString());
+            stringBuilder.append("<").append(sourcePlayer.getPlayerName()).append("> ").append(message);
+            stringBuilder.append(new Ansi().reset().toString());
+            if (presentPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
+                commandWrite(stringBuilder.toString());
+            } else {
+                getGameManager().getChannelUtils().writeNoPrompt(presentPlayer.getPlayerId(), stringBuilder.toString());
+            }
+        }
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/TellCommand.java b/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
index b40f04d2..633cfa2a 100644
--- a/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/TellCommand.java
@@ -1,7 +1,13 @@
 package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
+import org.apache.commons.lang3.StringUtils;
+import org.fusesource.jansi.Ansi;
+
+import java.util.ArrayList;
+import java.util.Arrays;
 
 public class TellCommand extends Command {
 
@@ -17,6 +23,32 @@ public class TellCommand extends Command {
 
     @Override
     public void run() {
-        getGameManager().tell(getGameManager().getPlayerManager().getPlayer(getPlayerId()), getOriginalMessage());
+        Player sourcePlayer = getGameManager().getPlayerManager().getPlayer(getPlayerId());
+        ArrayList<String> parts = new ArrayList<>(Arrays.asList(getOriginalMessage().split(" ")));
+        if (parts.size() < 3) {
+            commandWrite("tell failed, no message to send.");
+            return;
+        }
+        //remove the literal 'tell'
+        parts.remove(0);
+        String destinationUsername = parts.get(0);
+        Player desintationPlayer = getGameManager().getPlayerManager().getPlayerByUsername(destinationUsername);
+        if (desintationPlayer == null) {
+            commandWrite("tell failed, unknown user.");
+            return;
+        }
+        if (desintationPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
+            commandWrite("tell failed, you're talking to yourself.");
+            return;
+        }
+        parts.remove(0);
+        String tellMessage = StringUtils.join(parts, " ");
+        StringBuilder stringBuilder = new StringBuilder();
+        String destinationPlayercolor = new Ansi().fg(Ansi.Color.YELLOW).toString();
+        stringBuilder.append("*").append(sourcePlayer.getPlayerName()).append("* ");
+        stringBuilder.append(tellMessage);
+        stringBuilder.append(new Ansi().reset().toString());
+        getGameManager().getChannelUtils().writeNoPrompt(desintationPlayer.getPlayerId(), destinationPlayercolor + stringBuilder.toString());
+        commandWrite(stringBuilder.toString());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/UseCommand.java b/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
index ce381cd4..fcd78219 100644
--- a/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/UseCommand.java
@@ -28,7 +28,7 @@ public class UseCommand extends Command {
     public void run() {
         ArrayList<String> originalMessageParts = getOriginalMessageParts();
         if (originalMessageParts.size() == 1) {
-            getGameManager().getChannelUtils().write(getPlayerId(), "No item specified.");
+            commandWrite("No item specified.");
             return;
         }
         String itemTarget = originalMessageParts.get(1);
diff --git a/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java b/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java
index d44a20aa..71b87e87 100644
--- a/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/WhoCommand.java
@@ -1,7 +1,11 @@
 package com.comandante.creeper.command.commands;
 
 import com.comandante.creeper.managers.GameManager;
+import com.comandante.creeper.model.Player;
 import com.google.common.collect.ImmutableList;
+import org.fusesource.jansi.Ansi;
+
+import java.util.Set;
 
 public class WhoCommand extends Command {
 
@@ -17,6 +21,17 @@ public class WhoCommand extends Command {
 
     @Override
     public void run() {
-        getGameManager().who(getGameManager().getPlayerManager().getPlayer(getPlayerId()));
-    }
+            Set<Player> allPlayers = getGameManager().getAllPlayers();
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append(new Ansi().fg(Ansi.Color.CYAN).toString());
+            stringBuilder.append("----------------------\r\n");
+            stringBuilder.append("|--active users------|\r\n");
+            stringBuilder.append("----------------------\r\n");
+            for (Player allPlayer : allPlayers) {
+                stringBuilder.append(allPlayer.getPlayerName());
+                stringBuilder.append("\r\n");
+            }
+            stringBuilder.append(new Ansi().reset().toString());
+            commandWrite(stringBuilder.toString());
+        }
 }
diff --git a/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java b/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java
index dbd18f5c..fc237539 100644
--- a/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/WhoamiCommand.java
@@ -19,6 +19,6 @@ public class WhoamiCommand extends Command {
     @Override
     public void run() {
         Player player = getGameManager().getPlayerManager().getPlayer(getPlayerId());
-        getGameManager().getChannelUtils().write(getPlayerId(), player.getPlayerName());
+        commandWrite(player.getPlayerName());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index 0ee488c8..e982939e 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -12,13 +12,10 @@ import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Interners;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.text.WordUtils;
 import org.fusesource.jansi.Ansi;
 import org.jboss.netty.channel.MessageEvent;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
@@ -96,56 +93,6 @@ public class GameManager {
 
     private static final Integer LOBBY_ID = 1;
 
-    public void who(Player player) {
-        Set<Player> allPlayers = getAllPlayers();
-        StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append(new Ansi().fg(Ansi.Color.CYAN).toString());
-        stringBuilder.append("----------------------\r\n");
-        stringBuilder.append("|--active users------|\r\n");
-        stringBuilder.append("----------------------\r\n");
-        for (Player allPlayer : allPlayers) {
-            stringBuilder.append(allPlayer.getPlayerName());
-        }
-        stringBuilder.append(new Ansi().reset().toString());
-        channelUtils.write(player.getPlayerId(), stringBuilder.toString());
-    }
-
-    public void tell(Player sourcePlayer, String rawMessage) {
-        ArrayList<String> parts = new ArrayList<>(Arrays.asList(rawMessage.split(" ")));
-        if (parts.size() < 3) {
-            channelUtils.write(sourcePlayer.getPlayerId(), "tell failed, no message to send.");
-            return;
-        }
-        //remove the literal 'tell'
-        parts.remove(0);
-        String destinationUsername = parts.get(0);
-        Player desintationPlayer = getPlayerManager().getPlayerByUsername(destinationUsername);
-        if (desintationPlayer == null) {
-            channelUtils.write(sourcePlayer.getPlayerId(), "tell failed, unknown user.");
-            return;
-        }
-        if (desintationPlayer.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-            channelUtils.write(sourcePlayer.getPlayerId(), "tell failed, you're talking to yourself.");
-            return;
-        }
-        parts.remove(0);
-
-        String tellMessage = StringUtils.join(parts, " ");
-        privateMessage(sourcePlayer, desintationPlayer, tellMessage);
-
-    }
-
-    private void privateMessage(Player sourcePlayer, Player destinationPlayer, String message) {
-        StringBuilder stringBuilder = new StringBuilder();
-        String sourcePlayerColor = new Ansi().fg(Ansi.Color.WHITE).toString();
-        String destinationPlayercolor = new Ansi().fg(Ansi.Color.YELLOW).toString();
-        stringBuilder.append("*").append(sourcePlayer.getPlayerName()).append("* ");
-        stringBuilder.append(message);
-        stringBuilder.append(new Ansi().reset().toString());
-        channelUtils.write(destinationPlayer.getPlayerId(), destinationPlayercolor + stringBuilder.toString());
-        channelUtils.write(sourcePlayer.getPlayerId(), sourcePlayerColor + stringBuilder.toString());
-    }
-
     public Set<Player> getAllPlayers() {
         ImmutableSet.Builder<Player> builder = ImmutableSet.builder();
         Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms();
@@ -176,10 +123,10 @@ public class GameManager {
                 StringBuilder sb = new StringBuilder();
                 sb.append(movement.getPlayer().getPlayerName());
                 sb.append(" ").append(movement.getRoomExitMessage());
-                channelUtils.write(next.getPlayerId(), sb.toString());
+                channelUtils.writeNoPrompt(next.getPlayerId(), sb.toString());
             }
             for (Player next : playerManager.getPresentPlayers(destinationRoom)) {
-                channelUtils.write(next.getPlayerId(), movement.getPlayer().getPlayerName() + " arrived.");
+                channelUtils.writeNoPrompt(next.getPlayerId(), movement.getPlayer().getPlayerName() + " arrived.");
             }
             destinationRoom.addPresentPlayer(movement.getPlayer().getPlayerId());
         }
@@ -196,40 +143,6 @@ public class GameManager {
         }
     }
 
-    public void say(Player sourcePlayer, String message) {
-        Optional<Room> playerCurrentRoomOpt = roomManager.getPlayerCurrentRoom(sourcePlayer);
-        if (!playerCurrentRoomOpt.isPresent()) {
-            throw new RuntimeException("playerCurrentRoom is missing!");
-        }
-
-        Room playerCurrentRoom = playerCurrentRoomOpt.get();
-        Set<Player> presentPlayers = playerManager.getPresentPlayers(playerCurrentRoom);
-
-        for (Player presentPlayer : presentPlayers) {
-            StringBuilder stringBuilder = new StringBuilder();
-            stringBuilder.append(new Ansi().fg(Ansi.Color.RED).toString());
-            stringBuilder.append("<").append(sourcePlayer.getPlayerName()).append("> ").append(message);
-            stringBuilder.append(new Ansi().reset().toString());
-            channelUtils.write(presentPlayer.getPlayerId(), stringBuilder.toString());
-        }
-    }
-
-    public void gossip(Player sourcePlayer, String message) {
-        Iterator<Map.Entry<String, Player>> players = playerManager.getPlayers();
-        while (players.hasNext()) {
-            StringBuilder stringBuilder = new StringBuilder();
-            Player player = players.next().getValue();
-            if (player.getPlayerId().equals(sourcePlayer.getPlayerId())) {
-                stringBuilder.append(new Ansi().fg(Ansi.Color.WHITE).toString());
-            } else {
-                stringBuilder.append(new Ansi().fg(Ansi.Color.MAGENTA).toString());
-            }
-            stringBuilder.append("[").append(sourcePlayer.getPlayerName()).append("] ").append(message);
-            stringBuilder.append(new Ansi().reset().toString());
-            channelUtils.write(player.getPlayerId(), stringBuilder.toString());
-        }
-    }
-
     private String getExits(Room room, Player player) {
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append("[ Exits: ");
@@ -331,14 +244,6 @@ public class GameManager {
         currentRoomLogic(player);
     }
 
-    public void roomSay(Integer roomId, String message) {
-        Set<String> presentPlayerIds = roomManager.getRoom(roomId).getPresentPlayerIds();
-        for (String playerId : presentPlayerIds) {
-            Player player = playerManager.getPlayer(playerId);
-            channelUtils.write(player.getPlayerId(), message);
-        }
-    }
-
     public void placeItemInRoom(Integer roomId, String itemId) {
         roomManager.getRoom(roomId).addPresentItem(entityManager.getItemEntity(itemId).getItemId());
     }
diff --git a/src/main/java/com/comandante/creeper/npc/Npc.java b/src/main/java/com/comandante/creeper/npc/Npc.java
index 32b7517e..2cd0fae6 100644
--- a/src/main/java/com/comandante/creeper/npc/Npc.java
+++ b/src/main/java/com/comandante/creeper/npc/Npc.java
@@ -57,6 +57,5 @@ public abstract class Npc extends CreeperEntity {
         sb.append(new Ansi().fg(Ansi.Color.RED).toString());
         sb.append(name).append(": ").append(message);
         sb.append(new Ansi().reset().toString());
-        gameManager.roomSay(roomId, sb.toString());
     }
 }
diff --git a/src/main/java/com/comandante/creeper/server/ChannelUtils.java b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
index 4c564a92..a72e8414 100644
--- a/src/main/java/com/comandante/creeper/server/ChannelUtils.java
+++ b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
@@ -15,14 +15,24 @@ public class ChannelUtils {
         this.roomManager = roomManager;
     }
 
+    public void writeNoPrompt(String playerId, String message) {
+         write(playerId, message, false);
+    }
+
     public void write(String playerId, String message) {
+        write(playerId, message, true);
+    }
+
+    public void write(String playerId, String message, boolean isPrompt) {
         Player player = playerManager.getPlayer(playerId);
         Room playerCurrentRoom = roomManager.getPlayerCurrentRoom(player).get();
         StringBuilder sb = new StringBuilder();
         sb.append("\r\n");
         sb.append(sanitze(message));
         sb.append(("\r\n"));
-        sb.append(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+        if (isPrompt) {
+            sb.append(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+        }
         player.getChannel().write(sb.toString());
     }
 
-- 
GitLab