From 6716f5bbf83f020fe3cbfb5940af6e8d8b8749d7 Mon Sep 17 00:00:00 2001 From: Sky Date: Sat, 3 Aug 2024 20:44:41 +0200 Subject: [PATCH] :bug: Fixed slash command execution on Minecraft 1.21+ --- .../structures/slash/SlashManager.java | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/main/java/info/itsthesky/disky/elements/structures/slash/SlashManager.java b/src/main/java/info/itsthesky/disky/elements/structures/slash/SlashManager.java index 03d11ed..f686be7 100644 --- a/src/main/java/info/itsthesky/disky/elements/structures/slash/SlashManager.java +++ b/src/main/java/info/itsthesky/disky/elements/structures/slash/SlashManager.java @@ -3,6 +3,7 @@ import ch.njol.skript.lang.Trigger; import info.itsthesky.disky.DiSky; import info.itsthesky.disky.core.Bot; +import info.itsthesky.disky.core.SkriptUtils; import info.itsthesky.disky.elements.events.interactions.SlashCommandReceiveEvent; import info.itsthesky.disky.elements.events.interactions.SlashCompletionEvent; import info.itsthesky.disky.elements.structures.slash.elements.OnCooldownEvent; @@ -22,6 +23,7 @@ import net.dv8tion.jda.api.interactions.commands.build.OptionData; import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData; import net.dv8tion.jda.api.requests.RestAction; +import org.bukkit.Bukkit; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -352,32 +354,34 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { private void tryExecute(RegisteredCommand command, SlashCommandInteractionEvent event) { - // cooldown - if (command.getParsedCommand().hasCooldown()) { - if (command.isInCooldown(event.getUser())) { - if (command.getParsedCommand().getOnCooldown() != null) { - final OnCooldownEvent.BukkitCooldownEvent bukkitEvent = - new OnCooldownEvent.BukkitCooldownEvent(new OnCooldownEvent(), - command.getCooldown(event.getUser()) - System.currentTimeMillis()); - bukkitEvent.setJDAEvent(event); - command.getParsedCommand().prepareArguments(event.getOptions()); - command.getParsedCommand().getOnCooldown().execute(bukkitEvent); - - if (!bukkitEvent.isCancelled()) - return; + SkriptUtils.sync(() -> { + // cooldown + if (command.getParsedCommand().hasCooldown()) { + if (command.isInCooldown(event.getUser())) { + if (command.getParsedCommand().getOnCooldown() != null) { + final OnCooldownEvent.BukkitCooldownEvent bukkitEvent = + new OnCooldownEvent.BukkitCooldownEvent(new OnCooldownEvent(), + command.getCooldown(event.getUser()) - System.currentTimeMillis()); + bukkitEvent.setJDAEvent(event); + command.getParsedCommand().prepareArguments(event.getOptions()); + command.getParsedCommand().getOnCooldown().execute(bukkitEvent); + + if (!bukkitEvent.isCancelled()) + return; + } } - } - command.setCooldown(event.getUser()); - } + command.setCooldown(event.getUser()); + } - // "real" execution - command.getParsedCommand().prepareArguments(event.getOptions()); - final Trigger trigger = command.getParsedCommand().getTrigger(); - final SlashCommandReceiveEvent.BukkitSlashCommandReceiveEvent bukkitEvent = new SlashCommandReceiveEvent.BukkitSlashCommandReceiveEvent(new SlashCommandReceiveEvent()); - bukkitEvent.setJDAEvent(event); + // "real" execution + command.getParsedCommand().prepareArguments(event.getOptions()); + final Trigger trigger = command.getParsedCommand().getTrigger(); + final SlashCommandReceiveEvent.BukkitSlashCommandReceiveEvent bukkitEvent = new SlashCommandReceiveEvent.BukkitSlashCommandReceiveEvent(new SlashCommandReceiveEvent()); + bukkitEvent.setJDAEvent(event); - trigger.execute(bukkitEvent); + trigger.execute(bukkitEvent); + }); } @Override