diff --git a/api/src/main/java/de/oliver/fancynpcs/api/actions/types/WaitAction.java b/api/src/main/java/de/oliver/fancynpcs/api/actions/types/WaitAction.java index 2caab984..57558eac 100644 --- a/api/src/main/java/de/oliver/fancynpcs/api/actions/types/WaitAction.java +++ b/api/src/main/java/de/oliver/fancynpcs/api/actions/types/WaitAction.java @@ -22,16 +22,16 @@ public void execute(@NotNull ActionExecutionContext context, String value) { return; } - int time; + long time; try { - time = Integer.parseInt(value); + time = Long.parseLong(value); } catch (NumberFormatException e) { FancyNpcsPlugin.get().getFancyLogger().warn("Invalid time value for wait action: " + value); return; } try { - Thread.sleep(time * 1000L); + Thread.sleep(time); } catch (InterruptedException e) { FancyNpcsPlugin.get().getFancyLogger().warn("Thread was interrupted while waiting"); } diff --git a/src/main/java/de/oliver/fancynpcs/commands/npc/ActionCMD.java b/src/main/java/de/oliver/fancynpcs/commands/npc/ActionCMD.java index 9a9dc5d6..8b802541 100644 --- a/src/main/java/de/oliver/fancynpcs/commands/npc/ActionCMD.java +++ b/src/main/java/de/oliver/fancynpcs/commands/npc/ActionCMD.java @@ -5,6 +5,7 @@ import de.oliver.fancynpcs.api.Npc; import de.oliver.fancynpcs.api.actions.ActionTrigger; import de.oliver.fancynpcs.api.actions.NpcAction; +import de.oliver.fancynpcs.api.actions.types.WaitAction; import org.bukkit.command.CommandSender; import org.incendo.cloud.annotation.specifier.Greedy; import org.incendo.cloud.annotations.Argument; @@ -14,6 +15,7 @@ import org.incendo.cloud.context.CommandContext; import org.incendo.cloud.context.CommandInput; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -51,6 +53,23 @@ public void onActionAdd( .send(sender); } + @Command("npc action add wait ") + @Permission("fancynpcs.command.npc.action.add") + public void onActionAddWait( + final @NotNull CommandSender sender, + final @NotNull Npc npc, + final @NotNull ActionTrigger trigger, + final @NotNull Duration duration + ) { + List currentActions = npc.getData().getActions().getOrDefault(trigger, new ArrayList<>()); + + npc.getData().addAction(trigger, currentActions.size() + 1, new WaitAction(), String.valueOf(duration.toMillis())); + translator + .translate("npc_action_add_success") + .replaceStripped("total", String.valueOf(npc.getData().getActions(trigger).size())) + .send(sender); + } + @Command("npc action add_before [value]") @Permission("fancynpcs.command.npc.action.addBefore") public void onActionAddBefore( @@ -79,6 +98,27 @@ public void onActionAddBefore( .send(sender); } + @Command("npc action add_before wait ") + @Permission("fancynpcs.command.npc.action.addBefore") + public void onActionAddBeforeWait( + final @NotNull CommandSender sender, + final @NotNull Npc npc, + final @NotNull ActionTrigger trigger, + final @Argument(suggestions = "ActionCMD/number_range") int index, + final @NotNull Duration duration + ) { + + List currentActions = npc.getData().getActions(trigger); + currentActions.add(Math.clamp(index - 1, 0, currentActions.size()), new NpcAction.NpcActionData(index, new WaitAction(), String.valueOf(duration.toMillis()))); + + npc.getData().setActions(trigger, reorderActions(currentActions)); + translator + .translate("npc_action_add_before_success") + .replaceStripped("number", String.valueOf(index)) + .replaceStripped("total", String.valueOf(npc.getData().getActions(trigger).size())) + .send(sender); + } + @Command("npc action add_after [value]") @Permission("fancynpcs.command.npc.action.addAfter") public void onActionAddAfter( @@ -107,6 +147,26 @@ public void onActionAddAfter( .send(sender); } + @Command("npc action add_after wait ") + @Permission("fancynpcs.command.npc.action.addAfter") + public void onActionAddAfterWait( + final @NotNull CommandSender sender, + final @NotNull Npc npc, + final @NotNull ActionTrigger trigger, + final @Argument(suggestions = "ActionCMD/number_range") int index, + final @NotNull Duration duration + ) { + List currentActions = npc.getData().getActions(trigger); + currentActions.add(Math.clamp(index, 0, currentActions.size() + 1), new NpcAction.NpcActionData(index, new WaitAction(), String.valueOf(duration.toMillis()))); + + npc.getData().setActions(trigger, reorderActions(currentActions)); + translator + .translate("npc_action_add_after_success") + .replaceStripped("number", String.valueOf(index)) + .replaceStripped("total", String.valueOf(npc.getData().getActions(trigger).size())) + .send(sender); + } + @Command("npc action set [value]") @Permission("fancynpcs.command.npc.action.set") public void onActionSet( @@ -142,6 +202,33 @@ public void onActionSet( .send(sender); } + @Command("npc action set wait ") + @Permission("fancynpcs.command.npc.action.set") + public void onActionSetWait( + final @NotNull CommandSender sender, + final @NotNull Npc npc, + final @NotNull ActionTrigger trigger, + final @NotNull @Argument(suggestions = "ActionCMD/number_range") Integer number, + final @NotNull Duration duration + ) { + List currentActions = npc.getData().getActions(trigger); + if (number < 1 || number > currentActions.size()) { + translator + .translate("npc_action_set_failure") + .replaceStripped("number", String.valueOf(number)) + .send(sender); + return; + } + + currentActions.set(number - 1, new NpcAction.NpcActionData(number, new WaitAction(), String.valueOf(duration.toMillis()))); + npc.getData().setActions(trigger, currentActions); + translator + .translate("npc_action_set_success") + .replaceStripped("number", String.valueOf(number)) + .replaceStripped("total", String.valueOf(npc.getData().getActions(trigger).size())) + .send(sender); + } + @Command("npc action remove ") @Permission("fancynpcs.command.npc.action.remove") public void onActionRemove(