From 7088fadab8ad28497f62334671436b828e8f28d2 Mon Sep 17 00:00:00 2001 From: sk89q Date: Fri, 18 Feb 2011 21:19:54 -0800 Subject: [PATCH] Added multiple undo/redo, fixed compile error. --- plugin.yml | 4 +- .../worldedit/bukkit/WorldEditPlugin.java | 6 +-- .../worldedit/commands/HistoryCommands.java | 43 +++++++++++-------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/plugin.yml b/plugin.yml index f5c1929d4..b2ae73e93 100644 --- a/plugin.yml +++ b/plugin.yml @@ -80,10 +80,10 @@ commands: usage: / /redo: description: Redoes the last action (from history) - usage: / + usage: / [times] /undo: description: Undoes the last action - usage: / + usage: / [times] unstuck: description: Escape from being stuck inside a block usage: / diff --git a/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index 68f13d35a..08dd8b8df 100644 --- a/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -47,9 +47,9 @@ import com.sk89q.worldedit.regions.Region; public class WorldEditPlugin extends JavaPlugin { private static final Logger logger = Logger.getLogger("Minecraft.WorldEdit"); - private final ServerInterface server; - private final WorldEdit controller; - private final WorldEditAPI api; + final ServerInterface server; + final WorldEdit controller; + final WorldEditAPI api; private final LocalConfiguration config; private final PermissionsResolverManager perms; diff --git a/src/com/sk89q/worldedit/commands/HistoryCommands.java b/src/com/sk89q/worldedit/commands/HistoryCommands.java index 06c338219..02f5d3eeb 100644 --- a/src/com/sk89q/worldedit/commands/HistoryCommands.java +++ b/src/com/sk89q/worldedit/commands/HistoryCommands.java @@ -32,43 +32,52 @@ import com.sk89q.worldedit.*; public class HistoryCommands { @Command( aliases = {"/undo"}, - usage = "", + usage = "[times]", desc = "Undoes the last action", min = 0, - max = 0 + max = 1 ) @CommandPermissions({"worldedit.history.undo"}) public static void undo(CommandContext args, WorldEdit we, LocalSession session, LocalPlayer player, EditSession editSession) throws WorldEditException { - EditSession undone = session.undo(session.getBlockBag(player)); - if (undone != null) { - player.print("Undo successful."); - we.flushBlockBag(player, undone); - } else { - player.printError("Nothing to undo."); + int times = Math.max(1, args.getInteger(0, 1)); + + for (int i = 0; i < times; i++) { + EditSession undone = session.undo(session.getBlockBag(player)); + if (undone != null) { + player.print("Undo successful."); + we.flushBlockBag(player, undone); + } else { + player.printError("Nothing left to undo."); + break; + } } } @Command( aliases = {"/redo"}, - usage = "", + usage = "[times]", desc = "Redoes the last action (from history)", min = 0, - max = 0 + max = 1 ) @CommandPermissions({"worldedit.history.redo"}) public static void redo(CommandContext args, WorldEdit we, LocalSession session, LocalPlayer player, EditSession editSession) throws WorldEditException { - - EditSession redone = session.redo(session.getBlockBag(player)); - if (redone != null) { - player.print("Redo successful."); - we.flushBlockBag(player, redone); - } else { - player.printError("Nothing to redo."); + + int times = Math.max(1, args.getInteger(0, 1)); + + for (int i = 0; i < times; i++) { + EditSession redone = session.redo(session.getBlockBag(player)); + if (redone != null) { + player.print("Redo successful."); + we.flushBlockBag(player, redone); + } else { + player.printError("Nothing left to redo."); + } } }