diff --git a/src/main/java/dev/adventurecraft/awakening/common/AC_UndoStack.java b/src/main/java/dev/adventurecraft/awakening/common/AC_UndoStack.java index 52fc93b8..17eac559 100644 --- a/src/main/java/dev/adventurecraft/awakening/common/AC_UndoStack.java +++ b/src/main/java/dev/adventurecraft/awakening/common/AC_UndoStack.java @@ -51,6 +51,15 @@ public void stopRecording() { this.isRecording = false; } + public void clear() { + assert !this.isRecording; + + this.undoStack.clear(); + this.redoStack.clear(); + this.undoSelectionStack.clear(); + this.redoSelectionStack.clear(); + } + public boolean isRecording() { return this.isRecording; } diff --git a/src/main/java/dev/adventurecraft/awakening/common/ServerCommands.java b/src/main/java/dev/adventurecraft/awakening/common/ServerCommands.java index eff6fd8d..f6dfe738 100644 --- a/src/main/java/dev/adventurecraft/awakening/common/ServerCommands.java +++ b/src/main/java/dev/adventurecraft/awakening/common/ServerCommands.java @@ -143,6 +143,12 @@ public static void registerCommandsWithArgs( (ctx, name) -> ServerCommands.cmdHelp(ctx, dispatcher, descs, name))); descs.attach(node.getChild("path").getCommand(), "Gets the description of a command node"); } + + // TODO: save/restore for undostacks + dispatcher.register(literal("undostack") + .executes(descs.attach(ServerCommands::cmdUndoStack, "Gets info about the undo stack")) + .then(literal("clear") + .executes(descs.attach(ServerCommands::cmdUndoStackClear, "Clears the undo stack")))); } public static int cmdConfig(CommandContext context) { @@ -557,4 +563,35 @@ public static int cmdHelp( client.overlay.addChatMessage(String.join("\n", lines)); return result; } + + public static int cmdUndoStack(CommandContext context) { + var source = context.getSource(); + var world = source.getWorld(); + if (world instanceof ExWorld exWorld) { + var undoStack = exWorld.getUndoStack(); + + source.getClient().overlay.addChatMessage(String.format( + "Undos left: %d, Redos left: %d", + undoStack.undoStack.size(), + undoStack.redoStack.size())); + return Command.SINGLE_SUCCESS; + } + return 0; + } + + public static int cmdUndoStackClear(CommandContext context) { + var source = context.getSource(); + var world = source.getWorld(); + if (world instanceof ExWorld exWorld) { + var undoStack = exWorld.getUndoStack(); + int undoCount = undoStack.undoStack.size(); + int redoCount = undoStack.redoStack.size(); + undoStack.clear(); + + source.getClient().overlay.addChatMessage(String.format( + "Undos cleared: %d, Redos cleared: %d", undoCount, redoCount)); + return Command.SINGLE_SUCCESS; + } + return 0; + } }