diff --git a/src/com/sk89q/worldedit/LocalConfiguration.java b/src/com/sk89q/worldedit/LocalConfiguration.java index 1a4c124f0..10c80b989 100644 --- a/src/com/sk89q/worldedit/LocalConfiguration.java +++ b/src/com/sk89q/worldedit/LocalConfiguration.java @@ -57,6 +57,8 @@ public abstract class LocalConfiguration { public int navigationWand = 345; public int navigationWandMaxDistance = 50; public int scriptTimeout = 3000; + public String saveDir = "schematics"; + public String scriptsDir = "craftscripts"; /** * Loads the configuration. diff --git a/src/com/sk89q/worldedit/WorldEdit.java b/src/com/sk89q/worldedit/WorldEdit.java index d706053e3..3809d69a3 100644 --- a/src/com/sk89q/worldedit/WorldEdit.java +++ b/src/com/sk89q/worldedit/WorldEdit.java @@ -342,6 +342,22 @@ public class WorldEdit { throw new MaxRadiusException(); } } + + /** + * Get a file relative to the defined working directory. If the specified + * path is absolute, then the working directory is not used. + * + * @param path + * @return + */ + public File getWorkingDirectoryFile(String path) { + File f = new File(path); + if (f.isAbsolute()) { + return f; + } else { + return new File(config.getWorkingDirectory(), path); + } + } /** * Modulus, divisor-style. @@ -757,7 +773,7 @@ public class WorldEdit { */ public void runScript(LocalPlayer player, String filename, String[] args) throws WorldEditException { - File dir = new File(config.getWorkingDirectory(), "craftscripts"); + File dir = getWorkingDirectoryFile(config.scriptsDir); File f = new File(dir, filename); if (!filename.matches("^[A-Za-z0-9_\\- \\./\\\\'\\$@~!%\\^\\*\\(\\)\\[\\]\\+\\{\\},\\?]+\\.[A-Za-z0-9]+$")) { diff --git a/src/com/sk89q/worldedit/bukkit/BukkitConfiguration.java b/src/com/sk89q/worldedit/bukkit/BukkitConfiguration.java index 2a2b9fd43..ffd9efe6c 100644 --- a/src/com/sk89q/worldedit/bukkit/BukkitConfiguration.java +++ b/src/com/sk89q/worldedit/bukkit/BukkitConfiguration.java @@ -66,6 +66,9 @@ public class BukkitConfiguration extends LocalConfiguration { navigationWandMaxDistance = config.getInt("navigation-wand.max-distance", navigationWandMaxDistance); scriptTimeout = config.getInt("scripting.timeout", scriptTimeout); + scriptsDir = config.getString("scripting.dir", scriptsDir); + + saveDir = config.getString("saving.dir", saveDir); disallowedBlocks = new HashSet(config.getIntList("limits.disallowed-blocks", null)); diff --git a/src/com/sk89q/worldedit/commands/ClipboardCommands.java b/src/com/sk89q/worldedit/commands/ClipboardCommands.java index 76f680ea8..21efd19a1 100644 --- a/src/com/sk89q/worldedit/commands/ClipboardCommands.java +++ b/src/com/sk89q/worldedit/commands/ClipboardCommands.java @@ -181,8 +181,8 @@ public class ClipboardCommands { LocalConfiguration config = we.getConfiguration(); String filename = args.getString(0).replace("\0", "") + ".schematic"; - File dir = new File(config.getWorkingDirectory(), "schematics"); - File f = new File(new File(config.getWorkingDirectory(), "schematics"), filename); + File dir = we.getWorkingDirectoryFile(config.saveDir); + File f = new File(dir, filename); if (!filename.matches("^[A-Za-z0-9_\\- \\./\\\\'\\$@~!%\\^\\*\\(\\)\\[\\]\\+\\{\\},\\?]+$")) { player.printError("Valid characters: A-Z, a-z, 0-9, spaces, " @@ -230,8 +230,8 @@ public class ClipboardCommands { return; } - File dir = new File(config.getWorkingDirectory(), "schematics"); - File f = new File(new File(config.getWorkingDirectory(), "schematics"), filename); + File dir = we.getWorkingDirectoryFile(config.saveDir); + File f = new File(dir, filename); if (!dir.exists()) { if (!dir.mkdir()) {