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

实现禁用聊天举报

This commit is contained in:
jhqwqmc
2025-12-11 02:35:04 +08:00
parent aa9bde99af
commit 3465d281fd
9 changed files with 95 additions and 220 deletions

View File

@@ -230,13 +230,13 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
changed = true; changed = true;
} }
} }
if (Config.allowEmojiChat()) { // if (Config.allowEmojiChat()) {
EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player)); // EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player));
if (result.replaced()) { // if (result.replaced()) {
rawJsonMessage = result.text(); // rawJsonMessage = result.text();
changed = true; // changed = true;
} // }
} // }
if (changed) { if (changed) {
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, ComponentUtils.jsonToPaperAdventure(rawJsonMessage)); PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, ComponentUtils.jsonToPaperAdventure(rawJsonMessage));
} }

View File

@@ -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.behavior.BukkitItemBehaviors;
import net.momirealms.craftengine.bukkit.item.recipe.BukkitRecipeManager; import net.momirealms.craftengine.bukkit.item.recipe.BukkitRecipeManager;
import net.momirealms.craftengine.bukkit.loot.BukkitVanillaLootManager; 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.pack.BukkitPackManager;
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandManager; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandManager;
import net.momirealms.craftengine.bukkit.plugin.command.BukkitSenderFactory; import net.momirealms.craftengine.bukkit.plugin.command.BukkitSenderFactory;
import net.momirealms.craftengine.bukkit.plugin.gui.BukkitGuiManager; import net.momirealms.craftengine.bukkit.plugin.gui.BukkitGuiManager;
import net.momirealms.craftengine.bukkit.plugin.injector.*; import net.momirealms.craftengine.bukkit.plugin.injector.*;
import net.momirealms.craftengine.bukkit.plugin.network.BukkitNetworkManager; 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.scheduler.BukkitSchedulerAdapter;
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
import net.momirealms.craftengine.bukkit.sound.BukkitSoundManager; import net.momirealms.craftengine.bukkit.sound.BukkitSoundManager;
@@ -158,6 +160,14 @@ public class BukkitCraftEngine extends CraftEngine {
} catch (Exception e) { } catch (Exception e) {
throw new InjectionException("Error initializing ProtectedFieldVisitor", 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(); super.onPluginLoad();
BukkitBlockBehaviors.init(); BukkitBlockBehaviors.init();

View File

@@ -3,6 +3,8 @@ package net.momirealms.craftengine.bukkit.plugin.network;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.datafixers.util.Either; 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.BukkitFurniture;
import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager;
import net.momirealms.craftengine.bukkit.entity.projectile.BukkitProjectileManager; 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.BukkitItemManager;
import net.momirealms.craftengine.bukkit.item.behavior.FurnitureItemBehavior; import net.momirealms.craftengine.bukkit.item.behavior.FurnitureItemBehavior;
import net.momirealms.craftengine.bukkit.nms.FastNMS; 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.furniture.hitbox.FurnitureHitboxPart;
import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.entity.player.InteractionHand;
import net.momirealms.craftengine.core.entity.seat.Seat; 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.FontManager;
import net.momirealms.craftengine.core.font.IllegalCharacterProcessResult; import net.momirealms.craftengine.core.font.IllegalCharacterProcessResult;
import net.momirealms.craftengine.core.item.CustomItem; 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 UpdateTagsListener(), NetworkReflections.clazz$ClientboundUpdateTagsPacket);
registerNMSPacketConsumer(new ClientInformationListener(), VersionHelper.isOrAbove1_20_2() ? NetworkReflections.clazz$ServerboundClientInformationPacket1 : NetworkReflections.clazz$ServerboundClientInformationPacket0); 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 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 ServerDataListener(), NetworkReflections.clazz$ClientboundServerDataPacket);
registerNMSPacketConsumer(new ChatSessionUpdateListener(), NetworkReflections.clazz$ServerboundChatSessionUpdatePacket); registerNMSPacketConsumer(new ChatSessionUpdateListener(), NetworkReflections.clazz$ServerboundChatSessionUpdatePacket);
registerNMSPacketConsumer(new PlayerChatListener(), NetworkReflections.clazz$ClientboundPlayerChatPacket);
registerNMSPacketConsumer(new LoginAcknowledgedListener(), NetworkReflections.clazz$ServerboundLoginAcknowledgedPacket); registerNMSPacketConsumer(new LoginAcknowledgedListener(), NetworkReflections.clazz$ServerboundLoginAcknowledgedPacket);
registerNMSPacketConsumer(new ConfigurationAcknowledgedListener(), NetworkReflections.clazz$ServerboundConfigurationAcknowledgedPacket); registerNMSPacketConsumer(new ConfigurationAcknowledgedListener(), NetworkReflections.clazz$ServerboundConfigurationAcknowledgedPacket);
registerNMSPacketConsumer(new C2SFinishConfigurationListener(), NetworkReflections.clazz$ServerboundFinishConfigurationPacket); 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 LoginFinishedListener(), NetworkReflections.clazz$ClientboundLoginFinishedPacket);
registerNMSPacketConsumer(new StartConfigurationListener(), NetworkReflections.clazz$ClientboundStartConfigurationPacket); registerNMSPacketConsumer(new StartConfigurationListener(), NetworkReflections.clazz$ClientboundStartConfigurationPacket);
registerByteBufferPacketListener(new IntentionListener(), this.packetIds.clientIntentionPacket(), "ClientIntentionPacket", ConnectionState.HANDSHAKING, PacketFlow.SERVERBOUND); 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 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 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); 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", this.packetIds.clientboundSetObjectivePacket(), "ClientboundSetObjectivePacket",
ConnectionState.PLAY, PacketFlow.CLIENTBOUND 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) @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 { public static class ServerDataListener implements NMSPacketListener {
@Override @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 { public static class RespawnListener implements NMSPacketListener {
@Override @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) { public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) {
if (!Config.interceptPlayerChat()) return;
FriendlyByteBuf buf = event.getBuffer(); FriendlyByteBuf buf = event.getBuffer();
boolean changed = false; JsonObject jsonObject = JsonParser.parseString(buf.readUtf()).getAsJsonObject();
UUID sender = buf.readUUID(); jsonObject.addProperty("preventsChatReports", true);
int index = buf.readVarInt(); event.setChanged(true);
byte @Nullable [] messageSignature = buf.readNullable(b -> { buf.clear();
byte[] bs = new byte[256]; buf.writeVarInt(event.packetID());
buf.readBytes(bs); buf.writeUtf(jsonObject.toString());
return bs;
});
// SignedMessageBody.Packed start
String content = buf.readUtf(256);
Instant timeStamp = buf.readInstant();
long salt = buf.readLong();
// LastSeenMessages.Packed start
ArrayList<Pair<Integer, byte[]>> 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<String, ComponentProvider> 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<String, ComponentProvider> 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<String, ComponentProvider> 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<Pair<Integer, byte[]>> 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<String, ComponentProvider> 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<String, ComponentProvider> 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<String, ComponentProvider> 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));
}
} }
} }
} }

View File

@@ -76,7 +76,7 @@ public interface PacketIds {
int serverboundCustomPayloadPacket(); int serverboundCustomPayloadPacket();
int clientboundPlayerChatPacket();
int clientIntentionPacket(); int clientIntentionPacket();
int clientboundStatusResponsePacket();
} }

View File

@@ -192,13 +192,13 @@ public class PacketIds1_20 implements PacketIds {
return PacketIdHelper.byClazz(NetworkReflections.clazz$ServerboundCustomPayloadPacket, PacketFlow.SERVERBOUND, ConnectionState.PLAY); 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 @Override
public int clientIntentionPacket() { public int clientIntentionPacket() {
return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientIntentionPacket, PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING); return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientIntentionPacket, PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING);
} }
@Override
public int clientboundStatusResponsePacket() {
return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientboundStatusResponsePacket, PacketFlow.CLIENTBOUND, ConnectionState.STATUS);
}
} }

View File

@@ -191,13 +191,13 @@ public class PacketIds1_20_5 implements PacketIds {
return PacketIdHelper.byName("minecraft:custom_payload", PacketFlow.SERVERBOUND, ConnectionState.PLAY); 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 @Override
public int clientIntentionPacket() { public int clientIntentionPacket() {
return PacketIdHelper.byName("minecraft:intention", PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING); return PacketIdHelper.byName("minecraft:intention", PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING);
} }
@Override
public int clientboundStatusResponsePacket() {
return PacketIdHelper.byName("minecraft:status_response", PacketFlow.CLIENTBOUND, ConnectionState.STATUS);
}
} }

View File

@@ -4675,4 +4675,25 @@ public final class CoreReflections {
throw new ReflectionInitException("Failed to init ArmorStand", e); 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));
} }

View File

@@ -6,6 +6,9 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Map; import java.util.Map;
public final class ProtocolVersion { public final class ProtocolVersion {
private static final Map<Integer, ProtocolVersion> BY_ID = new Int2ObjectOpenHashMap<>();
private static final Map<String, ProtocolVersion> BY_NAME = new Object2ObjectOpenHashMap<>();
public static final ProtocolVersion UNKNOWN = new ProtocolVersion(-1, "Unknown"); 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 = new ProtocolVersion(763, "1.20");
public static final ProtocolVersion V1_20_1 = new ProtocolVersion(763, "1.20.1"); 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_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_10 = new ProtocolVersion(773, "1.21.10");
public static final ProtocolVersion V1_21_11 = new ProtocolVersion(774, "1.21.11"); public static final ProtocolVersion V1_21_11 = new ProtocolVersion(774, "1.21.11");
private static final Map<Integer, ProtocolVersion> BY_ID = new Int2ObjectOpenHashMap<>();
private static final Map<String, ProtocolVersion> BY_NAME = new Object2ObjectOpenHashMap<>();
private final int id; private final int id;
private final String name; private final String name;

View File

@@ -48,7 +48,7 @@ byte_buddy_version=1.18.1
ahocorasick_version=0.6.3 ahocorasick_version=0.6.3
snake_yaml_version=2.5 snake_yaml_version=2.5
anti_grief_version=1.0.5 anti_grief_version=1.0.5
nms_helper_version=1.0.149 nms_helper_version=1.0.150
evalex_version=3.5.0 evalex_version=3.5.0
reactive_streams_version=1.0.4 reactive_streams_version=1.0.4
amazon_awssdk_version=2.38.7 amazon_awssdk_version=2.38.7