From b3237c2988825338eb5f63e0c82990d821456158 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Sun, 7 Aug 2016 12:01:07 -0700
Subject: [PATCH] slight refactor to build command

---
 .../creeper/command/admin/BuildCommand.java   | 44 ++++++++-----------
 1 file changed, 18 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java b/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java
index f4d26498..5a3064ce 100644
--- a/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java
+++ b/src/main/java/com/comandante/creeper/command/admin/BuildCommand.java
@@ -77,14 +77,7 @@ public class BuildCommand extends Command {
                                 .setDownId(Optional.of(currentRoom.getRoomId()))
                                 .createBasicRoom();
                         currentRoom.setUpId(Optional.of(newRoomId));
-                        entityManager.addEntity(basicRoom);
-                        Set<RoomModel> roomModels = Sets.newHashSet(basicRoom).stream().map(WorldExporter.buildRoomModelsFromRooms()).collect(Collectors.toSet());
-                        newFloorModel.setRoomModels(roomModels);
-                        floorManager.addFloor(newFloorModel.getId(), newFloorModel.getName());
-                        mapsManager.addFloorMatrix(newFloorModel.getId(), MapMatrix.createMatrixFromCsv(newFloorModel.getRawMatrixCsv()));
-                        mapsManager.generateAllMaps();
-                        player.movePlayer(new PlayerMovement(player, currentRoom.getRoomId(), basicRoom.getRoomId(), null, "", ""));
-                        gameManager.currentRoomLogic(player.getPlayerId());
+                        addNewRoomAndFloorAndMovePlayer(basicRoom, newFloorModel, Optional.empty());
                         return;
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("d") | desiredBuildDirection.equalsIgnoreCase("down")) {
@@ -101,14 +94,7 @@ public class BuildCommand extends Command {
                                 .setUpId(Optional.of(currentRoom.getRoomId()))
                                 .createBasicRoom();
                         currentRoom.setDownId(Optional.of(newRoomId));
-                        entityManager.addEntity(basicRoom);
-                        Set<RoomModel> roomModels = Sets.newHashSet(basicRoom).stream().map(WorldExporter.buildRoomModelsFromRooms()).collect(Collectors.toSet());
-                        newFloorModel.setRoomModels(roomModels);
-                        floorManager.addFloor(newFloorModel.getId(), newFloorModel.getName());
-                        mapsManager.addFloorMatrix(newFloorModel.getId(), MapMatrix.createMatrixFromCsv(newFloorModel.getRawMatrixCsv()));
-                        mapsManager.generateAllMaps();
-                        player.movePlayer(new PlayerMovement(player, currentRoom.getRoomId(), basicRoom.getRoomId(), null, "", ""));
-                        gameManager.currentRoomLogic(player.getPlayerId());
+                        addNewRoomAndFloorAndMovePlayer(basicRoom, newFloorModel, Optional.empty());
                         return;
                     }
                 } else if (desiredBuildDirection.equalsIgnoreCase("enter")) {
@@ -125,16 +111,7 @@ public class BuildCommand extends Command {
                             .addEnterExit(returnRemoteExit)
                             .createBasicRoom();
                     currentRoom.addEnterExit(remoteExit);
-                    entityManager.addEntity(basicRoom);
-                    Set<RoomModel> roomModels = Sets.newHashSet(basicRoom).stream().map(WorldExporter.buildRoomModelsFromRooms()).collect(Collectors.toSet());
-                    newFloorModel.setRoomModels(roomModels);
-                    floorManager.addFloor(newFloorModel.getId(), newFloorModel.getName());
-                    MapMatrix matrixFromCsv = MapMatrix.createMatrixFromCsv(newFloorModel.getRawMatrixCsv());
-                    matrixFromCsv.addRemote(basicRoom.getRoomId(), returnRemoteExit);
-                    mapsManager.addFloorMatrix(newFloorModel.getId(), matrixFromCsv);
-                    mapsManager.generateAllMaps();
-                    player.movePlayer(new PlayerMovement(player, currentRoom.getRoomId(), basicRoom.getRoomId(), null, "", ""));
-                    gameManager.currentRoomLogic(player.getPlayerId());
+                    addNewRoomAndFloorAndMovePlayer(basicRoom, newFloorModel, Optional.of(returnRemoteExit));
                     return;
                 }
                 channelUtils.write(playerId, "Room already exists at that location.");
@@ -230,6 +207,21 @@ public class BuildCommand extends Command {
         }
     }
 
+    private void addNewRoomAndFloorAndMovePlayer(Room newRoom, FloorModel newFloorModel, Optional<RemoteExit> returnRemoteExit) {
+        entityManager.addEntity(newRoom);
+        Set<RoomModel> roomModels = Sets.newHashSet(newRoom).stream().map(WorldExporter.buildRoomModelsFromRooms()).collect(Collectors.toSet());
+        newFloorModel.setRoomModels(roomModels);
+        floorManager.addFloor(newFloorModel.getId(), newFloorModel.getName());
+        MapMatrix matrixFromCsv = MapMatrix.createMatrixFromCsv(newFloorModel.getRawMatrixCsv());
+        if (returnRemoteExit.isPresent()) {
+            matrixFromCsv.addRemote(newRoom.getRoomId(), returnRemoteExit.get());
+        }
+        mapsManager.addFloorMatrix(newFloorModel.getId(), matrixFromCsv);
+        mapsManager.generateAllMaps();
+        player.movePlayer(new PlayerMovement(player, currentRoom.getRoomId(), newRoom.getRoomId(), null, "", ""));
+        gameManager.currentRoomLogic(player.getPlayerId());
+    }
+
     private synchronized Integer findUnusedRoomId() {
         for (int i = 1; i < Integer.MAX_VALUE; i++) {
             if (!roomManager.doesRoomIdExist(i)) {
-- 
GitLab