From 740f86c87d2f37d6f028a31009c7649f7c303223 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Sat, 6 May 2017 22:56:47 -0700
Subject: [PATCH] fix time printing

---
 .../creeper/common/FriendlyTime.java          |  7 ++-
 .../com/comandante/creeper/player/Player.java |  4 +-
 .../creeper/server/auth/GameAuth.java         |  2 +
 .../GameAuthorizationAndRegistration.java     | 58 +++++++++++++++++++
 .../command/commands/FriendlyTimeTest.java    |  2 +-
 5 files changed, 69 insertions(+), 4 deletions(-)
 create mode 100644 src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java

diff --git a/src/main/java/com/comandante/creeper/common/FriendlyTime.java b/src/main/java/com/comandante/creeper/common/FriendlyTime.java
index 3ce40b7b..7ef02e28 100644
--- a/src/main/java/com/comandante/creeper/common/FriendlyTime.java
+++ b/src/main/java/com/comandante/creeper/common/FriendlyTime.java
@@ -84,8 +84,13 @@ public class FriendlyTime {
             if (minutes > 1) {
                 sb.append(minutes).append("m");
             }
-        } else {
+        } else if (minutes > 0) {
+            sb.append(minutes).append("m");
+            if (seconds > 1) {
                 sb.append(seconds).append("s");
+            }
+        } else {
+            sb.append(seconds).append("s");
         }
         return sb.toString();
     }
diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java
index e585f58b..9a06d63d 100644
--- a/src/main/java/com/comandante/creeper/player/Player.java
+++ b/src/main/java/com/comandante/creeper/player/Player.java
@@ -603,7 +603,7 @@ public class Player extends CreeperEntity {
         if (currentRoom == null) {
             Integer currentRoomId = getPlayerMetadata().getCurrentRoomId();
             if (currentRoomId != null) {
-                return gameManager.getRoomManager().getRoom(currentRoomId);
+                this.currentRoom = gameManager.getRoomManager().getRoom(currentRoomId);
             }
         }
         return currentRoom;
@@ -611,6 +611,7 @@ public class Player extends CreeperEntity {
 
     public void setCurrentRoomAndPersist(Room currentRoom) {
         // Persisting lazily so that performance doesn't suffer.
+        setCurrentRoom(currentRoom);
         gameManager.getEventProcessor().addEvent(() -> {
             synchronized (interner.intern(playerId)) {
                 PlayerMetadata playerMetadata = getPlayerMetadata();
@@ -618,7 +619,6 @@ public class Player extends CreeperEntity {
                 savePlayerMetadata(playerMetadata);
             }
         });
-        setCurrentRoom(currentRoom);
     }
 
     public void setCurrentRoom(Room room) {
diff --git a/src/main/java/com/comandante/creeper/server/auth/GameAuth.java b/src/main/java/com/comandante/creeper/server/auth/GameAuth.java
index 834d3291..be556c9a 100644
--- a/src/main/java/com/comandante/creeper/server/auth/GameAuth.java
+++ b/src/main/java/com/comandante/creeper/server/auth/GameAuth.java
@@ -40,9 +40,11 @@ public class GameAuth implements CreeperAuthenticator {
         Player player = new Player(username, gameManager);
         if (currentRoom != null) {
             player.setCurrentRoomAndPersist(currentRoom);
+            currentRoom.addPresentPlayer(player.getPlayerId());
         } else {
             currentRoom = player.getCurrentRoom();
             if (currentRoom != null) {
+                currentRoom.addPresentPlayer(player.getPlayerId());
                 player.setCurrentRoom(player.getCurrentRoom());
             }
         }
diff --git a/src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java b/src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java
new file mode 100644
index 00000000..f5611c93
--- /dev/null
+++ b/src/main/java/com/comandante/creeper/server/auth/GameAuthorizationAndRegistration.java
@@ -0,0 +1,58 @@
+package com.comandante.creeper.server.auth;
+
+import com.comandante.creeper.Main;
+import com.comandante.creeper.core_game.GameManager;
+import com.comandante.creeper.player.Player;
+import com.comandante.creeper.player.PlayerMetadata;
+import com.comandante.creeper.world.model.Room;
+import org.jboss.netty.channel.Channel;
+
+import java.util.Optional;
+
+public class GameAuthorizationAndRegistration implements CreeperAuthenticator {
+
+    private final GameManager gameManager;
+
+    public GameAuthorizationAndRegistration(GameManager gameManager) {
+        this.gameManager = gameManager;
+    }
+
+    @Override
+    public boolean authenticateAndRegisterPlayer(String username, String password, Channel channel) {
+        PlayerMetadata playerMetadata = gameManager.getPlayerManager().getPlayerMetadata(Main.createPlayerId(username));
+        if (playerMetadata == null) {
+            return false;
+        }
+        if (!playerMetadata.getPassword().equals(password)) {
+            return false;
+        }
+        Room currentRoom = null;
+        if (gameManager.getPlayerManager().doesPlayerExist(username)) {
+            currentRoom = gameManager.getPlayerManager().getPlayerByUsername(username).getCurrentRoom();
+            gameManager.getPlayerManager().removePlayer(username);
+        } else {
+            Optional<Room> playerCurrentRoom = gameManager.getRoomManager().getPlayerCurrentRoom(Main.createPlayerId(username));
+            if (playerCurrentRoom.isPresent()) {
+                currentRoom = playerCurrentRoom.get();
+            }
+        }
+
+        Player player = new Player(username, gameManager);
+        if (currentRoom != null) {
+            player.setCurrentRoomAndPersist(currentRoom);
+            currentRoom.addPresentPlayer(player.getPlayerId());
+        } else {
+            currentRoom = player.getCurrentRoom();
+            if (currentRoom != null) {
+                currentRoom.addPresentPlayer(player.getPlayerId());
+                player.setCurrentRoom(player.getCurrentRoom());
+            }
+        }
+        player.setChannel(channel);
+        gameManager.getPlayerManager().addPlayer(player);
+        if (currentRoom == null) {
+            gameManager.placePlayerInLobby(player);
+        }
+        return true;
+    }
+}
diff --git a/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java b/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java
index 5f2b8567..7ab0aab6 100644
--- a/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java
+++ b/src/test/com/comandante/creeper/command/commands/FriendlyTimeTest.java
@@ -9,7 +9,7 @@ public class FriendlyTimeTest {
     @Test
     public void testFriendlyParsing() throws Exception {
 
-        FriendlyTime friendlyTime = new FriendlyTime(30949);
+        FriendlyTime friendlyTime = new FriendlyTime(400);
 
         System.out.println("Friendly Long: " + friendlyTime.getFriendlyFormatted());
 
-- 
GitLab