From 61297c3a3aa927604c02649fd34e9bdd53b192a7 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Sun, 16 Jun 2013 05:59:53 -0400 Subject: [PATCH] Improved DungeonHelper Separated exportDungeon() from registerCustomDungeon() - exporting a dungeon no longer automatically registers it. Also changed exportDungeon() so that it returns a boolean indicating success or failure, instead of an instance of DungeonGenerator that was never being used. I modified CommandEndDungeonCreation so that it can warn you if exporting the dungeon failed (if exportDungeon() returned false), and also, to register the dungeon after it's exported since it's no longer automatic. --- .../commands/CommandEndDungeonCreation.java | 30 +++++++++++-------- .../mod_pocketDim/helpers/DungeonHelper.java | 12 ++++---- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/commands/CommandEndDungeonCreation.java b/StevenDimDoors/mod_pocketDim/commands/CommandEndDungeonCreation.java index d17ef4c..584114f 100644 --- a/StevenDimDoors/mod_pocketDim/commands/CommandEndDungeonCreation.java +++ b/StevenDimDoors/mod_pocketDim/commands/CommandEndDungeonCreation.java @@ -1,13 +1,11 @@ package StevenDimDoors.mod_pocketDim.commands; -import java.util.regex.Pattern; +import java.io.File; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import StevenDimDoors.mod_pocketDim.DDProperties; -import StevenDimDoors.mod_pocketDim.DungeonGenerator; -import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; public class CommandEndDungeonCreation extends CommandBase @@ -34,14 +32,14 @@ public class CommandEndDungeonCreation extends CommandBase if (!dungeonHelper.customDungeonStatus.containsKey(player.worldObj.provider.dimensionId)) { - if(var2.length<2) + if (var2.length < 2) { player.sendChatToPlayer("Must have started dungeon creation, use argument OVERRIDE to export anyway"); return; } - else if(!var2[1].contains("OVERRIDE")) + else if (!var2[1].contains("OVERRIDE")) { player.sendChatToPlayer("Must have started dungeon creation, use argument OVERRIDE to export anyway"); return; @@ -63,14 +61,22 @@ public class CommandEndDungeonCreation extends CommandBase //Check that the dungeon name is valid to prevent directory traversal and other forms of abuse if (DungeonHelper.NamePattern.matcher(var2[0]).matches()) { - DungeonGenerator newDungeon = dungeonHelper.exportDungeon(player.worldObj, x, y, z, properties.CustomSchematicDirectory + "/" + var2[0] + ".schematic"); - player.sendChatToPlayer("created dungeon schematic in " + properties.CustomSchematicDirectory + "/" + var2[0]+".schematic"); - - if (dungeonHelper.customDungeonStatus.containsKey(player.worldObj.provider.dimensionId) && !player.worldObj.isRemote) + String exportPath = properties.CustomSchematicDirectory + "/" + var2[0] + ".schematic"; + if (dungeonHelper.exportDungeon(player.worldObj, x, y, z, exportPath)) { - // mod_pocketDim.dungeonHelper.customDungeonStatus.remove(player.worldObj.provider.dimensionId); - // dimHelper.instance.teleportToPocket(player.worldObj, mod_pocketDim.dungeonHelper.customDungeonStatus.get(player.worldObj.provider.dimensionId), player); - + player.sendChatToPlayer("Saved dungeon schematic in " + exportPath); + dungeonHelper.registerCustomDungeon(new File(exportPath)); + + if (dungeonHelper.customDungeonStatus.containsKey(player.worldObj.provider.dimensionId) && !player.worldObj.isRemote) + { + // mod_pocketDim.dungeonHelper.customDungeonStatus.remove(player.worldObj.provider.dimensionId); + // dimHelper.instance.teleportToPocket(player.worldObj, mod_pocketDim.dungeonHelper.customDungeonStatus.get(player.worldObj.provider.dimensionId), player); + + } + } + else + { + player.sendChatToPlayer("Failed to save dungeon schematic!"); } } else diff --git a/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java b/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java index 5f236d1..b05ed70 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java @@ -352,7 +352,7 @@ public class DungeonHelper } } - public DungeonGenerator exportDungeon(World world, int xI, int yI, int zI, String file) + public boolean exportDungeon(World world, int xI, int yI, int zI, String exportPath) { int xMin; int yMin; @@ -366,9 +366,8 @@ public class DungeonHelper yMin=yMax=yI; zMin=zMax=zI; - for(int count=0;count<50;count++) + for (int count = 0; count < 50; count++) { - if(world.getBlockId(xMin, yI, zI)!=properties.PermaFabricBlockID) { xMin--; @@ -492,17 +491,16 @@ public class DungeonHelper CompoundTag schematicTag = new CompoundTag("Schematic", schematic); try { - NBTOutputStream stream = new NBTOutputStream(new FileOutputStream(file)); + NBTOutputStream stream = new NBTOutputStream(new FileOutputStream(exportPath)); stream.writeTag(schematicTag); stream.close(); + return true; } catch(Exception e) { e.printStackTrace(); + return false; } - this.registerCustomDungeon(new File(file)); - - return new DungeonGenerator(0, file, true); } public void generateDungeonlink(LinkData incoming)