diff options
| author | Krakenied <krakenied1@gmail.com> | 2025-07-29 15:45:24 +0200 |
|---|---|---|
| committer | Krakenied <46192742+Krakenied@users.noreply.github.com> | 2025-07-29 15:50:56 +0200 |
| commit | 53762d9385e56e42a6db5b77d6e412638f5f92c7 (patch) | |
| tree | 1ee78f8f444eae4521852f92b34305019f533301 /bukkit | |
| parent | d3536cb0528d6b441fe8b5ae34f2164036d4c532 (diff) | |
Add option to dispatch player commands
Closes https://github.com/LMBishop/Quests/issues/470
Diffstat (limited to 'bukkit')
16 files changed, 55 insertions, 26 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java index 5cc19b6b..97846b12 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java @@ -33,7 +33,7 @@ public class CancelQMenu extends QMenu { MenuElement questMenuElement = new QuestMenuElement(plugin, quest, this, true); MenuElement confirmCancelMenuElement = new ConfirmCancelMenuElement(plugin, owner, quest, superMenu); MenuElement abortCancelMenuElement = new AbortCancelMenuElement(plugin, owner, superMenu); - MenuElement border = new CustomMenuElement(plugin, owner.getPlayerUUID(), null, config.getItem("gui.quest-cancel-background")); + MenuElement border = new CustomMenuElement(plugin, owner.getPlayerUUID(), config.getItem("gui.quest-cancel-background")); for (int i = 0; i < 27; i++) { menuElements.put(i, border); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java index 47d97adc..ec183803 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java @@ -61,7 +61,7 @@ public class MenuController implements Listener { if (menuElement == null) { return; } - ClickResult result = menuElement.handleClick(event.getClick()); + ClickResult result = menuElement.handleClick(player, event.getClick()); if (result == ClickResult.DO_NOTHING) { return; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java index d84a70c6..a5c9620c 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java @@ -99,7 +99,7 @@ public abstract class PaginatedQMenu extends QMenu { if (plugin.getConfig().contains(customElementsPath + "." + s + ".display")) { ItemStack is = plugin.getConfiguredItemStack(customElementsPath + "." + s + ".display", plugin.getConfig()); List<String> commands = plugin.getQuestsConfig().getStringList(customElementsPath + "." + s + ".commands"); - menuElement = new CustomMenuElement(plugin, owner.getPlayerUUID(), player.getName(), is, commands); + menuElement = new CustomMenuElement(plugin, owner.getPlayerUUID(), is, commands); } else if (plugin.getConfig().getBoolean(customElementsPath + "." + s + ".spacer", false)) { menuElement = spacer; } else { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/AbortCancelMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/AbortCancelMenuElement.java index e55c42e4..8ce289b7 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/AbortCancelMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/AbortCancelMenuElement.java @@ -6,6 +6,7 @@ import com.leonardobishop.quests.bukkit.menu.ClickResult; import com.leonardobishop.quests.bukkit.menu.QMenu; import com.leonardobishop.quests.bukkit.util.MenuUtils; import com.leonardobishop.quests.common.player.QPlayer; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -27,7 +28,7 @@ public class AbortCancelMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { if (clickType == ClickType.LEFT) { if (returnMenu != null) { plugin.getMenuController().openMenu(owner.getPlayerUUID(), returnMenu); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/BackMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/BackMenuElement.java index 07964c53..34168499 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/BackMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/BackMenuElement.java @@ -6,6 +6,7 @@ import com.leonardobishop.quests.bukkit.menu.ClickResult; import com.leonardobishop.quests.bukkit.menu.MenuController; import com.leonardobishop.quests.bukkit.menu.QMenu; import com.leonardobishop.quests.bukkit.util.MenuUtils; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -34,7 +35,7 @@ public class BackMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { controller.openMenu(player, previousMenu); return ClickResult.DO_NOTHING; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java index adb4617f..8df98c49 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java @@ -45,7 +45,7 @@ public class CategoryMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { Player player = Bukkit.getPlayer(owner); if (player == null) { return ClickResult.DO_NOTHING; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/ConfirmCancelMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/ConfirmCancelMenuElement.java index d3cc871b..f18b46fa 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/ConfirmCancelMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/ConfirmCancelMenuElement.java @@ -7,6 +7,7 @@ import com.leonardobishop.quests.bukkit.menu.QMenu; import com.leonardobishop.quests.bukkit.util.MenuUtils; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.quest.Quest; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -30,7 +31,7 @@ public class ConfirmCancelMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { if (clickType == ClickType.LEFT) { if (owner.cancelQuest(quest)) { if (returnMenu != null) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java index 048ad48d..8b826829 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java @@ -2,8 +2,9 @@ package com.leonardobishop.quests.bukkit.menu.element; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.menu.ClickResult; +import com.leonardobishop.quests.bukkit.util.DispatchUtils; import com.leonardobishop.quests.bukkit.util.MenuUtils; -import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -17,17 +18,15 @@ public class CustomMenuElement extends MenuElement{ private final BukkitQuestsPlugin plugin; private final ItemStack itemStack; private final List<String> commands; - private final String playerName; - public CustomMenuElement(BukkitQuestsPlugin plugin, UUID owner, String name, ItemStack itemStack) { - this(plugin, owner, name, itemStack, new ArrayList<>()); + public CustomMenuElement(BukkitQuestsPlugin plugin, UUID owner, ItemStack itemStack) { + this(plugin, owner, itemStack, new ArrayList<>()); } - public CustomMenuElement(BukkitQuestsPlugin plugin, UUID owner, String name, ItemStack itemStack, List<String> commands) { + public CustomMenuElement(BukkitQuestsPlugin plugin, UUID owner, ItemStack itemStack, List<String> commands) { this.plugin = plugin; this.itemStack = MenuUtils.applyPlaceholders(plugin, owner, itemStack); this.commands = commands; - this.playerName = name; } @Override @@ -36,15 +35,14 @@ public class CustomMenuElement extends MenuElement{ } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { if (commands.isEmpty()) { return ClickResult.DO_NOTHING; } this.plugin.getScheduler().runTask(() -> { for (String command : commands) { - command = command.replace("{player}", playerName); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + DispatchUtils.dispatchCommand(whoClicked, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.GUI, whoClicked, command)); } }); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java index 7be44a5a..98ced8d4 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java @@ -1,6 +1,7 @@ package com.leonardobishop.quests.bukkit.menu.element; import com.leonardobishop.quests.bukkit.menu.ClickResult; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -11,10 +12,11 @@ public abstract class MenuElement { /** * Handle a click. * + * @param whoClicked who clicked * @param clickType the type of click * @return whether the calling menu should be refreshed */ - public abstract ClickResult handleClick(ClickType clickType); + public abstract ClickResult handleClick(Player whoClicked, ClickType clickType); public boolean isEnabled() { return true; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageDescMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageDescMenuElement.java index b35c134b..cfb3aa50 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageDescMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageDescMenuElement.java @@ -4,6 +4,7 @@ import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.menu.ClickResult; import com.leonardobishop.quests.bukkit.menu.PaginatedQMenu; import com.leonardobishop.quests.bukkit.util.MenuUtils; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -28,7 +29,7 @@ public class PageDescMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { return ClickResult.DO_NOTHING; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageNextMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageNextMenuElement.java index d4536449..e00da422 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageNextMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PageNextMenuElement.java @@ -5,6 +5,7 @@ import com.leonardobishop.quests.bukkit.menu.ClickResult; import com.leonardobishop.quests.bukkit.menu.PaginatedQMenu; import com.leonardobishop.quests.bukkit.util.MenuUtils; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -30,7 +31,7 @@ public class PageNextMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { if (menu.getCurrentPage() == menu.getMaxPage()) { return ClickResult.DO_NOTHING; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PagePrevMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PagePrevMenuElement.java index e5d96f6e..8fa1cc97 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PagePrevMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/PagePrevMenuElement.java @@ -5,6 +5,7 @@ import com.leonardobishop.quests.bukkit.menu.ClickResult; import com.leonardobishop.quests.bukkit.menu.PaginatedQMenu; import com.leonardobishop.quests.bukkit.util.MenuUtils; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -30,7 +31,7 @@ public class PagePrevMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { if (menu.getCurrentPage() == menu.getMinPage()) { return ClickResult.DO_NOTHING; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java index 051a5269..4fc397e6 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java @@ -14,6 +14,7 @@ import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.quest.Quest; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -132,7 +133,7 @@ public class QuestMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { if (dummy) { return ClickResult.DO_NOTHING; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java index 6f450cb6..d01c9a63 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java @@ -2,6 +2,7 @@ package com.leonardobishop.quests.bukkit.menu.element; import com.leonardobishop.quests.bukkit.menu.ClickResult; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; @@ -16,7 +17,7 @@ public class SpacerMenuElement extends MenuElement { } @Override - public ClickResult handleClick(ClickType clickType) { + public ClickResult handleClick(Player whoClicked, ClickType clickType) { return ClickResult.DO_NOTHING; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java index 6bd319cb..670b35ee 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java @@ -11,6 +11,7 @@ import com.leonardobishop.quests.bukkit.api.event.PreStartQuestEvent; import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.hook.vault.rewards.VaultReward; import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack; +import com.leonardobishop.quests.bukkit.util.DispatchUtils; import com.leonardobishop.quests.bukkit.util.FormatUtils; import com.leonardobishop.quests.bukkit.util.Messages; import com.leonardobishop.quests.bukkit.util.SoundUtils; @@ -139,7 +140,7 @@ public class NormalQuestController implements QuestController { ); } for (String s : quest.getStartCommands()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); + DispatchUtils.dispatchCommand(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); } for (String s : quest.getStartString()) { Chat.send(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s), true); @@ -262,7 +263,7 @@ public class NormalQuestController implements QuestController { vaultReward.give(player); for (String s : quest.getRewards()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); + DispatchUtils.dispatchCommand(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); } }); Messages.send(questFinishEvent.getQuestFinishMessage(), player); @@ -325,7 +326,7 @@ public class NormalQuestController implements QuestController { // PlayerCancelQuestEvent -- end Messages.send(questCancelEvent.getQuestCancelMessage(), player); for (String s : quest.getCancelCommands()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); + DispatchUtils.dispatchCommand(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); } for (String s : quest.getCancelString()) { Chat.send(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s), true); @@ -359,7 +360,7 @@ public class NormalQuestController implements QuestController { // PlayerCancelQuestEvent -- end Messages.send(questCancelEvent.getQuestExpireMessage(), player); for (String s : quest.getExpiryCommands()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); + DispatchUtils.dispatchCommand(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s)); } for (String s : quest.getExpiryString()) { Chat.send(player, this.plugin.applyPlayerAndPAPI(BukkitQuestsPlugin.PAPIType.QUESTS, player, s), true); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/DispatchUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/DispatchUtils.java new file mode 100644 index 00000000..8027f695 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/DispatchUtils.java @@ -0,0 +1,20 @@ +package com.leonardobishop.quests.bukkit.util; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.jspecify.annotations.NullMarked; + +@NullMarked +public final class DispatchUtils { + + private static final String PLAYER_PREFIX = "player: "; + + public static void dispatchCommand(CommandSender sender, String command) { + if (command.startsWith(PLAYER_PREFIX)) { + command = command.substring(PLAYER_PREFIX.length()); + } else { + sender = Bukkit.getConsoleSender(); + } + Bukkit.dispatchCommand(sender, command); + } +} |
