From 7e8fe10c7db17d9c5e718511b8b8038cf37235d3 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Fri, 14 Mar 2014 08:35:44 -0400 Subject: [PATCH] Split dd-rift into Separate Commands Split dd-rift into dd-rift, dd-random, and dd-list --- .../commands/CommandCreateDungeonRift.java | 73 ++++------- .../commands/CommandCreateRandomRift.java | 117 ++++++++++++++++++ .../commands/CommandListDungeons.java | 74 +++++++++++ .../mod_pocketDim/helpers/DungeonHelper.java | 10 +- .../mod_pocketDim/mod_pocketDim.java | 4 + 5 files changed, 225 insertions(+), 53 deletions(-) create mode 100644 src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateRandomRift.java create mode 100644 src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandListDungeons.java diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateDungeonRift.java b/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateDungeonRift.java index 23e0b64..d5ba8dd 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateDungeonRift.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateDungeonRift.java @@ -21,7 +21,7 @@ public class CommandCreateDungeonRift extends DDCommandBase private CommandCreateDungeonRift() { - super("dd-rift", ""); + super("dd-rift", ""); } public static CommandCreateDungeonRift instance() @@ -41,7 +41,7 @@ public class CommandCreateDungeonRift extends DDCommandBase if (sender.worldObj.isRemote) { return DDCommandResult.SUCCESS; - } + } if (command.length == 0) { return DDCommandResult.TOO_FEW_ARGUMENTS; @@ -50,61 +50,38 @@ public class CommandCreateDungeonRift extends DDCommandBase { return DDCommandResult.TOO_MANY_ARGUMENTS; } + + DimLink link; + DungeonData result; + int x = MathHelper.floor_double(sender.posX); + int y = MathHelper.floor_double(sender.posY); + int z = MathHelper.floor_double (sender.posZ); + int orientation = MathHelper.floor_double((sender.rotationYaw + 180.0F) * 4.0F / 360.0F - 0.5D) & 3; - if (command[0].equals("list")) + result = findDungeonByPartialName(command[0], dungeonHelper.getRegisteredDungeons()); + if (result == null) { - Collection dungeonNames = dungeonHelper.getDungeonNames(); - for (String name : dungeonNames) - { - sendChat(sender, name); - } - sendChat(sender, ""); + result = findDungeonByPartialName(command[0], dungeonHelper.getUntaggedDungeons()); + } + //Check if we found any matches + if (result != null) + { + //Create a rift to our selected dungeon and notify the player + dimension = PocketManager.getDimensionData(sender.worldObj); + link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); + PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, result); + sender.worldObj.setBlock(x, y + 1, z, mod_pocketDim.blockRift.blockID, 0, 3); + sendChat(sender, "Created a rift to \"" + result.schematicName() + "\" dungeon (Dimension ID = " + link.destination().getDimension() + ")."); } else { - DimLink link; - DungeonData result; - int x = MathHelper.floor_double(sender.posX); - int y = MathHelper.floor_double(sender.posY); - int z = MathHelper.floor_double (sender.posZ); - int orientation = MathHelper.floor_double((sender.rotationYaw + 180.0F) * 4.0F / 360.0F - 0.5D) & 3; - - if (command[0].equals("random")) - { - - dimension = PocketManager.getDimensionData(sender.worldObj); - link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); - sender.worldObj.setBlock(x, y + 1, z,mod_pocketDim.blockRift.blockID, 0, 3); - sendChat(sender, "Created a rift to a random dungeon."); - } - else - { - result = findDungeonByPartialName(command[0], dungeonHelper.getRegisteredDungeons()); - if (result == null) - { - result = findDungeonByPartialName(command[0], dungeonHelper.getUntaggedDungeons()); - } - //Check if we found any matches - if (result != null) - { - //Create a rift to our selected dungeon and notify the player - dimension = PocketManager.getDimensionData(sender.worldObj); - link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); - PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, result); - sender.worldObj.setBlock(x, y + 1, z, mod_pocketDim.blockRift.blockID, 0, 3); - sendChat(sender, "Created a rift to \"" + result.schematicName() + "\" dungeon (Dimension ID = " + link.destination().getDimension() + ")."); - } - else - { - //No matches! - return new DDCommandResult("Error: The specified dungeon was not found. Use 'list' to see a list of the available dungeons."); - } - } + //No matches! + return new DDCommandResult("Error: The specified dungeon was not found. Use 'dd-list' to see a list of the available dungeons."); } return DDCommandResult.SUCCESS; } - private DungeonData findDungeonByPartialName(String query, Collection dungeons) + private static DungeonData findDungeonByPartialName(String query, Collection dungeons) { //Search for the shortest dungeon name that contains the lowercase query string. String dungeonName; diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateRandomRift.java b/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateRandomRift.java new file mode 100644 index 0000000..013921b --- /dev/null +++ b/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandCreateRandomRift.java @@ -0,0 +1,117 @@ +package StevenDimDoors.mod_pocketDim.commands; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Random; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MathHelper; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import StevenDimDoors.mod_pocketDim.core.DimLink; +import StevenDimDoors.mod_pocketDim.core.LinkTypes; +import StevenDimDoors.mod_pocketDim.core.NewDimData; +import StevenDimDoors.mod_pocketDim.core.PocketManager; +import StevenDimDoors.mod_pocketDim.dungeon.DungeonData; +import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; +import StevenDimDoors.mod_pocketDim.world.PocketBuilder; + +public class CommandCreateRandomRift extends DDCommandBase +{ + private static CommandCreateRandomRift instance = null; + private static Random random = new Random(); + + private CommandCreateRandomRift() + { + super("dd-random", ""); + } + + public static CommandCreateRandomRift instance() + { + if (instance == null) + instance = new CommandCreateRandomRift(); + + return instance; + } + + @Override + protected DDCommandResult processCommand(EntityPlayer sender, String[] command) + { + NewDimData dimension; + DungeonHelper dungeonHelper = DungeonHelper.instance(); + + if (sender.worldObj.isRemote) + { + return DDCommandResult.SUCCESS; + } + if (command.length > 1) + { + return DDCommandResult.TOO_MANY_ARGUMENTS; + } + + DimLink link; + DungeonData result; + int x = MathHelper.floor_double(sender.posX); + int y = MathHelper.floor_double(sender.posY); + int z = MathHelper.floor_double (sender.posZ); + int orientation = MathHelper.floor_double((sender.rotationYaw + 180.0F) * 4.0F / 360.0F - 0.5D) & 3; + + if (command.length == 0) + { + dimension = PocketManager.getDimensionData(sender.worldObj); + link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); + sender.worldObj.setBlock(x, y + 1, z,mod_pocketDim.blockRift.blockID, 0, 3); + sendChat(sender, "Created a rift to a random dungeon."); + } + else + { + result = getRandomDungeonByPartialName(command[0], dungeonHelper.getRegisteredDungeons()); + if (result == null) + { + result = getRandomDungeonByPartialName(command[0], dungeonHelper.getUntaggedDungeons()); + } + //Check if we found any matches + if (result != null) + { + //Create a rift to our selected dungeon and notify the player + dimension = PocketManager.getDimensionData(sender.worldObj); + link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); + PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, result); + sender.worldObj.setBlock(x, y + 1, z, mod_pocketDim.blockRift.blockID, 0, 3); + sendChat(sender, "Created a rift to \"" + result.schematicName() + "\" dungeon (Dimension ID = " + link.destination().getDimension() + ")."); + } + else + { + //No matches! + return new DDCommandResult("Error: The specified dungeon was not found. Use 'list' to see a list of the available dungeons."); + } + } + return DDCommandResult.SUCCESS; + } + + private static DungeonData getRandomDungeonByPartialName(String query, Collection dungeons) + { + // Search for all dungeons that contain the lowercase query string. + String dungeonName; + String normalQuery = query.toLowerCase(); + ArrayList matches = new ArrayList(); + + for (DungeonData dungeon : dungeons) + { + // We need to extract the file's name. Comparing against schematicPath could + // yield false matches if the query string is contained within the path. + dungeonName = dungeon.schematicName().toLowerCase(); + if (dungeonName.contains(normalQuery)) + { + matches.add(dungeon); + } + } + if (matches.isEmpty()) + { + return null; + } + else + { + return matches.get( random.nextInt(matches.size()) ); + } + } +} \ No newline at end of file diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandListDungeons.java b/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandListDungeons.java new file mode 100644 index 0000000..043d0fd --- /dev/null +++ b/src/main/java/StevenDimDoors/mod_pocketDim/commands/CommandListDungeons.java @@ -0,0 +1,74 @@ +package StevenDimDoors.mod_pocketDim.commands; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; + +public class CommandListDungeons extends DDCommandBase +{ + private static CommandListDungeons instance = null; + + private CommandListDungeons() + { + super("dd-list", ""); + } + + public static CommandListDungeons instance() + { + if (instance == null) + instance = new CommandListDungeons(); + + return instance; + } + + @Override + protected DDCommandResult processCommand(EntityPlayer sender, String[] command) + { + int page; + int index; + int limit; + int pageCount; + ArrayList dungeonNames; + + if (sender.worldObj.isRemote) + { + return DDCommandResult.SUCCESS; + } + if (command.length > 1) + { + return DDCommandResult.TOO_MANY_ARGUMENTS; + } + if (command.length == 0) + { + page = 1; + } + else + { + try + { + page = Integer.parseInt(command[0]); + } + catch (NumberFormatException e) + { + return DDCommandResult.INVALID_ARGUMENTS; + } + } + dungeonNames = DungeonHelper.instance().getDungeonNames(); + pageCount = (dungeonNames.size() - 1) / 10 + 1; + if (page < 1 || page > pageCount) + { + return DDCommandResult.INVALID_ARGUMENTS; + } + sendChat(sender, "List of dungeons (page " + page + " of " + pageCount + "):"); + index = (page - 1) * 10; + limit = Math.min(index + 10, dungeonNames.size()); + for (; index < limit; index++) + { + sendChat(sender, dungeonNames.get(index)); + } + sendChat(sender, ""); + + return DDCommandResult.SUCCESS; + } +} \ No newline at end of file diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java b/src/main/java/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java index 56de06a..545168d 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java @@ -577,11 +577,11 @@ public class DungeonHelper return selection; } - public Collection getDungeonNames() { - - //Use a HashSet to guarantee that all dungeon names will be distinct. - //This shouldn't be necessary if we keep proper lists without repetitions, - //but it's a fool-proof workaround. + public ArrayList getDungeonNames() + { + // Use a HashSet to guarantee that all dungeon names will be distinct. + // This shouldn't be necessary if we keep proper lists without repetitions, + // but it's a fool-proof workaround. HashSet dungeonNames = new HashSet(); dungeonNames.addAll( parseDungeonNames(registeredDungeons) ); dungeonNames.addAll( parseDungeonNames(untaggedDungeons) ); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index 1069181..a5f2e8a 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -28,9 +28,11 @@ import StevenDimDoors.mod_pocketDim.blocks.UnstableDoor; import StevenDimDoors.mod_pocketDim.blocks.WarpDoor; import StevenDimDoors.mod_pocketDim.commands.CommandCreateDungeonRift; import StevenDimDoors.mod_pocketDim.commands.CommandCreatePocket; +import StevenDimDoors.mod_pocketDim.commands.CommandCreateRandomRift; import StevenDimDoors.mod_pocketDim.commands.CommandDeleteAllLinks; import StevenDimDoors.mod_pocketDim.commands.CommandDeleteRifts; import StevenDimDoors.mod_pocketDim.commands.CommandExportDungeon; +import StevenDimDoors.mod_pocketDim.commands.CommandListDungeons; import StevenDimDoors.mod_pocketDim.commands.CommandResetDungeons; import StevenDimDoors.mod_pocketDim.commands.CommandTeleportPlayer; import StevenDimDoors.mod_pocketDim.config.DDProperties; @@ -335,6 +337,8 @@ public class mod_pocketDim // Register commands with the server event.registerServerCommand( CommandResetDungeons.instance() ); event.registerServerCommand( CommandCreateDungeonRift.instance() ); + event.registerServerCommand( CommandListDungeons.instance() ); + event.registerServerCommand( CommandCreateRandomRift.instance() ); event.registerServerCommand( CommandDeleteAllLinks.instance() ); //CommandDeleteDimensionData.instance().register(event); event.registerServerCommand( CommandDeleteRifts.instance() );