diff --git a/build.gradle.kts b/build.gradle.kts index 46b52127..aac3f127 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -40,6 +40,10 @@ dependencies { implementation(libs.nashorn) implementation(libs.adventure.platform) implementation(libs.adventure.minimessage) + implementation(libs.minelib.scheduler.global) + implementation(libs.minelib.scheduler.async) + implementation(libs.minelib.scheduler.entity) + implementation(libs.minelib.scheduler.canceller) compileOnly("org.jetbrains:annotations:23.0.0") } @@ -49,6 +53,7 @@ tasks { relocate("org.objectweb.asm", "com.extendedclip.deluxemenus.libs.asm") relocate("org.openjdk.nashorn", "com.extendedclip.deluxemenus.libs.nashorn") relocate("net.kyori", "com.extendedclip.deluxemenus.libs.adventure") + relocate("io.github.projectunified.minelib", "com.extendedclip.deluxemenus.libs.minelib") archiveFileName.set("DeluxeMenus-${rootProject.version}.jar") } java { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 624deb8c..d2c462c6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,6 +15,7 @@ score = "4.24.3.5" nashorn = "15.6" adventure-platform = "4.3.4" adventure-minimessage = "4.18.0" +minelib = "1.2.1" [libraries] # Compile only @@ -33,3 +34,7 @@ score = { module = "com.github.Ssomar-Developement:SCore", version.ref = "score" nashorn = { module = "org.openjdk.nashorn:nashorn-core", version.ref = "nashorn" } adventure-platform = { module = "net.kyori:adventure-platform-bukkit", version.ref = "adventure-platform" } adventure-minimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure-minimessage" } +minelib-scheduler-global = { module = "io.github.projectunified:minelib-scheduler-global", version.ref = "minelib" } +minelib-scheduler-async = { module = "io.github.projectunified:minelib-scheduler-async", version.ref = "minelib" } +minelib-scheduler-entity = { module = "io.github.projectunified:minelib-scheduler-entity", version.ref = "minelib" } +minelib-scheduler-canceller = { module = "io.github.projectunified:minelib-scheduler-canceller", version.ref = "minelib" } diff --git a/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java b/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java index 44eda4e8..43bfdadb 100644 --- a/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java +++ b/src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java @@ -6,17 +6,7 @@ import com.extendedclip.deluxemenus.config.GeneralConfig; import com.extendedclip.deluxemenus.dupe.DupeFixer; import com.extendedclip.deluxemenus.dupe.MenuItemMarker; -import com.extendedclip.deluxemenus.hooks.BaseHeadHook; -import com.extendedclip.deluxemenus.hooks.ExecutableBlocksHook; -import com.extendedclip.deluxemenus.hooks.ExecutableItemsHook; -import com.extendedclip.deluxemenus.hooks.HeadDatabaseHook; -import com.extendedclip.deluxemenus.hooks.ItemHook; -import com.extendedclip.deluxemenus.hooks.ItemsAdderHook; -import com.extendedclip.deluxemenus.hooks.MMOItemsHook; -import com.extendedclip.deluxemenus.hooks.NamedHeadHook; -import com.extendedclip.deluxemenus.hooks.OraxenHook; -import com.extendedclip.deluxemenus.hooks.TextureHeadHook; -import com.extendedclip.deluxemenus.hooks.VaultHook; +import com.extendedclip.deluxemenus.hooks.*; import com.extendedclip.deluxemenus.listener.PlayerListener; import com.extendedclip.deluxemenus.menu.Menu; import com.extendedclip.deluxemenus.menu.options.HeadType; @@ -30,6 +20,7 @@ import com.extendedclip.deluxemenus.utils.VersionHelper; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; +import io.github.projectunified.minelib.scheduler.canceller.TaskCanceller; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; @@ -41,11 +32,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.function.Function; import java.util.logging.Level; import java.util.stream.Collectors; @@ -56,21 +43,23 @@ public class DeluxeMenus extends JavaPlugin { private static final DebugLevel STACKTRACE_PRINT_LEVEL = DebugLevel.MEDIUM; + private static DeluxeMenus instance; + private final GeneralConfig generalConfig = new GeneralConfig(this); private PersistentMetaHandler persistentMetaHandler; private MenuItemMarker menuItemMarker; - private BukkitAudiences audiences; - private VaultHook vaultHook; - private ItemStack head; private Map itemHooks; - - private final GeneralConfig generalConfig = new GeneralConfig(this); private DeluxeMenusConfig menuConfig; + public static DeluxeMenus getInstance() { + return instance; + } + @Override public void onLoad() { + instance = this; if (NbtProvider.isAvailable()) { this.debug(DebugLevel.HIGHEST, Level.INFO, "NMS hook has been setup successfully!"); return; @@ -119,7 +108,7 @@ public void onEnable() { public void onDisable() { Bukkit.getMessenger().unregisterOutgoingPluginChannel(this, "BungeeCord"); - Bukkit.getScheduler().cancelTasks(this); + TaskCanceller.get(this).cancelAll(); if (this.audiences != null) { this.audiences.close(); 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 00000000..fd70bf83 --- /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 f8433157..dbca2efb 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/action/ClickActionTask.java b/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java index ad2eb90e..87e68a42 100644 --- a/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java +++ b/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java @@ -3,29 +3,19 @@ import com.extendedclip.deluxemenus.DeluxeMenus; import com.extendedclip.deluxemenus.menu.Menu; import com.extendedclip.deluxemenus.menu.MenuHolder; -import com.extendedclip.deluxemenus.utils.AdventureUtils; -import com.extendedclip.deluxemenus.utils.DebugLevel; -import com.extendedclip.deluxemenus.utils.ExpUtils; -import com.extendedclip.deluxemenus.utils.SoundUtils; -import com.extendedclip.deluxemenus.utils.StringUtils; -import com.extendedclip.deluxemenus.utils.VersionHelper; +import com.extendedclip.deluxemenus.utils.*; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.logging.Level; -public class ClickActionTask extends BukkitRunnable { +public class ClickActionTask implements Runnable { private final DeluxeMenus plugin; private final UUID uuid; @@ -439,4 +429,13 @@ public void run() { break; } } -} \ No newline at end of file + + public void runTaskLater(DeluxeMenus plugin, long delay) { + GlobalScheduler.get(plugin).runLater(this, delay); + } + + public void runTask(DeluxeMenus plugin) { + GlobalScheduler.get(plugin).run(this); + } + +} diff --git a/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java b/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java index e2bdfa6c..22b7e6bf 100644 --- a/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java +++ b/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java @@ -32,6 +32,19 @@ import com.extendedclip.deluxemenus.utils.ItemUtils; import com.extendedclip.deluxemenus.utils.LocationUtils; import com.extendedclip.deluxemenus.utils.VersionHelper; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.function.BiConsumer; +import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import io.github.projectunified.minelib.scheduler.common.scheduler.Scheduler; import com.google.common.base.Enums; import com.google.common.primitives.Ints; import org.bukkit.DyeColor; @@ -1202,12 +1215,14 @@ public void onClick(@NotNull final MenuHolder holder) { final ClickActionTask actionTask = new ClickActionTask(plugin, holder.getViewer().getUniqueId(), action.getType(), action.getExecutable(), holder.getTypedArgs(), holder.parsePlaceholdersInArguments(), holder.parsePlaceholdersAfterArguments()); + Scheduler scheduler = action.getType().getScheduler().getScheduler(holder.getViewer()); + if (action.hasDelay()) { - actionTask.runTaskLater(plugin, action.getDelay(holder)); + scheduler.runLater(actionTask, action.getDelay(holder)); continue; } - actionTask.runTask(plugin); + scheduler.run(actionTask); } } }; diff --git a/src/main/java/com/extendedclip/deluxemenus/dupe/DupeFixer.java b/src/main/java/com/extendedclip/deluxemenus/dupe/DupeFixer.java index 5a425110..0d2c7155 100644 --- a/src/main/java/com/extendedclip/deluxemenus/dupe/DupeFixer.java +++ b/src/main/java/com/extendedclip/deluxemenus/dupe/DupeFixer.java @@ -3,6 +3,7 @@ import com.extendedclip.deluxemenus.DeluxeMenus; import com.extendedclip.deluxemenus.listener.Listener; import com.extendedclip.deluxemenus.utils.DebugLevel; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -55,8 +56,7 @@ private void onDrop(@NotNull final PlayerDropItemEvent event) { @EventHandler private void onLogin(@NotNull final PlayerLoginEvent event) { - plugin.getServer().getScheduler().runTaskLater( - plugin, + GlobalScheduler.get(plugin).runLater( () -> { for (final ItemStack itemStack : event.getPlayer().getInventory().getContents()) { if (itemStack == null) continue; diff --git a/src/main/java/com/extendedclip/deluxemenus/hooks/MMOItemsHook.java b/src/main/java/com/extendedclip/deluxemenus/hooks/MMOItemsHook.java index cd21397c..0d856b92 100644 --- a/src/main/java/com/extendedclip/deluxemenus/hooks/MMOItemsHook.java +++ b/src/main/java/com/extendedclip/deluxemenus/hooks/MMOItemsHook.java @@ -4,13 +4,14 @@ import com.extendedclip.deluxemenus.cache.SimpleCache; import com.extendedclip.deluxemenus.utils.DebugLevel; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.logging.Level; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.Type; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -47,17 +48,19 @@ public ItemStack getItem(@NotNull final String... arguments) { ItemStack mmoItem = null; try { - mmoItem = Bukkit.getScheduler().callSyncMethod(plugin, () -> { + CompletableFuture future = new CompletableFuture<>(); + GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> { ItemStack item = MMOItems.plugin.getItem(itemType, splitArgs[1]); if (item == null) { - return new ItemStack(Material.STONE, 1); + future.complete(new ItemStack(Material.STONE, 1)); + return; } cache.put(arguments[0], item); - - return item; - }).get(); + future.complete(item); + }); + mmoItem = future.get(); } catch (InterruptedException | ExecutionException e) { plugin.debug(DebugLevel.HIGHEST, Level.SEVERE, "Error getting MMOItem synchronously."); } diff --git a/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java b/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java index af69231b..04c503a3 100644 --- a/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java +++ b/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java @@ -8,7 +8,7 @@ import com.extendedclip.deluxemenus.requirement.RequirementList; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.bukkit.Bukkit; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -93,7 +93,7 @@ public void onClose(InventoryCloseEvent event) { if (Menu.isInMenu(player)) { Menu.closeMenu(plugin, player, false); - Bukkit.getScheduler().runTaskLater(plugin, () -> { + GlobalScheduler.get(plugin).runLater(() -> { Menu.cleanInventory(plugin, player); player.updateInventory(); }, 3L); diff --git a/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java b/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java index 23d776e2..300bbf7e 100644 --- a/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java +++ b/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java @@ -11,6 +11,9 @@ import java.util.Map.Entry; import java.util.logging.Level; +import io.github.projectunified.minelib.scheduler.async.AsyncScheduler; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; +import me.clip.placeholderapi.util.Msg; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; @@ -190,7 +193,7 @@ public static void closeMenu(final @NotNull DeluxeMenus plugin, final @NotNull P } if (close) { - Bukkit.getScheduler().runTask(plugin, () -> { + GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> { player.closeInventory(); cleanInventory(plugin, player); }); @@ -280,7 +283,7 @@ public void openMenu(final @NotNull Player viewer, final @Nullable Map { + AsyncScheduler.get(DeluxeMenus.getInstance()).run(() -> { Set activeItems = new HashSet<>(); @@ -369,7 +372,7 @@ public void openMenu(final @NotNull Player viewer, final @Nullable Map { + GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> { if (isInMenu(holder.getViewer())) { closeMenu(plugin, holder.getViewer(), false); } diff --git a/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java b/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java index 06bb1f70..2d656f8e 100644 --- a/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java +++ b/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java @@ -3,13 +3,14 @@ import com.extendedclip.deluxemenus.DeluxeMenus; import com.extendedclip.deluxemenus.menu.options.MenuOptions; import com.extendedclip.deluxemenus.utils.StringUtils; -import org.bukkit.Bukkit; +import io.github.projectunified.minelib.scheduler.async.AsyncScheduler; +import io.github.projectunified.minelib.scheduler.common.task.Task; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; @@ -29,7 +30,7 @@ public class MenuHolder implements InventoryHolder { private Player placeholderPlayer; private String menuName; private Set activeItems; - private BukkitTask updateTask = null; + private Task updateTask = null; private Inventory inventory; private boolean updating; private boolean parsePlaceholdersInArguments; @@ -54,7 +55,7 @@ public String getViewerName() { return viewer.getName(); } - public BukkitTask getUpdateTask() { + public Task getUpdateTask() { return updateTask; } @@ -139,7 +140,7 @@ public void refreshMenu() { stopPlaceholderUpdate(); - Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { + AsyncScheduler.get(DeluxeMenus.getInstance()).run(() -> { final Set active = new HashSet<>(); @@ -177,7 +178,7 @@ public void refreshMenu() { Menu.closeMenu(plugin, getViewer(), true); } - Bukkit.getScheduler().runTask(plugin, () -> { + GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> { boolean update = false; @@ -225,7 +226,7 @@ public void startUpdatePlaceholdersTask() { stopPlaceholderUpdate(); } - updateTask = new BukkitRunnable() { + updateTask = AsyncScheduler.get(DeluxeMenus.getInstance()).runTimer(new Runnable() { @Override public void run() { @@ -290,7 +291,7 @@ public void run() { } } - }.runTaskTimerAsynchronously(plugin, 20L, + }, 20L, 20L * Menu.getMenuByName(menuName) .map(Menu::options) .map(MenuOptions::updateInterval) diff --git a/src/main/java/com/extendedclip/deluxemenus/metrics/Metrics.java b/src/main/java/com/extendedclip/deluxemenus/metrics/Metrics.java index db9522cd..bca3824e 100644 --- a/src/main/java/com/extendedclip/deluxemenus/metrics/Metrics.java +++ b/src/main/java/com/extendedclip/deluxemenus/metrics/Metrics.java @@ -27,6 +27,8 @@ import java.util.stream.Collectors; import java.util.zip.GZIPOutputStream; import javax.net.ssl.HttpsURLConnection; + +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -87,7 +89,7 @@ public Metrics(JavaPlugin plugin, int serviceId) { enabled, this::appendPlatformData, this::appendServiceData, - submitDataTask -> Bukkit.getScheduler().runTask(plugin, submitDataTask), + submitDataTask -> GlobalScheduler.get(plugin).run(submitDataTask), plugin::isEnabled, (message, error) -> this.plugin.getLogger().log(Level.WARNING, message, error), (message) -> this.plugin.getLogger().log(Level.INFO, message), diff --git a/src/main/java/com/extendedclip/deluxemenus/updatechecker/UpdateChecker.java b/src/main/java/com/extendedclip/deluxemenus/updatechecker/UpdateChecker.java index e30fe77b..30dfdc2e 100644 --- a/src/main/java/com/extendedclip/deluxemenus/updatechecker/UpdateChecker.java +++ b/src/main/java/com/extendedclip/deluxemenus/updatechecker/UpdateChecker.java @@ -10,12 +10,14 @@ import java.net.URL; import java.util.logging.Level; import java.util.regex.Pattern; + +import io.github.projectunified.minelib.scheduler.async.AsyncScheduler; +import io.github.projectunified.minelib.scheduler.global.GlobalScheduler; import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; public class UpdateChecker extends Listener { @@ -32,21 +34,11 @@ public class UpdateChecker extends Listener { public UpdateChecker(final @NotNull DeluxeMenus instance) { super(instance); - new BukkitRunnable() { - @Override - public void run() { - if (check()) { - new BukkitRunnable() { - - @Override - public void run() { - register(); - } - }.runTask(plugin); - } + AsyncScheduler.get(plugin).run(() -> { + if (check()) { + GlobalScheduler.get(plugin).run(this::register); } - - }.runTaskAsynchronously(plugin); + }); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ccf974d3..e117c9f7 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,6 +5,7 @@ version: ${version} authors: [ HelpChat ] softdepend: [ PlaceholderAPI, Vault, HeadDatabase, ItemsAdder, Oraxen, ExecutableItems, ExecutableBlocks, Score ] description: All in one inventory menu system +folia-supported: true commands: deluxemenus: description: DeluxeMenus main commands