From 89b4e5290a4d7761b9ee5ebae46abed7cd3d4bd0 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 30 Apr 2025 00:57:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(bukkit):=20=E7=9B=B4=E6=8E=A5=E6=8A=93?= =?UTF-8?q?=E5=8C=85=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/font/BukkitFontManager.java | 32 ------------------- .../plugin/network/BukkitNetworkManager.java | 1 + .../plugin/network/PacketConsumers.java | 13 ++++++++ .../craftengine/bukkit/util/Reflections.java | 12 +++++++ 4 files changed, 26 insertions(+), 32 deletions(-) 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 8d52e9ade..fc4745a63 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,7 +15,6 @@ 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; @@ -26,14 +25,12 @@ 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; @@ -113,15 +110,9 @@ 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 (!player.hasPermission(FontManager.BYPASS_COMMAND)) { IllegalCharacterProcessResult result = processIllegalCharacters(event.getMessage()); @@ -256,27 +247,4 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { throw new RuntimeException(e); } } - - private void processOpCommand(CommandSender sender, String command) { - if (!sender.hasPermission("minecraft.command.op") || !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)).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; - this.plugin.scheduler().asyncLater( - () -> { - Player player = Bukkit.getPlayer(targetName); - if (player == null || !player.isOnline()) return; - removeEmojiSuggestions(player); - addEmojiSuggestions(player, getEmojiSuggestion(player)); - }, - 1L, TimeUnit.SECONDS); - } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index 7eb2bc5e4..d485c0da4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -151,6 +151,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(PacketConsumers.HANDSHAKE_C2S, Reflections.clazz$ClientIntentionPacket); registerNMSPacketConsumer(PacketConsumers.LOGIN_ACKNOWLEDGED, Reflections.clazz$ServerboundLoginAcknowledgedPacket); registerNMSPacketConsumer(PacketConsumers.RESOURCE_PACK_RESPONSE, Reflections.clazz$ServerboundResourcePackPacket); + registerNMSPacketConsumer(PacketConsumers.ENTITY_EVENT, Reflections.clazz$ClientboundEntityEventPacket); registerByteBufPacketConsumer(PacketConsumers.LEVEL_CHUNK_WITH_LIGHT, this.packetIds.clientboundLevelChunkWithLightPacket()); registerByteBufPacketConsumer(PacketConsumers.SECTION_BLOCK_UPDATE, this.packetIds.clientboundSectionBlocksUpdatePacket()); registerByteBufPacketConsumer(PacketConsumers.BLOCK_UPDATE, this.packetIds.clientboundBlockUpdatePacket()); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 13eab66b8..715c1cc55 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -2286,4 +2286,17 @@ public class PacketConsumers { CraftEngine.instance().logger().warn("Failed to handle ServerboundResourcePackPacket", e); } }; + + public static final TriConsumer ENTITY_EVENT = (user, event, packet) -> { + try { + int entityId = Reflections.field$ClientboundEntityEventPacket$entityId.getInt(packet); + if (entityId != FastNMS.INSTANCE.method$Entity$getId(user.serverPlayer())) return; + byte eventId = Reflections.field$ClientboundEntityEventPacket$eventId.getByte(packet); + if (eventId >= 24 && eventId <= 28) { + CraftEngine.instance().fontManager().refreshEmojiSuggestions(user.uuid()); + } + } catch (Exception e) { + CraftEngine.instance().logger().warn("Failed to handle ClientboundEntityEventPacket", e); + } + }; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 87cc8d579..85165e2e5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -3138,6 +3138,18 @@ public class Reflections { ) ); + public static final Field field$ClientboundEntityEventPacket$entityId = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$ClientboundEntityEventPacket, int.class, 0 + ) + ); + + public static final Field field$ClientboundEntityEventPacket$eventId = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$ClientboundEntityEventPacket, byte.class, 0 + ) + ); + public static final Constructor constructor$ClientboundEntityEventPacket = requireNonNull( ReflectionUtils.getConstructor( clazz$ClientboundEntityEventPacket, clazz$Entity, byte.class