From 17c911812627ac7463d95903420630417cab7631 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Mon, 17 Jun 2013 06:18:15 -0400 Subject: [PATCH] Fixed Dungeon Listing and Formatting Bugs Added a workaround so that the dungeon list produced by CommandAddDungeonRift does not have repeated names. Also cleaned up the code a bit - it's a mess in there. Part of the rewrite eliminated the bug that caused some dungeon names to be preceded by a backslash (or slash). I've noticed a different bug now - the dungeon tutorial file is being included in the list of dungeons. I'll be fixing that in the next commit. --- .../commands/CommandAddDungeonRift.java | 50 ++++--------------- .../mod_pocketDim/helpers/DungeonHelper.java | 27 ++++++++++ 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/commands/CommandAddDungeonRift.java b/StevenDimDoors/mod_pocketDim/commands/CommandAddDungeonRift.java index 517f780..e26b822 100644 --- a/StevenDimDoors/mod_pocketDim/commands/CommandAddDungeonRift.java +++ b/StevenDimDoors/mod_pocketDim/commands/CommandAddDungeonRift.java @@ -1,20 +1,14 @@ package StevenDimDoors.mod_pocketDim.commands; -import java.util.ArrayList; +import java.util.Collection; -import cpw.mods.fml.common.FMLCommonHandler; - -import StevenDimDoors.mod_pocketDim.DimData; -import StevenDimDoors.mod_pocketDim.DungeonGenerator; -import StevenDimDoors.mod_pocketDim.LinkData; -import StevenDimDoors.mod_pocketDim.mod_pocketDim; -import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; -import StevenDimDoors.mod_pocketDim.helpers.dimHelper; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.util.MathHelper; -import net.minecraft.world.MinecraftException; -import net.minecraft.world.World; +import StevenDimDoors.mod_pocketDim.DungeonGenerator; +import StevenDimDoors.mod_pocketDim.LinkData; +import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; +import StevenDimDoors.mod_pocketDim.helpers.dimHelper; public class CommandAddDungeonRift extends CommandBase { @@ -54,39 +48,13 @@ public class CommandAddDungeonRift extends CommandBase link = dimHelper.instance.createPocket(link,true, true); } - else if(var2.length!=0&&var2[0].equals("list")) + else if (var2.length != 0 && var2[0].equals("list")) { - for(DungeonGenerator dungeonGen : dungeonHelper.registeredDungeons) + Collection dungeonNames = dungeonHelper.getDungeonNames(); + for (String name : dungeonNames) { - String dungeonName =dungeonGen.schematicPath; - if(dungeonName.contains("DimDoors_Custom_schematics")) - { - dungeonName= dungeonName.substring(dungeonName.indexOf("DimDoors_Custom_schematics")+26); - } - - dungeonName =dungeonName.replace("/", "").replace(".", "").replace("schematics", "").replace("schematic", ""); - - - this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName); - + getCommandSenderAsPlayer(var1).sendChatToPlayer(name); } - - for(DungeonGenerator dungeonGen : dungeonHelper.customDungeons) - { - String dungeonName =dungeonGen.schematicPath; - if(dungeonName.contains("DimDoors_Custom_schematics")) - { - dungeonName= dungeonName.substring(dungeonName.indexOf("DimDoors_Custom_schematics")+26); - } - - dungeonName =dungeonName.replace("/", "").replace(".", "").replace("schematics", "").replace("schematic", ""); - - - this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName); - - } - - } else if(var2.length!=0) diff --git a/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java b/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java index 98f80d1..ea8074b 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java @@ -3,6 +3,7 @@ package StevenDimDoors.mod_pocketDim.helpers; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Random; @@ -657,4 +658,30 @@ public class DungeonHelper } dimHelper.dimList.get(incoming.destDimID).dungeonGenerator = dungeon; } + + 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. + HashSet dungeonNames = new HashSet(); + dungeonNames.addAll( parseDungeonNames(registeredDungeons) ); + dungeonNames.addAll( parseDungeonNames(customDungeons) ); + return dungeonNames; + } + + private static ArrayList parseDungeonNames(ArrayList dungeons) + { + String name; + File schematic; + ArrayList names = new ArrayList(dungeons.size()); + + for (DungeonGenerator dungeon : dungeons) + { + schematic = new File(dungeon.schematicPath); + name = schematic.getName(); + name = name.substring(0, name.length() - SCHEMATIC_FILE_EXTENSION.length()); + names.add(name); + } + return names; + } } \ No newline at end of file