From b70930271f1f14b6d38f020a7e86410feedd2c09 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 30 Apr 2025 00:25:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(bukkit):=20=E5=A4=84=E7=90=86op=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E5=AF=BC=E8=87=B4=E7=9A=84=E6=9D=83=E9=99=90=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/font/BukkitFontManager.java | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java index c0b332ec6..88a64cd84 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java @@ -15,6 +15,7 @@ import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.util.AdventureHelper; import net.momirealms.craftengine.core.util.VersionHelper; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -25,12 +26,14 @@ import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerEditBookEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.server.ServerCommandEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.view.AnvilView; import java.lang.reflect.InvocationTargetException; import java.util.*; +import java.util.concurrent.TimeUnit; public class BukkitFontManager extends AbstractFontManager implements Listener { private final BukkitCraftEngine plugin; @@ -110,10 +113,17 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { this.processChatEvent(event); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onServerCommand(ServerCommandEvent event) { + this.processOpCommand(event.getSender(), event.getCommand()); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { + Player player = event.getPlayer(); + this.processOpCommand(player, event.getMessage()); if (!Config.filterCommand()) return; - if (!event.getPlayer().hasPermission(FontManager.BYPASS_COMMAND)) { + if (!player.hasPermission(FontManager.BYPASS_COMMAND)) { IllegalCharacterProcessResult result = processIllegalCharacters(event.getMessage()); if (result.has()) { event.setMessage(result.text()); @@ -246,4 +256,30 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { throw new RuntimeException(e); } } + + private void processOpCommand(CommandSender sender, String command) { + this.plugin.scheduler().asyncLater( + () -> { + if (!sender.hasPermission("minecraft.command.op")) return; + if (!sender.hasPermission("minecraft.command.deop")) return; + String input = command.startsWith("/") ? command.substring(1) : command; + int firstSpaceIndex = input.indexOf(' '); + String cmdPart = (firstSpaceIndex == -1) ? input : input.substring(0, firstSpaceIndex); + String argPart = (firstSpaceIndex == -1) ? "" : input.substring(firstSpaceIndex + 1).trim(); + int lastColonIndex = cmdPart.lastIndexOf(':'); + if (lastColonIndex != -1 && !cmdPart.substring(0, lastColonIndex).equals("minecraft")) return; + String cmd = lastColonIndex == -1 ? cmdPart : cmdPart.substring(lastColonIndex + 1); + cmd = cmd.toLowerCase(); + if (!cmd.equals("op") && !cmd.equals("deop")) return; + int nextSpaceIndex = argPart.indexOf(' '); + String targetName = (nextSpaceIndex == -1) ? argPart : argPart.substring(0, nextSpaceIndex); + if (targetName.isEmpty()) return; + Player player = Bukkit.getPlayer(targetName); + if (player == null) return; + if (!player.isOnline()) return; + removeEmojiSuggestions(player); + addEmojiSuggestions(player, getEmojiSuggestion(player)); + }, + 1L, TimeUnit.SECONDS); + } }