From 35643f0685955acc28305278b3af4f50e54786fa Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris@kearneymail.com> Date: Thu, 23 Apr 2015 22:10:12 -0700 Subject: [PATCH] fixed the enter exits, added an area set command, and some sven created npc --- .../java/com/comandante/creeper/Main.java | 24 ++++++---- .../comandante/creeper/fight/FightRun.java | 5 +- .../com/comandante/creeper/npc/BergOrc.java | 34 +++++++++++++ .../com/comandante/creeper/npc/NpcStats.java | 47 +++++++++++++++++- .../creeper/npc/SwampBerserker.java | 34 +++++++++++++ .../comandante/creeper/npc/TreeBerserker.java | 34 +++++++++++++ .../creeper/server/command/AreaCommand.java | 48 +++++++++++++++++++ .../server/command/InventoryCommand.java | 4 +- .../creeper/server/command/LookCommand.java | 2 +- .../server/command/admin/BuildCommand.java | 2 +- .../com/comandante/creeper/world/Area.java | 7 +++ .../comandante/creeper/world/MapMatrix.java | 7 --- .../com/comandante/creeper/world/Room.java | 4 +- .../comandante/creeper/world/RoomModel.java | 13 ++++- .../creeper/world/RoomModelBuilder.java | 10 +++- .../creeper/world/WorldExporter.java | 21 +++++--- world/world.json | 43 +++-------------- 17 files changed, 270 insertions(+), 69 deletions(-) create mode 100644 src/main/java/com/comandante/creeper/npc/BergOrc.java create mode 100644 src/main/java/com/comandante/creeper/npc/SwampBerserker.java create mode 100644 src/main/java/com/comandante/creeper/npc/TreeBerserker.java create mode 100644 src/main/java/com/comandante/creeper/server/command/AreaCommand.java diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java index 1aac7e82..7e264d53 100644 --- a/src/main/java/com/comandante/creeper/Main.java +++ b/src/main/java/com/comandante/creeper/Main.java @@ -4,7 +4,10 @@ import com.comandante.creeper.Items.ItemType; import com.comandante.creeper.entity.EntityManager; import com.comandante.creeper.managers.GameManager; import com.comandante.creeper.managers.SessionManager; +import com.comandante.creeper.npc.BergOrc; import com.comandante.creeper.npc.StreetHustler; +import com.comandante.creeper.npc.SwampBerserker; +import com.comandante.creeper.npc.TreeBerserker; import com.comandante.creeper.player.PlayerManager; import com.comandante.creeper.player.PlayerMetadata; import com.comandante.creeper.server.CreeperCommandRegistry; @@ -42,8 +45,8 @@ public class Main { public static CreeperCommandRegistry creeperCommandRegistry; private static final Logger log = Logger.getLogger(Main.class); - private static final int PORT = 8081; - public static final String MUD_NAME = "creeperBETA"; + private static final int PORT = 8080; + public static final String MUD_NAME = "creeper"; public static void main(String[] args) throws Exception { @@ -75,16 +78,20 @@ public class Main { entityManager.addEntity(new NpcSpawner(new StreetHustler(gameManager), Area.NEWBIE_ZONE, gameManager, new SpawnRule(10, 30, 3, 25))); entityManager.addEntity(new NpcSpawner(new StreetHustler(gameManager), Area.DEFAULT, gameManager, new SpawnRule(10, 3, 4, 25))); - Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms(); - while (rooms.hasNext()) { - Map.Entry<Integer, Room> next = rooms.next(); - next.getValue().setAreas(Sets.newHashSet(Area.NEWBIE_ZONE)); - } - startUpMessage("Adding beer"); ItemSpawner itemSpawner = new ItemSpawner(ItemType.BEER, Area.NEWBIE_ZONE, new SpawnRule(20, 20, 2, 25), gameManager); entityManager.addEntity(itemSpawner); + startUpMessage("Adding Tree Berserkers"); + entityManager.addEntity(new NpcSpawner(new TreeBerserker(gameManager), Area.NEWBIE_ZONE, gameManager, new SpawnRule(10, 6, 2, 100))); + entityManager.addEntity(new NpcSpawner(new TreeBerserker(gameManager), Area.NORTH1_ZONE, gameManager, new SpawnRule(10, 14, 2, 100))); + + startUpMessage("Adding Swamp Berserkers"); + entityManager.addEntity(new NpcSpawner(new SwampBerserker(gameManager), Area.NORTH2_ZONE, gameManager, new SpawnRule(10, 8, 2, 100))); + + startUpMessage("Adding Berg Orcs"); + entityManager.addEntity(new NpcSpawner(new BergOrc(gameManager), Area.BLOODRIDGE1_ZONE, gameManager, new SpawnRule(10, 8, 2, 100))); + startUpMessage("Configuring Creeper Commmands"); creeperCommandRegistry = new CreeperCommandRegistry(new UnknownCommand(gameManager)); creeperCommandRegistry.addCommand(new DropCommand(gameManager)); @@ -105,6 +112,7 @@ public class Main { creeperCommandRegistry.addCommand(new SaveWorldCommand(gameManager)); creeperCommandRegistry.addCommand(new BuildCommand(gameManager)); creeperCommandRegistry.addCommand(new MapCommand(gameManager)); + creeperCommandRegistry.addCommand(new AreaCommand(gameManager)); CreeperServer creeperServer = new CreeperServer(PORT, db); diff --git a/src/main/java/com/comandante/creeper/fight/FightRun.java b/src/main/java/com/comandante/creeper/fight/FightRun.java index b9caaea1..58637188 100644 --- a/src/main/java/com/comandante/creeper/fight/FightRun.java +++ b/src/main/java/com/comandante/creeper/fight/FightRun.java @@ -55,8 +55,11 @@ public class FightRun implements Callable<FightResults> { } if (npcStats.getCurrentHealth() <= 0) { - gameManager.getChannelUtils().write(player.getPlayerId(), "You killed " + npc.getName(), true); + int experience = gameManager.getPlayerManager().getPlayerMetadata(player.getPlayerId()).getStats().getExperience(); + experience += npc.getStats().getExperience(); + gameManager.getChannelUtils().write(player.getPlayerId(), "You killed " + npc.getName() + " (" + npc.getStats().getExperience() + "exp)", true); gameManager.getChannelUtils().writeToRoom(player.getPlayerId(), npc.getDieMessage()); + gameManager.getPlayerManager().getPlayerMetadata(player.getPlayerId()).getStats().setExperience(experience); gameManager.getEntityManager().deleteNpcEntity(npc.getEntityId()); fightResults = new FightResultsBuilder().setNpcWon(false).setPlayerWon(true).createFightResults(); } diff --git a/src/main/java/com/comandante/creeper/npc/BergOrc.java b/src/main/java/com/comandante/creeper/npc/BergOrc.java new file mode 100644 index 00000000..a4e2eecc --- /dev/null +++ b/src/main/java/com/comandante/creeper/npc/BergOrc.java @@ -0,0 +1,34 @@ +package com.comandante.creeper.npc; + +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.world.Area; +import com.comandante.creeper.server.Color; +import com.google.common.base.Optional; +import com.google.common.collect.Sets; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import static com.comandante.creeper.server.Color.BOLD_ON; +import static com.comandante.creeper.server.Color.RESET; + +public class BergOrc extends Npc { + private final static long phraseIntervalMs = 300000; + private final static String NAME = "berg orc"; + private final static Set<String> validTriggers = new HashSet<String>(Arrays.asList(new String[] + {"b", "berg", "orc", "o", NAME} + )); + + private final static String colorName = "berg" + BOLD_ON + Color.GREEN + " orc" + Color.RESET; + private final static String dieMessage = "a " + colorName + " breathes his last breath in a pool of " + BOLD_ON + Color.RED + "blood" + RESET + "."; + + public BergOrc(GameManager gameManager) { + super(gameManager, NAME, colorName, 0, NpcStats.BERG_ORC.createStats(), dieMessage, Optional.of(Sets.newHashSet(Area.BLOODRIDGE1_ZONE)), validTriggers); + } + + @Override + public BergOrc create(GameManager gameManager) { + return new BergOrc(gameManager); + } +} \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/npc/NpcStats.java b/src/main/java/com/comandante/creeper/npc/NpcStats.java index ee18b2f2..386e4e3f 100644 --- a/src/main/java/com/comandante/creeper/npc/NpcStats.java +++ b/src/main/java/com/comandante/creeper/npc/NpcStats.java @@ -15,7 +15,7 @@ public class NpcStats { .setWeaponRatingMin(5) .setWeaponRatingMax(10) .setNumberweaponOfRolls(1) - .setExperience(100); + .setExperience(3); public final static StatsBuilder DRUGGED_PIMP = new StatsBuilder() .setStrength(5) @@ -29,6 +29,49 @@ public class NpcStats { .setWeaponRatingMin(5) .setWeaponRatingMax(10) .setNumberweaponOfRolls(1) - .setExperience(100); + .setExperience(3); + + public final static StatsBuilder TREE_BERSERKER = new StatsBuilder() + .setStrength(8) + .setWillpower(1) + .setAim(1) + .setAgile(1) + .setArmorRating(8) + .setMeleSkill(6) + .setCurrentHealth(200) + .setMaxHealth(200) + .setWeaponRatingMin(8) + .setWeaponRatingMax(13) + .setNumberweaponOfRolls(1) + .setExperience(150); + + + public final static StatsBuilder SWAMP_BERSERKER = new StatsBuilder() + .setStrength(11) + .setWillpower(2) + .setAim(2) + .setAgile(1) + .setArmorRating(8) + .setMeleSkill(6) + .setCurrentHealth(230) + .setMaxHealth(230) + .setWeaponRatingMin(10) + .setWeaponRatingMax(13) + .setNumberweaponOfRolls(1) + .setExperience(190); + + public final static StatsBuilder BERG_ORC = new StatsBuilder() + .setStrength(11) + .setWillpower(2) + .setAim(2) + .setAgile(1) + .setArmorRating(8) + .setMeleSkill(6) + .setCurrentHealth(230) + .setMaxHealth(230) + .setWeaponRatingMin(10) + .setWeaponRatingMax(13) + .setNumberweaponOfRolls(1) + .setExperience(190); } diff --git a/src/main/java/com/comandante/creeper/npc/SwampBerserker.java b/src/main/java/com/comandante/creeper/npc/SwampBerserker.java new file mode 100644 index 00000000..0ed76afe --- /dev/null +++ b/src/main/java/com/comandante/creeper/npc/SwampBerserker.java @@ -0,0 +1,34 @@ +package com.comandante.creeper.npc; + +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.world.Area; +import com.comandante.creeper.server.Color; +import com.google.common.base.Optional; +import com.google.common.collect.Sets; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import static com.comandante.creeper.server.Color.BOLD_ON; +import static com.comandante.creeper.server.Color.RESET; + +public class SwampBerserker extends Npc { + private final static long phraseIntervalMs = 300000; + private final static String NAME = "swamp berserker"; + private final static Set<String> validTriggers = new HashSet<String>(Arrays.asList(new String[] + {"s", "swamp", "berserker","b", NAME} + )); + + private final static String colorName = "swamp" + BOLD_ON + Color.MAGENTA + " berserker" + Color.RESET ; + private final static String dieMessage = "a " + colorName + " breathes his last breath in a pool of " + BOLD_ON + Color.RED + "blood" + RESET + "."; + + public SwampBerserker(GameManager gameManager) { + super(gameManager, NAME, colorName, 0, NpcStats.SWAMP_BERSERKER.createStats(), dieMessage, Optional.of(Sets.newHashSet(Area.NORTH2_ZONE)), validTriggers); + } + + @Override + public SwampBerserker create(GameManager gameManager) { + return new SwampBerserker(gameManager); + } +} \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/npc/TreeBerserker.java b/src/main/java/com/comandante/creeper/npc/TreeBerserker.java new file mode 100644 index 00000000..292f7e18 --- /dev/null +++ b/src/main/java/com/comandante/creeper/npc/TreeBerserker.java @@ -0,0 +1,34 @@ +package com.comandante.creeper.npc; + +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.world.Area; +import com.comandante.creeper.server.Color; +import com.google.common.base.Optional; +import com.google.common.collect.Sets; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import static com.comandante.creeper.server.Color.BOLD_ON; +import static com.comandante.creeper.server.Color.RESET; + +public class TreeBerserker extends Npc { + private final static long phraseIntervalMs = 300000; + private final static String NAME = "tree berserker"; + private final static Set<String> validTriggers = new HashSet<String>(Arrays.asList(new String[] + {"t", "tree", "berserker", "b", NAME} + )); + + private final static String colorName = "tree" + BOLD_ON + Color.MAGENTA + " berserker" + Color.RESET; + private final static String dieMessage = "a " + colorName + " breathes his last breath in a pool of " + BOLD_ON + Color.RED + "blood" + RESET + "."; + + public TreeBerserker(GameManager gameManager) { + super(gameManager, NAME, colorName, 0, NpcStats.TREE_BERSERKER.createStats(), dieMessage, Optional.of(Sets.newHashSet(Area.NEWBIE_ZONE)), validTriggers); + } + + @Override + public TreeBerserker create(GameManager gameManager) { + return new TreeBerserker(gameManager); + } +} \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/server/command/AreaCommand.java b/src/main/java/com/comandante/creeper/server/command/AreaCommand.java new file mode 100644 index 00000000..8c651069 --- /dev/null +++ b/src/main/java/com/comandante/creeper/server/command/AreaCommand.java @@ -0,0 +1,48 @@ +package com.comandante.creeper.server.command; + +import com.comandante.creeper.managers.GameManager; +import com.comandante.creeper.player.Player; +import com.comandante.creeper.world.Area; +import com.google.common.base.Joiner; +import com.google.common.collect.Sets; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.MessageEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + + +public class AreaCommand extends Command { + final static List<String> validTriggers = Arrays.asList("a", "area"); + final static String description = "Alter area settings for the current room."; + + public AreaCommand(GameManager gameManager) { + super(gameManager, validTriggers, description); + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { + configure(e); + try { + if (originalMessageParts.size() == 1) { + Set<Area> areas = currentRoom.getAreas(); + for (Area area: areas) { + write(area.getName() + "\r\n"); + } + return; + } + String s = originalMessageParts.get(1); + List<String> strings = Arrays.asList(s.split(",")); + Set<Area> newAreas = Sets.newConcurrentHashSet(); + for (String string: strings) { + String trim = string.trim(); + newAreas.add(Area.getByName(trim)); + write("Added: " + trim + "\r\n"); + } + currentRoom.setAreas(newAreas); + } finally { + super.messageReceived(ctx, e); + } + } +} diff --git a/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java b/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java index 5402b7c5..075a06d4 100644 --- a/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java +++ b/src/main/java/com/comandante/creeper/server/command/InventoryCommand.java @@ -43,9 +43,9 @@ public class InventoryCommand extends Command { int remainingUses = maxUses - item.getNumberOfUses(); sb.append(" - ").append(remainingUses); if (remainingUses == 1) { - sb.append(" use left."); + sb.append(" use left.").append("\r\n"); } else { - sb.append(" uses left."); + sb.append(" uses left.").append("\r\n"); } } } diff --git a/src/main/java/com/comandante/creeper/server/command/LookCommand.java b/src/main/java/com/comandante/creeper/server/command/LookCommand.java index af16fa5e..02bb041d 100644 --- a/src/main/java/com/comandante/creeper/server/command/LookCommand.java +++ b/src/main/java/com/comandante/creeper/server/command/LookCommand.java @@ -35,7 +35,7 @@ public class LookCommand extends Command { for (String presentPlayerId : presentPlayerIds) { Player presentPlayer = gameManager.getPlayerManager().getPlayer(presentPlayerId); if (presentPlayer.getPlayerName().equals(target)) { - write(playerManager.getLookString(player)); + write(playerManager.getLookString(presentPlayer)); } } } finally { diff --git a/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java index 05f4e451..cf6a3b58 100644 --- a/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java +++ b/src/main/java/com/comandante/creeper/server/command/admin/BuildCommand.java @@ -145,7 +145,7 @@ public class BuildCommand extends Command { } else if (returnDirection.equals(RemoteExit.Direction.UP)) { newFloorModel.setRawMatrixCsv(Integer.toString(newRoomId) + "u|" + currentRoomId); } else if (returnDirection.equals(RemoteExit.Direction.ENTER)) { - newFloorModel.setRawMatrixCsv(Integer.toString(newRoomId) + "e|" + currentRoomId + "||" + remoteExit.getExitDetail()); + newFloorModel.setRawMatrixCsv(Integer.toString(newRoomId)); } newFloorModel.setName(UUID.randomUUID().toString()); return newFloorModel; diff --git a/src/main/java/com/comandante/creeper/world/Area.java b/src/main/java/com/comandante/creeper/world/Area.java index 53fcacca..70508259 100644 --- a/src/main/java/com/comandante/creeper/world/Area.java +++ b/src/main/java/com/comandante/creeper/world/Area.java @@ -2,6 +2,13 @@ package com.comandante.creeper.world; public enum Area { DEFAULT("default"), + HOUSE_ZONE("house_zone"), + NORTH1_ZONE("north1_zone"), + NORTH2_ZONE("north2_zone"), + BLOODRIDGE1_ZONE("bloodridge1_zone"), + BLOODRIDGE2_ZONE("bloodridge2_zone"), + WESTERN1_ZONE("western1_zone"), + WESTERN2_ZONE("western2_zone"), NEWBIE_ZONE("newbie_zone"); private final String name; diff --git a/src/main/java/com/comandante/creeper/world/MapMatrix.java b/src/main/java/com/comandante/creeper/world/MapMatrix.java index 33909ad5..3ad8f332 100644 --- a/src/main/java/com/comandante/creeper/world/MapMatrix.java +++ b/src/main/java/com/comandante/creeper/world/MapMatrix.java @@ -193,9 +193,6 @@ public class MapMatrix { sb.append("u|").append(exit.getRoomId()); } else if (exit.getDirection().equals(RemoteExit.Direction.DOWN)) { sb.append("d|").append(exit.getRoomId()); - }else if (exit.getDirection().equals(RemoteExit.Direction.ENTER)) { - sb.append("e|").append(exit.getRoomId()); - sb.append("||").append(exit.getExitDetail()); } } } @@ -254,10 +251,6 @@ public class MapMatrix { Integer down = getDown(string); addRemote(roomId, new RemoteExit(RemoteExit.Direction.DOWN, down, ""), remotes); } - if (string.contains("e|")) { - Integer enter = getEnter(string); - addRemote(roomId, new RemoteExit(RemoteExit.Direction.ENTER, enter, getEnterDescription(string)), remotes); - } data.add(roomId); } else { data.add(0); diff --git a/src/main/java/com/comandante/creeper/world/Room.java b/src/main/java/com/comandante/creeper/world/Room.java index a1a84ddc..87ce45cb 100644 --- a/src/main/java/com/comandante/creeper/world/Room.java +++ b/src/main/java/com/comandante/creeper/world/Room.java @@ -37,7 +37,7 @@ public abstract class Room extends CreeperEntity { private final Set<String> npcIds = Sets.newConcurrentHashSet(); private final Set<String> itemIds = Sets.newConcurrentHashSet(); private List<ItemSpawner> itemSpawners = Lists.newArrayList(); - private Set<Area> areas = Sets.newHashSet(Area.DEFAULT); + private Set<Area> areas = Sets.newConcurrentHashSet(); private Optional<String> mapData = Optional.absent(); private final Set<String> roomTags; @@ -220,6 +220,8 @@ public abstract class Room extends CreeperEntity { itemSpawners.add(itemSpawner); } + + @Override public void run() { Iterator<ItemSpawner> iterator = itemSpawners.iterator(); diff --git a/src/main/java/com/comandante/creeper/world/RoomModel.java b/src/main/java/com/comandante/creeper/world/RoomModel.java index f92b2b0c..cb518b8a 100644 --- a/src/main/java/com/comandante/creeper/world/RoomModel.java +++ b/src/main/java/com/comandante/creeper/world/RoomModel.java @@ -2,6 +2,7 @@ package com.comandante.creeper.world; import com.google.gson.GsonBuilder; +import java.util.Map; import java.util.Set; public class RoomModel { @@ -12,14 +13,16 @@ public class RoomModel { String roomTitle; Set<String> roomTags; Set<String> areaNames; + Map<String, String> enterExitNames; - public RoomModel(int roomId, int floorId, String roomDescription, String roomTitle, Set<String> roomTags, Set<String> areaNames) { + public RoomModel(int roomId, int floorId, String roomDescription, String roomTitle, Set<String> roomTags, Set<String> areaNames, Map<String, String> enterExitNames) { this.roomId = roomId; this.floorId = floorId; this.roomDescription = roomDescription; this.roomTitle = roomTitle; this.roomTags = roomTags; this.areaNames = areaNames; + this.enterExitNames = enterExitNames; } public Set<String> getAreaNames() { @@ -70,6 +73,14 @@ public class RoomModel { this.roomTitle = roomTitle; } + public Map<String, String> getEnterExitNames() { + return enterExitNames; + } + + public void setEnterExitNames(Map<String, String> enterExitNames) { + this.enterExitNames = enterExitNames; + } + public static void main(String[] args) { RoomModel roomModel = new RoomModelBuilder().build(); diff --git a/src/main/java/com/comandante/creeper/world/RoomModelBuilder.java b/src/main/java/com/comandante/creeper/world/RoomModelBuilder.java index cbb53aa2..d7b3317c 100644 --- a/src/main/java/com/comandante/creeper/world/RoomModelBuilder.java +++ b/src/main/java/com/comandante/creeper/world/RoomModelBuilder.java @@ -1,7 +1,9 @@ package com.comandante.creeper.world; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import java.util.Map; import java.util.Set; public class RoomModelBuilder { @@ -11,6 +13,7 @@ public class RoomModelBuilder { private String roomTitle; private Set<String> roomTags = Sets.newHashSet(); private Set<String> areaNames = Sets.newHashSet(); + private Map<String, String> enterExitNames =Maps.newHashMap(); public RoomModelBuilder setRoomId(int roomId) { this.roomId = roomId; @@ -46,7 +49,12 @@ public class RoomModelBuilder { return this; } + public RoomModelBuilder addEnterExitName(Integer roomId, String enterExitName) { + enterExitNames.put(String.valueOf(roomId), enterExitName); + return this; + } + public RoomModel build() { - return new RoomModel(roomId, floorId, roomDescription, roomTitle, roomTags, areaNames); + return new RoomModel(roomId, floorId, roomDescription, roomTitle, roomTags, areaNames, enterExitNames); } } \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/world/WorldExporter.java b/src/main/java/com/comandante/creeper/world/WorldExporter.java index 16e18e8e..597b97e3 100644 --- a/src/main/java/com/comandante/creeper/world/WorldExporter.java +++ b/src/main/java/com/comandante/creeper/world/WorldExporter.java @@ -4,6 +4,7 @@ import com.comandante.creeper.entity.EntityManager; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.io.Files; import com.google.gson.GsonBuilder; @@ -12,10 +13,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.charset.Charset; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; +import java.util.*; public class WorldExporter { @@ -62,7 +60,6 @@ public class WorldExporter { RoomModel next = roomModels.next(); floorModel.getRoomModels().add(next); } - return floorModel; } @@ -71,6 +68,9 @@ public class WorldExporter { @Override public RoomModel apply(Room room) { RoomModelBuilder roomModelBuilder = new RoomModelBuilder(); + for (RemoteExit remoteExit : room.getEnterExits()) { + roomModelBuilder.addEnterExitName(remoteExit.getRoomId(), remoteExit.getExitDetail()); + } roomModelBuilder.setRoomDescription(room.getRoomDescription()); roomModelBuilder.setRoomTitle(room.getRoomTitle()); roomModelBuilder.setRoomId(room.getRoomId()); @@ -100,6 +100,15 @@ public class WorldExporter { for (String areaName : roomModel.getAreaNames()) { basicRoomBuilder.addArea(Area.getByName(areaName)); } + Map<String, String> enterExitNames = roomModel.getEnterExitNames(); + if (enterExitNames != null) { + Iterator<Map.Entry<String, String>> iterator = enterExitNames.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry<String, String> next = iterator.next(); + RemoteExit remoteExit = new RemoteExit(RemoteExit.Direction.ENTER, Integer.parseInt(next.getKey()), next.getValue()); + basicRoomBuilder.addEnterExit(remoteExit); + } + } configureExits(basicRoomBuilder, mapMatrix, roomModel.getRoomId()); return basicRoomBuilder.createBasicRoom(); } @@ -129,8 +138,6 @@ public class WorldExporter { basicRoomBuilder.setUpId(Optional.of(exit.getRoomId())); } else if (exit.getDirection().equals(RemoteExit.Direction.DOWN)) { basicRoomBuilder.setDownId(Optional.of(exit.getRoomId())); - } else if (exit.getDirection().equals(RemoteExit.Direction.ENTER)) { - basicRoomBuilder.addEnterExit(exit); } } } diff --git a/world/world.json b/world/world.json index 038500ad..4bb9c7b4 100644 --- a/world/world.json +++ b/world/world.json @@ -1,26 +1,9 @@ { "floorModelList": [ - { - "name": "65aac77e-98aa-46cf-aa1c-a0083c82e44c", - "id": 1, - "rawMatrixCsv": "2d|1,\n", - "roomModels": [ - { - "roomId": 2, - "floorId": 1, - "roomDescription": "Newly created room. Set a new description with the desc command.", - "roomTitle": "Default Title, change with title command", - "roomTags": [], - "areaNames": [ - "default" - ] - } - ] - }, { "name": "main", "id": 0, - "rawMatrixCsv": ",1d|3u|2,\n", + "rawMatrixCsv": ",1,,\n", "roomModels": [ { "roomId": 1, @@ -29,25 +12,11 @@ "roomTitle": "This is a blank title.", "roomTags": [], "areaNames": [ - "newbie_zone" - ] - } - ] - }, - { - "name": "a96d76e4-89e6-4348-af82-f44990c33b82", - "id": 2, - "rawMatrixCsv": "3u|1,\n", - "roomModels": [ - { - "roomId": 3, - "floorId": 2, - "roomDescription": "Newly created room. Set a new description with the desc command.", - "roomTitle": "Default Title, change with title command", - "roomTags": [], - "areaNames": [ - "default" - ] + "north2_zone", + "house_zone", + "north1_zone" + ], + "enterExitNames": {} } ] } -- GitLab