diff --git a/src/main/java/com/comandante/creeper/common/FriendlyTime.java b/src/main/java/com/comandante/creeper/common/FriendlyTime.java index 3ce40b7b9544d9c483926869abe0c0f8feeedfda..7ef02e28b8058d9e9e86d6efc7d669060ea6a68e 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 e585f58b43264b8606b2f4da6b8342ec5a4c15ca..9a06d63da8d9a482709d89e4697863157480c760 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 834d32918009e30793439c8d7f07a8dc9e8a13bf..be556c9ad45daf210fa2baa6da3342495b9342d5 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 0000000000000000000000000000000000000000..f5611c932ffa9ef79175e9003455a6ed4b5785fb --- /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 5f2b8567082225c7ef0d95fd7fa4ac1bf3e8f3f3..7ab0aab6d742ee26852fbc258473ad2ec238c80a 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());