From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: etil2jz <81570777+etil2jz@users.noreply.github.com> Date: Tue, 2 Aug 2022 14:48:12 +0200 Subject: [PATCH] Mirai: Configurable chat message signatures Fixed & Updated by Dreeam-qwq Original license: GPLv3 Original project: https://github.com/Dreeam-qwq/Mirai Original license: GPLv3 Original project: https://github.com/etil2jz/Mirai diff --git a/net/minecraft/network/FriendlyByteBuf.java b/net/minecraft/network/FriendlyByteBuf.java index bef92cfa7eb86fbc6bc1b7d862eaca575eeeadec..8817aee7eb61e130aacc4f0df980036b92500ad1 100644 --- a/net/minecraft/network/FriendlyByteBuf.java +++ b/net/minecraft/network/FriendlyByteBuf.java @@ -119,6 +119,17 @@ public class FriendlyByteBuf extends ByteBuf { public void writeJsonWithCodec(Codec codec, T value, int maxLength) { // Paper end - Adventure; add max length parameter DataResult dataResult = codec.encodeStart(JsonOps.INSTANCE, value); + // Leaf start - Configurable chat message signatures + if (!org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled && codec == net.minecraft.network.protocol.status.ServerStatus.CODEC) { + JsonElement element = dataResult.getOrThrow(string -> new EncoderException("Failed to encode: " + string + " " + value)); + + element.getAsJsonObject().addProperty("preventsChatReports", true); + this.writeUtf(GSON.toJson(element)); + + return; + } + // Leaf end - Configurable chat message signatures + this.writeUtf(GSON.toJson(dataResult.getOrThrow(exception -> new EncoderException("Failed to encode: " + exception + " " + value))), maxLength); // Paper - Adventure; add max length parameter } diff --git a/net/minecraft/network/protocol/game/ClientboundLoginPacket.java b/net/minecraft/network/protocol/game/ClientboundLoginPacket.java index 89f06581e2b1f9f0240e7841db2f57dedc5d81b7..ba4ec05a9c9dfa958fdfa4a68ee85bcd9c379883 100644 --- a/net/minecraft/network/protocol/game/ClientboundLoginPacket.java +++ b/net/minecraft/network/protocol/game/ClientboundLoginPacket.java @@ -55,7 +55,7 @@ public record ClientboundLoginPacket( buffer.writeBoolean(this.showDeathScreen); buffer.writeBoolean(this.doLimitedCrafting); this.commonPlayerSpawnInfo.write(buffer); - buffer.writeBoolean(this.enforcesSecureChat); + buffer.writeBoolean(!org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled || this.enforcesSecureChat); // Leaf - Mirai - Configurable chat message signatures } @Override diff --git a/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/net/minecraft/network/protocol/game/ServerboundChatPacket.java index b5afc05924ae899e020c303c8b86398e1d4ab8a0..73c2ed488c34cddbafdcbb6f2636264ebcc7286b 100644 --- a/net/minecraft/network/protocol/game/ServerboundChatPacket.java +++ b/net/minecraft/network/protocol/game/ServerboundChatPacket.java @@ -23,7 +23,7 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt buffer.writeUtf(this.message, 256); buffer.writeInstant(this.timeStamp); buffer.writeLong(this.salt); - buffer.writeNullable(this.signature, MessageSignature::write); + if (org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled) buffer.writeNullable(this.signature, MessageSignature::write); // Leaf - Mirai - Configurable chat message signatures this.lastSeenMessages.write(buffer); } diff --git a/net/minecraft/network/protocol/status/ServerStatus.java b/net/minecraft/network/protocol/status/ServerStatus.java index a491be4250de3199c3e1aa9e5482b568692bd2f5..5db038df25a1b5bf2f7395464250dc0bbf8d8241 100644 --- a/net/minecraft/network/protocol/status/ServerStatus.java +++ b/net/minecraft/network/protocol/status/ServerStatus.java @@ -23,7 +23,10 @@ public record ServerStatus( boolean enforcesSecureChat ) { public static final Codec CODEC = RecordCodecBuilder.create( - instance -> instance.group( + // Leaf start - Mirai - Configurable chat message signatures + instance -> + org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled + ? instance.group( ComponentSerialization.CODEC.lenientOptionalFieldOf("description", CommonComponents.EMPTY).forGetter(ServerStatus::description), ServerStatus.Players.CODEC.lenientOptionalFieldOf("players").forGetter(ServerStatus::players), ServerStatus.Version.CODEC.lenientOptionalFieldOf("version").forGetter(ServerStatus::version), @@ -31,6 +34,15 @@ public record ServerStatus( Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat) ) .apply(instance, ServerStatus::new) + : instance.group( + ComponentSerialization.CODEC.lenientOptionalFieldOf("description", CommonComponents.EMPTY).forGetter(ServerStatus::description), + 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(x -> true) + ) + .apply(instance, ServerStatus::new) + // Leaf end- Mirai - Configurable chat message signatures ); public record Favicon(byte[] iconBytes) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java index 87fc8861948b50361ec04c5a23406d3abdec6eac..77f11179836636424927843f5f10c3fd23d2b2d4 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -614,6 +614,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public boolean enforceSecureProfile() { + if (!org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled) return false; // Leaf - Mirai - Configurable chat message signatures DedicatedServerProperties properties = this.getProperties(); // Paper start - Add setting for proxy online mode status return properties.enforceSecureProfile diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java index 95f89a415f7f7b9d4d7823744cb6bcc6b3886aa5..7f4257870c5fca902403e246b9ce569b20dbb364 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -349,10 +349,30 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void send(Packet packet) { + // Leaf start - Mirai - Configurable chat message signatures + if (!org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled) { + if (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 + ); + this.send(packet); + return; + } + } + // Leaf end - Mirai - Configurable chat message signatures this.send(packet, null); } public void send(Packet packet, @Nullable ChannelFutureListener channelFutureListener) { + // Leaf start - Mirai - Configurable chat message signatures + if (!org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled) { + if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat && channelFutureListener != null) { + this.send(chat); + return; + } + } + // Leaf end - Mirai - Configurable chat message signatures // 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 9026b45b6ee7f53f3a3872cda1a8c3f96eb5b2a7..df532c61dcfedcafd8c6a75bd0f12a58acb9ca00 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -1517,7 +1517,7 @@ public abstract class PlayerList { public void broadcastChatMessage(PlayerChatMessage message, Predicate shouldFilterMessageTo, @Nullable ServerPlayer sender, ChatType.Bound boundChatType, @Nullable Function unsignedFunction) { // Paper end boolean flag = this.verifyChatTrusted(message); - this.server.logChatMessage((unsignedFunction == null ? message.decoratedContent() : unsignedFunction.apply(this.server.console)), boundChatType, flag || !org.galemc.gale.configuration.GaleGlobalConfiguration.get().logToConsole.chat.notSecureMarker ? null : "Not Secure"); // Paper // Gale - do not log Not Secure marker + this.server.logChatMessage((unsignedFunction == null ? message.decoratedContent() : unsignedFunction.apply(this.server.console)), boundChatType, !org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled || flag || !org.galemc.gale.configuration.GaleGlobalConfiguration.get().logToConsole.chat.notSecureMarker ? null : "Not Secure"); // Paper // Gale - do not log Not Secure marker // Leaf - Mirai - Configurable chat message signatures OutgoingChatMessage outgoingChatMessage = OutgoingChatMessage.create(message); boolean flag1 = false; @@ -1542,6 +1542,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { + if (!org.dreeam.leaf.config.modules.network.ChatMessageSignature.enabled) return true; // Leaf - Mirai - Configurable chat message signatures return message.hasSignature() && !message.hasExpiredServer(Instant.now()); }