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 19d2aab15..9f8ca6e1b 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 @@ -230,13 +230,13 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { changed = true; } } - if (Config.allowEmojiChat()) { - EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player)); - if (result.replaced()) { - rawJsonMessage = result.text(); - changed = true; - } - } + // if (Config.allowEmojiChat()) { + // EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player)); + // if (result.replaced()) { + // rawJsonMessage = result.text(); + // changed = true; + // } + // } if (changed) { PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, ComponentUtils.jsonToPaperAdventure(rawJsonMessage)); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index df1f0b1d5..ef4a1f4e6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -16,12 +16,14 @@ import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.item.behavior.BukkitItemBehaviors; import net.momirealms.craftengine.bukkit.item.recipe.BukkitRecipeManager; import net.momirealms.craftengine.bukkit.loot.BukkitVanillaLootManager; +import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.pack.BukkitPackManager; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandManager; import net.momirealms.craftengine.bukkit.plugin.command.BukkitSenderFactory; import net.momirealms.craftengine.bukkit.plugin.gui.BukkitGuiManager; import net.momirealms.craftengine.bukkit.plugin.injector.*; import net.momirealms.craftengine.bukkit.plugin.network.BukkitNetworkManager; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; import net.momirealms.craftengine.bukkit.plugin.scheduler.BukkitSchedulerAdapter; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.sound.BukkitSoundManager; @@ -158,6 +160,14 @@ public class BukkitCraftEngine extends CraftEngine { } catch (Exception e) { throw new InjectionException("Error initializing ProtectedFieldVisitor", e); } + // 关闭聊天验证 + try { + Object settings = CoreReflections.field$DedicatedServer$settings.get(FastNMS.INSTANCE.method$MinecraftServer$getServer()); + Object properties = CoreReflections.field$DedicatedServerSettings$properties.get(settings); + CoreReflections.methodHandle$DedicatedServerProperties$enforceSecureProfileSetter.invoke(properties, false); + } catch (Throwable e) { + throw new InjectionException("Error injecting secure profile", e); + } // 初始化一些注册表 super.onPluginLoad(); BukkitBlockBehaviors.init(); 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 76ca29fa7..d85f3d1f7 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 @@ -3,6 +3,8 @@ package net.momirealms.craftengine.bukkit.plugin.network; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.mojang.authlib.GameProfile; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.datafixers.util.Either; @@ -34,6 +36,7 @@ import net.momirealms.craftengine.bukkit.entity.data.BaseEntityData; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurniture; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.entity.projectile.BukkitProjectileManager; +import net.momirealms.craftengine.bukkit.font.BukkitFontManager; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.item.behavior.FurnitureItemBehavior; import net.momirealms.craftengine.bukkit.nms.FastNMS; @@ -64,6 +67,7 @@ import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBox; import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitboxPart; import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.entity.seat.Seat; +import net.momirealms.craftengine.core.font.EmojiTextProcessResult; import net.momirealms.craftengine.core.font.FontManager; import net.momirealms.craftengine.core.font.IllegalCharacterProcessResult; import net.momirealms.craftengine.core.item.CustomItem; @@ -382,9 +386,9 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(new UpdateTagsListener(), NetworkReflections.clazz$ClientboundUpdateTagsPacket); registerNMSPacketConsumer(new ClientInformationListener(), VersionHelper.isOrAbove1_20_2() ? NetworkReflections.clazz$ServerboundClientInformationPacket1 : NetworkReflections.clazz$ServerboundClientInformationPacket0); registerNMSPacketConsumer(new ContainerClickListener1_21_5(), VersionHelper.isOrAbove1_21_5() ? NetworkReflections.clazz$ServerboundContainerClickPacket : null); - registerNMSPacketConsumer(new StatusResponseListener(), NetworkReflections.clazz$ClientboundStatusResponsePacket); registerNMSPacketConsumer(new ServerDataListener(), NetworkReflections.clazz$ClientboundServerDataPacket); registerNMSPacketConsumer(new ChatSessionUpdateListener(), NetworkReflections.clazz$ServerboundChatSessionUpdatePacket); + registerNMSPacketConsumer(new PlayerChatListener(), NetworkReflections.clazz$ClientboundPlayerChatPacket); registerNMSPacketConsumer(new LoginAcknowledgedListener(), NetworkReflections.clazz$ServerboundLoginAcknowledgedPacket); registerNMSPacketConsumer(new ConfigurationAcknowledgedListener(), NetworkReflections.clazz$ServerboundConfigurationAcknowledgedPacket); registerNMSPacketConsumer(new C2SFinishConfigurationListener(), NetworkReflections.clazz$ServerboundFinishConfigurationPacket); @@ -392,6 +396,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes registerNMSPacketConsumer(new LoginFinishedListener(), NetworkReflections.clazz$ClientboundLoginFinishedPacket); registerNMSPacketConsumer(new StartConfigurationListener(), NetworkReflections.clazz$ClientboundStartConfigurationPacket); registerByteBufferPacketListener(new IntentionListener(), this.packetIds.clientIntentionPacket(), "ClientIntentionPacket", ConnectionState.HANDSHAKING, PacketFlow.SERVERBOUND); + registerByteBufferPacketListener(new StatusResponseListener(), this.packetIds.clientboundStatusResponsePacket(), "ClientboundStatusResponsePacket", ConnectionState.STATUS, PacketFlow.CLIENTBOUND); registerByteBufferPacketListener(new ForgetLevelChunkListener(), this.packetIds.clientboundForgetLevelChunkPacket(), "ClientboundForgetLevelChunkPacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND); registerByteBufferPacketListener(new SetScoreListener1_20_3(), VersionHelper.isOrAbove1_20_3() ? this.packetIds.clientboundSetScorePacket() : -1, "ClientboundSetScorePacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND); registerByteBufferPacketListener(new AddRecipeBookListener(), this.packetIds.clientboundRecipeBookAddPacket(), "ClientboundRecipeBookAddPacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND); @@ -476,13 +481,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes this.packetIds.clientboundSetObjectivePacket(), "ClientboundSetObjectivePacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND ); - registerByteBufferPacketListener( - VersionHelper.isOrAbove1_20_3() ? - new PlayerChatListener_1_20_3() : - new PlayerChatListener_1_20(), - this.packetIds.clientboundPlayerChatPacket(), "ClientboundPlayerChatPacket", - ConnectionState.PLAY, PacketFlow.CLIENTBOUND - ); } @EventHandler(priority = EventPriority.LOWEST) @@ -1508,13 +1506,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } } - public static class StatusResponseListener implements NMSPacketListener { - - @Override - public void onPacketSend(NetWorkUser user, NMSPacketEvent event, Object packet) { - } - } - public static class ServerDataListener implements NMSPacketListener { @Override @@ -1538,6 +1529,33 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } } + public static class PlayerChatListener implements NMSPacketListener { + + @Override + public void onPacketSend(NetWorkUser user, NMSPacketEvent event, Object packet) { + event.setCancelled(true); + Object content = FastNMS.INSTANCE.field$ClientboundPlayerChatPacket$unsignedContent(packet); + if (content == null) { + content = FastNMS.INSTANCE.method$Component$literal( + FastNMS.INSTANCE.field$SignedMessageBody$Packed$content( + FastNMS.INSTANCE.field$ClientboundPlayerChatPacket$body(packet) + ) + ); + } + Object chatType = FastNMS.INSTANCE.field$ClientboundPlayerChatPacket$chatType(packet); + Object decorate = FastNMS.INSTANCE.method$ChatType$Bound$decorate(chatType, content); + if (Config.allowEmojiChat()) { + String rawJsonMessage = ComponentUtils.minecraftToJson(decorate); + EmojiTextProcessResult result = BukkitFontManager.instance().replaceJsonEmoji(rawJsonMessage, (BukkitServerPlayer) user); + if (result.replaced()) { + decorate = ComponentUtils.jsonToMinecraft(result.text()); + } + } + Object systemChatPacket = FastNMS.INSTANCE.constructor$ClientboundSystemChatPacket(decorate, false); + user.sendPacket(systemChatPacket, false); + } + } + public static class RespawnListener implements NMSPacketListener { @Override @@ -4479,192 +4497,17 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } } - public static class PlayerChatListener_1_20 implements ByteBufferPacketListener { + public static class StatusResponseListener implements ByteBufferPacketListener { + @Override public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) { - if (!Config.interceptPlayerChat()) return; FriendlyByteBuf buf = event.getBuffer(); - boolean changed = false; - UUID sender = buf.readUUID(); - int index = buf.readVarInt(); - byte @Nullable [] messageSignature = buf.readNullable(b -> { - byte[] bs = new byte[256]; - buf.readBytes(bs); - return bs; - }); - // SignedMessageBody.Packed start - String content = buf.readUtf(256); - Instant timeStamp = buf.readInstant(); - long salt = buf.readLong(); - // LastSeenMessages.Packed start - ArrayList> lastSeen = buf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 20), b -> { - int i = b.readVarInt() - 1; - if (i == -1) { - byte[] bs = new byte[256]; - buf.readBytes(bs); - return Pair.of(-1, bs); - } else { - return Pair.of(i, null); - } - }); - // LastSeenMessages.Packed end - // SignedMessageBody.Packed end - @Nullable String unsignedContent = buf.readNullable(FriendlyByteBuf::readUtf); - if (unsignedContent != null) { - Map unsignedContentTokens = CraftEngine.instance().fontManager().matchTags(unsignedContent); - if (!unsignedContentTokens.isEmpty()) { - Tag tag = MRegistryOps.JSON.convertTo(MRegistryOps.SPARROW_NBT, GsonHelper.get().fromJson(unsignedContent, JsonElement.class)); - Component component = AdventureHelper.nbtToComponent(tag); - component = AdventureHelper.replaceText(component, unsignedContentTokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user)); - unsignedContent = MRegistryOps.SPARROW_NBT.convertTo(MRegistryOps.JSON, AdventureHelper.componentToNbt(component)).toString(); - changed = true; - } - } - // FilterMask start - int type = buf.readVarInt(); - BitSet mask = type == 2 /* PARTIALLY_FILTERED */ ? buf.readBitSet() : null; - // FilterMask end - // ChatType.BoundNetwork start - int chatType = buf.readVarInt(); - String name = buf.readUtf(); - Map nameTokens = CraftEngine.instance().fontManager().matchTags(name); - if (!nameTokens.isEmpty()) { - Tag tag = MRegistryOps.JSON.convertTo(MRegistryOps.SPARROW_NBT, GsonHelper.get().fromJson(name, JsonElement.class)); - Component component = AdventureHelper.nbtToComponent(tag); - component = AdventureHelper.replaceText(component, nameTokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user)); - name = MRegistryOps.SPARROW_NBT.convertTo(MRegistryOps.JSON, AdventureHelper.componentToNbt(component)).toString(); - changed = true; - } - @Nullable String targetName = buf.readNullable(FriendlyByteBuf::readUtf); - if (targetName != null) { - Map targetNameTokens = CraftEngine.instance().fontManager().matchTags(targetName); - if (!targetNameTokens.isEmpty()) { - Tag tag = MRegistryOps.JSON.convertTo(MRegistryOps.SPARROW_NBT, GsonHelper.get().fromJson(targetName, JsonElement.class)); - Component component = AdventureHelper.nbtToComponent(tag); - component = AdventureHelper.replaceText(component, targetNameTokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user)); - targetName = MRegistryOps.SPARROW_NBT.convertTo(MRegistryOps.JSON, AdventureHelper.componentToNbt(component)).toString(); - changed = true; - } - } - // ChatType.BoundNetwork end - if (changed) { - event.setChanged(true); - buf.clear(); - buf.writeVarInt(event.packetID()); - buf.writeUUID(sender); - buf.writeVarInt(index); - buf.writeNullable(messageSignature, (b, bs) -> buf.writeBytes(bs)); - buf.writeUtf(content); - buf.writeInstant(timeStamp); - buf.writeLong(salt); - buf.writeCollection(lastSeen, (b, pair) -> { - b.writeVarInt(pair.left() + 1); - if (pair.right() != null) { - b.writeBytes(pair.right()); - } - }); - buf.writeNullable(unsignedContent, FriendlyByteBuf::writeUtf); - buf.writeVarInt(type); - if (type == 2) buf.writeBitSet(mask); - buf.writeVarInt(chatType); - buf.writeUtf(name); - buf.writeNullable(targetName, FriendlyByteBuf::writeUtf); - } - } - } - - public static class PlayerChatListener_1_20_3 implements ByteBufferPacketListener { - - public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) { - if (!Config.interceptPlayerChat()) return; - FriendlyByteBuf buf = event.getBuffer(); - boolean changed = false; - int globalIndex = VersionHelper.isOrAbove1_21_5() ? buf.readVarInt() : -1; - UUID sender = buf.readUUID(); - int index = buf.readVarInt(); - byte @Nullable [] messageSignature = buf.readNullable(b -> { - byte[] bs = new byte[256]; - buf.readBytes(bs); - return bs; - }); - // SignedMessageBody.Packed start - String content = buf.readUtf(256); - Instant timeStamp = buf.readInstant(); - long salt = buf.readLong(); - // LastSeenMessages.Packed start - ArrayList> lastSeen = buf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 20), b -> { - int i = b.readVarInt() - 1; - if (i == -1) { - byte[] bs = new byte[256]; - buf.readBytes(bs); - return Pair.of(-1, bs); - } else { - return Pair.of(i, null); - } - }); - // LastSeenMessages.Packed end - // SignedMessageBody.Packed end - @Nullable Tag unsignedContent = buf.readNullable(b -> b.readNbt(false)); - if (unsignedContent != null) { - Map tokens = CraftEngine.instance().fontManager().matchTags(unsignedContent); - if (!tokens.isEmpty()) { - Component component = AdventureHelper.tagToComponent(unsignedContent); - component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user)); - unsignedContent = AdventureHelper.componentToTag(component); - changed = true; - } - } - // FilterMask start - int type = buf.readVarInt(); - BitSet mask = type == 2 /* PARTIALLY_FILTERED */ ? buf.readBitSet() : null; - // FilterMask end - // ChatType.Bound start - int chatType = buf.readVarInt(); - Tag name = buf.readNbt(false); - if (name != null) { - Map tokens = CraftEngine.instance().fontManager().matchTags(name); - if (!tokens.isEmpty()) { - Component component = AdventureHelper.tagToComponent(name); - component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user)); - name = AdventureHelper.componentToTag(component); - changed = true; - } - } - @Nullable Tag targetName = buf.readNullable(b -> b.readNbt(false)); - if (targetName != null) { - Map tokens = CraftEngine.instance().fontManager().matchTags(targetName); - if (!tokens.isEmpty()) { - Component component = AdventureHelper.tagToComponent(targetName); - component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user)); - targetName = AdventureHelper.componentToTag(component); - changed = true; - } - } - // ChatType.Bound end - if (changed) { - event.setChanged(true); - buf.clear(); - buf.writeVarInt(event.packetID()); - if (VersionHelper.isOrAbove1_21_5()) buf.writeVarInt(globalIndex); - buf.writeUUID(sender); - buf.writeVarInt(index); - buf.writeNullable(messageSignature, (b, bs) -> buf.writeBytes(bs)); - buf.writeUtf(content); - buf.writeInstant(timeStamp); - buf.writeLong(salt); - buf.writeCollection(lastSeen, (b, pair) -> { - b.writeVarInt(pair.left() + 1); - if (pair.right() != null) { - b.writeBytes(pair.right()); - } - }); - buf.writeNullable(unsignedContent, (b, tag) -> b.writeNbt(tag, false)); - buf.writeVarInt(type); - if (type == 2) buf.writeBitSet(mask); - buf.writeVarInt(chatType); - buf.writeNbt(name, false); - buf.writeNullable(targetName, (b, tag) -> b.writeNbt(tag, false)); - } + JsonObject jsonObject = JsonParser.parseString(buf.readUtf()).getAsJsonObject(); + jsonObject.addProperty("preventsChatReports", true); + event.setChanged(true); + buf.clear(); + buf.writeVarInt(event.packetID()); + buf.writeUtf(jsonObject.toString()); } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java index 5f663cb4c..bd7f60b68 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketIds.java @@ -76,7 +76,7 @@ public interface PacketIds { int serverboundCustomPayloadPacket(); - int clientboundPlayerChatPacket(); - int clientIntentionPacket(); + + int clientboundStatusResponsePacket(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20.java index 5bfc2804f..71610cd73 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20.java @@ -192,13 +192,13 @@ public class PacketIds1_20 implements PacketIds { return PacketIdHelper.byClazz(NetworkReflections.clazz$ServerboundCustomPayloadPacket, PacketFlow.SERVERBOUND, ConnectionState.PLAY); } - @Override - public int clientboundPlayerChatPacket() { - return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientboundPlayerChatPacket, PacketFlow.CLIENTBOUND, ConnectionState.PLAY); - } - @Override public int clientIntentionPacket() { return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientIntentionPacket, PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING); } + + @Override + public int clientboundStatusResponsePacket() { + return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientboundStatusResponsePacket, PacketFlow.CLIENTBOUND, ConnectionState.STATUS); + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20_5.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20_5.java index 1ee063175..5c933c64a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20_5.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIds1_20_5.java @@ -191,13 +191,13 @@ public class PacketIds1_20_5 implements PacketIds { return PacketIdHelper.byName("minecraft:custom_payload", PacketFlow.SERVERBOUND, ConnectionState.PLAY); } - @Override - public int clientboundPlayerChatPacket() { - return PacketIdHelper.byName("minecraft:player_chat", PacketFlow.CLIENTBOUND, ConnectionState.PLAY); - } - @Override public int clientIntentionPacket() { return PacketIdHelper.byName("minecraft:intention", PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING); } + + @Override + public int clientboundStatusResponsePacket() { + return PacketIdHelper.byName("minecraft:status_response", PacketFlow.CLIENTBOUND, ConnectionState.STATUS); + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index 0d3a32d09..004ae8748 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -4675,4 +4675,25 @@ public final class CoreReflections { throw new ReflectionInitException("Failed to init ArmorStand", e); } } + + public static final Field field$DedicatedServerProperties$enforceSecureProfile = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$DedicatedServerProperties, + VersionHelper.isOrAbove1_21_11() + ? new String[]{"enforceSecureProfile", "ag"} + : VersionHelper.isOrAbove1_21_9() + ? new String[]{"enforceSecureProfile", "af"} + : VersionHelper.isOrAbove1_21_2() + ? new String[]{"enforceSecureProfile", "X"} + : VersionHelper.isOrAbove1_21() + ? new String[]{"enforceSecureProfile", "Y"} + : VersionHelper.isOrAbove1_20_5() + ? new String[]{"enforceSecureProfile", "X"} + : new String[]{"enforceSecureProfile", "W"} + ) + ); + + public static final MethodHandle methodHandle$DedicatedServerProperties$enforceSecureProfileSetter = requireNonNull( + ReflectionUtils.unreflectSetter(field$DedicatedServerProperties$enforceSecureProfile) + ).asType(MethodType.methodType(void.class, Object.class, boolean.class)); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/ProtocolVersion.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/ProtocolVersion.java index f76bebbd9..01da7f710 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/ProtocolVersion.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/ProtocolVersion.java @@ -6,6 +6,9 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import java.util.Map; public final class ProtocolVersion { + private static final Map BY_ID = new Int2ObjectOpenHashMap<>(); + private static final Map BY_NAME = new Object2ObjectOpenHashMap<>(); + public static final ProtocolVersion UNKNOWN = new ProtocolVersion(-1, "Unknown"); public static final ProtocolVersion V1_20 = new ProtocolVersion(763, "1.20"); public static final ProtocolVersion V1_20_1 = new ProtocolVersion(763, "1.20.1"); @@ -26,8 +29,6 @@ public final class ProtocolVersion { public static final ProtocolVersion V1_21_9 = new ProtocolVersion(773, "1.21.9"); public static final ProtocolVersion V1_21_10 = new ProtocolVersion(773, "1.21.10"); public static final ProtocolVersion V1_21_11 = new ProtocolVersion(774, "1.21.11"); - private static final Map BY_ID = new Int2ObjectOpenHashMap<>(); - private static final Map BY_NAME = new Object2ObjectOpenHashMap<>(); private final int id; private final String name; diff --git a/gradle.properties b/gradle.properties index 4eccbf354..e6066abf9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ byte_buddy_version=1.18.1 ahocorasick_version=0.6.3 snake_yaml_version=2.5 anti_grief_version=1.0.5 -nms_helper_version=1.0.149 +nms_helper_version=1.0.150 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.38.7