From cbd0ca5f75eff11db796c7e337dd20be5a98c8e3 Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Sat, 24 Aug 2013 02:21:56 -0700 Subject: [PATCH] Add - repeat command --- .../scripts/commands/CommandRegistry.java | 3 + .../scripts/commands/core/RepeatCommand.java | 71 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/main/java/net/aufdemrand/denizen/scripts/commands/core/RepeatCommand.java diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java index aa1128b8eb..f2ac639add 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java @@ -250,6 +250,9 @@ public void registerCoreMembers() { registerCoreMember(RenameCommand.class, "RENAME", "rename [] []", 1); + registerCoreMember(RepeatCommand.class, + "REPEAT", "repeat [] []", 1); + registerCoreMember(ResetCommand.class, "RESET", "reset [fails/finishes/cooldown] (script:)", 1); diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/RepeatCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/RepeatCommand.java new file mode 100644 index 0000000000..1bdb3187f4 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/RepeatCommand.java @@ -0,0 +1,71 @@ +package net.aufdemrand.denizen.scripts.commands.core; + +import net.aufdemrand.denizen.exceptions.CommandExecutionException; +import net.aufdemrand.denizen.exceptions.InvalidArgumentsException; +import net.aufdemrand.denizen.objects.Element; +import net.aufdemrand.denizen.objects.aH; +import net.aufdemrand.denizen.objects.dList; +import net.aufdemrand.denizen.scripts.ScriptEntry; +import net.aufdemrand.denizen.scripts.commands.BracedCommand; +import net.aufdemrand.denizen.scripts.queues.ScriptQueue; +import net.aufdemrand.denizen.scripts.queues.core.InstantQueue; +import net.aufdemrand.denizen.utilities.debugging.dB; +import net.aufdemrand.denizen.utilities.debugging.dB.Messages; + +import java.util.ArrayList; +import java.util.UUID; + +public class RepeatCommand extends BracedCommand { + + + @Override + public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException { + + for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) { + + if (!scriptEntry.hasObject("qty") + && arg.matchesPrimitive(aH.PrimitiveType.Integer)) + scriptEntry.addObject("qty", arg.asElement()); + + } + + if (!scriptEntry.hasObject("qty")) + throw new InvalidArgumentsException(Messages.ERROR_MISSING_OTHER, "QUANTITY"); + + scriptEntry.addObject("entries", getBracedCommands(scriptEntry)); + + } + + @SuppressWarnings("unchecked") + @Override + public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { + + // Get objects + int qty = ((Element)scriptEntry.getObject("qty")).asInt(); + ArrayList entries = (ArrayList) scriptEntry.getObject("entries"); + + // Report to dB + dB.report(getName(), aH.debugObj("qty", qty) ); + + for (int incr = 0;incr < qty;incr++) { + ArrayList newEntries = (ArrayList) new ArrayList(); + for (ScriptEntry entr: entries) { + try { + ScriptEntry toadd = entr.clone(); + toadd.getObjects().clear(); + newEntries.add(toadd); + } + catch (Throwable e) { + e.printStackTrace(); + } + } + ScriptQueue queue = new InstantQueue(UUID.randomUUID().toString()); + scriptEntry.getResidingQueue().addContext("value", String.valueOf(incr + 1)); + queue.addContext("value", String.valueOf(incr + 1)); + queue.addEntries(newEntries); + queue.start(); + } + + } + +} \ No newline at end of file