From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Wed, 3 Aug 2022 11:20:51 +0800 Subject: [PATCH] No chat sign diff --git a/net/minecraft/commands/arguments/ArgumentSignatures.java b/net/minecraft/commands/arguments/ArgumentSignatures.java index 47cb25aa9c37bd84d156288c397321009f1d9ae2..a94981882ac37ea215df3a71117d4a9b1ab79fcd 100644 --- a/net/minecraft/commands/arguments/ArgumentSignatures.java +++ b/net/minecraft/commands/arguments/ArgumentSignatures.java @@ -13,10 +13,17 @@ public record ArgumentSignatures(List entries) { private static final int MAX_ARGUMENT_COUNT = 8; private static final int MAX_ARGUMENT_NAME_LENGTH = 16; + // Leaves start - no chat sign public ArgumentSignatures(FriendlyByteBuf buffer) { - this(buffer.readCollection(FriendlyByteBuf.>limitValue(ArrayList::new, 8), ArgumentSignatures.Entry::new)); + this(readSign(buffer)); } + private static List readSign(FriendlyByteBuf buf) { + var entries = buf.readCollection(FriendlyByteBuf.>limitValue(ArrayList::new, 8), ArgumentSignatures.Entry::new); + return org.leavesmc.leaves.LeavesConfig.mics.noChatSign ? List.of() : entries; + } + // Leaves end - no chat sign + public void write(FriendlyByteBuf buffer) { buffer.writeCollection(this.entries, (buffer1, entry) -> entry.write(buffer1)); } diff --git a/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/net/minecraft/network/protocol/game/ServerboundChatPacket.java index b5afc05924ae899e020c303c8b86398e1d4ab8a0..4479634e577913372faf87138b5ba26ba02ea4f7 100644 --- a/net/minecraft/network/protocol/game/ServerboundChatPacket.java +++ b/net/minecraft/network/protocol/game/ServerboundChatPacket.java @@ -16,7 +16,7 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt ); private ServerboundChatPacket(FriendlyByteBuf buffer) { - this(buffer.readUtf(256), buffer.readInstant(), buffer.readLong(), buffer.readNullable(MessageSignature::read), new LastSeenMessages.Update(buffer)); + this(buffer.readUtf(256), buffer.readInstant(), buffer.readLong(), buffer.readNullable(ServerboundChatPacket::readSign), new LastSeenMessages.Update(buffer)); // Leaves - no chat sign } private void write(FriendlyByteBuf buffer) { @@ -27,6 +27,14 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt this.lastSeenMessages.write(buffer); } + // Leaves start - no chat sign + private static MessageSignature readSign(FriendlyByteBuf buf) { + byte[] bs = new byte[256]; + buf.readBytes(bs); + return org.leavesmc.leaves.LeavesConfig.mics.noChatSign ? null : new MessageSignature(bs); + } + // Leaves end - no chat sign + @Override public PacketType type() { return GamePacketTypes.SERVERBOUND_CHAT; diff --git a/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java b/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java index 1df628ac0b414511aaed6e09d78f884c4170f730..b92081d70ffeec47c304e553ce1aea0a8980752d 100644 --- a/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java +++ b/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java @@ -26,6 +26,11 @@ public record ServerboundChatSessionUpdatePacket(RemoteChatSession.Data chatSess @Override public void handle(ServerGamePacketListener handler) { + // Leaves start - no chat report + if (org.leavesmc.leaves.LeavesConfig.mics.noChatSign) { + return; + } + // Leaves end - no chat report handler.handleChatSessionUpdate(this); } } diff --git a/net/minecraft/network/protocol/status/ServerStatus.java b/net/minecraft/network/protocol/status/ServerStatus.java index 88447fc2108126ccfad2fb7eb79ac94537f132d3..1bca4150c63da064bd2d1ee8f504f2ebbc9d96a0 100644 --- a/net/minecraft/network/protocol/status/ServerStatus.java +++ b/net/minecraft/network/protocol/status/ServerStatus.java @@ -19,7 +19,8 @@ public record ServerStatus( Optional players, Optional version, Optional favicon, - boolean enforcesSecureChat + boolean enforcesSecureChat, // Leaves - no chat sign + boolean preventsChatReports // Leaves - no chat sign ) { public static final Codec CODEC = RecordCodecBuilder.create( instance -> instance.group( @@ -27,11 +28,18 @@ public record ServerStatus( ServerStatus.Players.CODEC.lenientOptionalFieldOf("players").forGetter(ServerStatus::players), ServerStatus.Version.CODEC.lenientOptionalFieldOf("version").forGetter(ServerStatus::version), ServerStatus.Favicon.CODEC.lenientOptionalFieldOf("favicon").forGetter(ServerStatus::favicon), - Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat) + Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat), // Leaves - no chat sign + Codec.BOOL.lenientOptionalFieldOf("preventsChatReports", false).forGetter(ServerStatus::preventsChatReports) // Leaves - no chat sign ) .apply(instance, ServerStatus::new) ); + // Leaves start - no chat sign + public ServerStatus(Component description, Optional players, Optional version, Optional favicon, boolean enforcesSecureChat) { + this(description, players, version, favicon, enforcesSecureChat, org.leavesmc.leaves.LeavesConfig.mics.noChatSign); + } + // Leaves end - no chat sign + public record Favicon(byte[] iconBytes) { private static final String PREFIX = "data:image/png;base64,"; public static final Codec CODEC = Codec.STRING.comapFlatMap(string -> { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java index 8d73fffb41346851d088ca0dee206661ff85ec29..4fdc743f56cdc4f92bfa8004c33e2f34cc9e9c70 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -781,7 +781,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface // Paper start - Add setting for proxy online mode status return properties.enforceSecureProfile && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() - && this.services.canValidateProfileKeys(); + && this.services.canValidateProfileKeys() && !org.leavesmc.leaves.LeavesConfig.mics.noChatSign; // Leaves - no chat sign // Paper end - Add setting for proxy online mode status } diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java index adb26ae4dfd5dc111cc55000b71c15f95239b090..20b9dfe68dfbcd5bb999ee4ec0500bdf6bc7fdd5 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -323,10 +323,24 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void send(Packet packet) { + // Leaves start - rebuild ClientboundPlayerChatPacket + if (org.leavesmc.leaves.LeavesConfig.mics.noChatSign) { + if (this instanceof ServerGamePacketListenerImpl && packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat) { + packet = new net.minecraft.network.protocol.game.ClientboundSystemChatPacket(chat.chatType().decorate(chat.unsignedContent() != null ? chat.unsignedContent() : Component.literal(chat.body().content())), false); + } + } + // Leaves end - rebuild ClientboundPlayerChatPacket this.send(packet, null); } public void send(Packet packet, @Nullable ChannelFutureListener sendListener) { + // Leaves start - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket + if (org.leavesmc.leaves.LeavesConfig.mics.noChatSign) { + if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket && sendListener != null) { + sendListener = null; + } + } + // Leaves end - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket // CraftBukkit start if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java index 5d1d71858c730c431120d4a66244969ebf2a5164..73f8562658d30ba17d5ecf2c778622e5e75ae135 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -1185,7 +1185,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { - return message.hasSignature() && !message.hasExpiredServer(Instant.now()); + return org.leavesmc.leaves.LeavesConfig.mics.noChatSign || (message.hasSignature() && !message.hasExpiredServer(Instant.now())); // Leaves - No Not Secure } // CraftBukkit start