9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 09:59:20 +00:00

Merge pull request #149 from jhqwqmc/dev

feat(bukkit): 处理op命令导致的权限变更
This commit is contained in:
XiaoMoMi
2025-04-30 01:25:04 +08:00
committed by GitHub
4 changed files with 30 additions and 1 deletions

View File

@@ -112,8 +112,9 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onCommand(PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer();
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());

View File

@@ -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());

View File

@@ -2286,4 +2286,19 @@ public class PacketConsumers {
CraftEngine.instance().logger().warn("Failed to handle ServerboundResourcePackPacket", e);
}
};
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> ENTITY_EVENT = (user, event, packet) -> {
try {
Object player = user.serverPlayer();
if (player == null) return;
int entityId = Reflections.field$ClientboundEntityEventPacket$entityId.getInt(packet);
if (entityId != FastNMS.INSTANCE.method$Entity$getId(player)) 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);
}
};
}

View File

@@ -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