From 783c01ab6b366cf6e80c3f5501aa8f649a982a3d Mon Sep 17 00:00:00 2001 From: hsgamer Date: Fri, 28 Jun 2024 23:13:42 +0700 Subject: [PATCH] add ActionScheduler --- .../deluxemenus/action/ActionScheduler.java | 32 +++++++++++++++++++ .../deluxemenus/action/ActionType.java | 14 ++++++-- .../commands/DeluxeMenusCommands.java | 5 ++- .../deluxemenus/config/DeluxeMenusConfig.java | 7 ++-- 4 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/extendedclip/deluxemenus/action/ActionScheduler.java diff --git a/src/main/java/com/extendedclip/deluxemenus/action/ActionScheduler.java b/src/main/java/com/extendedclip/deluxemenus/action/ActionScheduler.java new file mode 100644 index 0000000..fd70bf8 --- /dev/null +++ b/src/main/java/com/extendedclip/deluxemenus/action/ActionScheduler.java @@ -0,0 +1,32 @@ +package com.extendedclip.deluxemenus.action; + +import com.extendedclip.deluxemenus.DeluxeMenus; +import io.github.projectunified.minelib.scheduler.async.AsyncScheduler; +import io.github.projectunified.minelib.scheduler.common.scheduler.Scheduler; +import io.github.projectunified.minelib.scheduler.entity.EntityScheduler; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Function; + +public enum ActionScheduler { + GLOBAL(player -> GlobalScheduler.get(DeluxeMenus.getInstance())), + ASYNC(player -> AsyncScheduler.get(DeluxeMenus.getInstance())), + PLAYER(player -> { + if (player == null) { + throw new IllegalArgumentException("Player cannot be null for player scheduler"); + } + return EntityScheduler.get(DeluxeMenus.getInstance(), player); + }) + ; + private final Function schedulerFunction; + + ActionScheduler(Function schedulerFunction) { + this.schedulerFunction = schedulerFunction; + } + + public Scheduler getScheduler(@Nullable Player player) { + return schedulerFunction.apply(player); + } +} diff --git a/src/main/java/com/extendedclip/deluxemenus/action/ActionType.java b/src/main/java/com/extendedclip/deluxemenus/action/ActionType.java index f843315..dbca2ef 100644 --- a/src/main/java/com/extendedclip/deluxemenus/action/ActionType.java +++ b/src/main/java/com/extendedclip/deluxemenus/action/ActionType.java @@ -11,7 +11,7 @@ public enum ActionType { META("[meta]", "Handle meta for a player", "- '[meta] '"), - CONSOLE("[console]", "Execute a command from the console", + CONSOLE(ActionScheduler.GLOBAL, "[console]", "Execute a command from the console", "- '[console] '"), PLAYER("[player]", "Execute a command for the menu viewer", "- '[player] '"), @@ -52,16 +52,22 @@ public enum ActionType { private static final Map BY_NAME = Arrays.stream(values()) .collect(Collectors.toMap(e -> e.name().toUpperCase(Locale.ROOT), Function.identity())); + private final ActionScheduler scheduler; private final String identifier; private final String description; private final String usage; - ActionType(@NotNull final String identifier, @NotNull final String description, @NotNull final String usage) { + ActionType(@NotNull final ActionScheduler scheduler, @NotNull final String identifier, @NotNull final String description, @NotNull final String usage) { + this.scheduler = scheduler; this.identifier = identifier; this.description = description; this.usage = usage; } + ActionType(@NotNull final String identifier, @NotNull final String description, @NotNull final String usage) { + this(ActionScheduler.PLAYER, identifier, description, usage); + } + /** * Get an {@link ActionType} by its name. * @@ -118,6 +124,10 @@ public static String listAllActionTypes() { return builder.toString(); } + public @NotNull ActionScheduler getScheduler() { + return scheduler; + } + public @NotNull String getIdentifier() { return identifier; } diff --git a/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java b/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java index 5ed8000..fa464e0 100644 --- a/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java +++ b/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java @@ -16,8 +16,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import io.github.projectunified.minelib.scheduler.entity.EntityScheduler; -import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; +import io.github.projectunified.minelib.scheduler.common.scheduler.Scheduler; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextReplacementConfig; @@ -188,7 +187,7 @@ public boolean onCommand( true ); - EntityScheduler scheduler = EntityScheduler.get(plugin, holder.getViewer()); + Scheduler scheduler = action.getType().getScheduler().getScheduler(holder.getViewer()); if (action.hasDelay()) { scheduler.runLater(actionTask, action.getDelay(holder)); diff --git a/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java b/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java index afde68d..89e7837 100644 --- a/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java +++ b/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java @@ -27,9 +27,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; - -import io.github.projectunified.minelib.scheduler.entity.EntityScheduler; -import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; + +import io.github.projectunified.minelib.scheduler.common.scheduler.Scheduler; import com.google.common.base.Enums; import org.bukkit.DyeColor; import org.bukkit.Location; @@ -1505,7 +1504,7 @@ public void onClick(@NotNull final MenuHolder holder) { holder.parsePlaceholdersAfterArguments() ); - EntityScheduler scheduler = EntityScheduler.get(plugin, holder.getViewer()); + Scheduler scheduler = action.getType().getScheduler().getScheduler(holder.getViewer()); if (action.hasDelay()) { scheduler.runLater(actionTask, action.getDelay(holder));