From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Sun, 26 Mar 2023 13:48:48 +0900 Subject: [PATCH] Implement No Chat Reports diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java index 1f4b64a5f812376c499c98cb4be62469bd0b7dbe..c0bd2997fe3ebbfe926de832a36d209cc875f3e2 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java @@ -147,18 +147,23 @@ public class FriendlyByteBuf extends ByteBuf { public T readJsonWithCodec(Codec codec) { JsonElement jsonelement = (JsonElement) GsonHelper.fromJson(FriendlyByteBuf.GSON, this.readUtf(), JsonElement.class); DataResult dataresult = codec.parse(JsonOps.INSTANCE, jsonelement); - - return Util.getOrThrow(dataresult, (s) -> { - return new DecoderException("Failed to decode json: " + s); - }); + // Plazma start - NCR + T result = Util.getOrThrow(dataresult, (s) -> new DecoderException("Failed to decode json: " + s)); + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.addQueryData() && jsonelement.getAsJsonObject().has("preventsChatReports")) + ((net.minecraft.network.protocol.status.ServerStatus) result).setPreventsChatReports(jsonelement.getAsJsonObject().get("preventsChatReports").getAsBoolean()); + return result; + // Plazma end } public void writeJsonWithCodec(Codec codec, T value) { DataResult dataresult = codec.encodeStart(JsonOps.INSTANCE, value); - this.writeUtf(FriendlyByteBuf.GSON.toJson((JsonElement) Util.getOrThrow(dataresult, (s) -> { - return new EncoderException("Failed to encode: " + s + " " + value); - }))); + // Plazma start - NCR + JsonElement element = Util.getOrThrow(dataresult, (s) -> new EncoderException("Failed to encode: " + s + " " + value)); + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.addQueryData() && codec == net.minecraft.network.protocol.status.ServerStatus.CODEC) + element.getAsJsonObject().addProperty("preventsChatReports", true); + this.writeUtf(FriendlyByteBuf.GSON.toJson(element)); + // Plazma end } public void writeId(IdMap registry, T value) { diff --git a/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java b/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java index e6cc2bab1fde2e8c1394772b99201ea8d7eb8057..2ba3291f6c82f633d7ed7b150f2ae3c28d74b21e 100644 --- a/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java +++ b/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java @@ -64,4 +64,21 @@ public record ServerStatus(Component description, Optional return new ServerStatus.Version(worldVersion.getName(), worldVersion.getProtocolVersion()); } } + + // Plazma start - NCR + public boolean enforcesSecureChat() { + return org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled || this.enforcesSecureChat; + } + + private static boolean preventsChatReports; + + public boolean preventsChatReports() { + if (this.version().isPresent() && this.version().get().protocol() < 759 && this.version().get().protocol() > 0) return true; + return this.preventsChatReports; + } + + public void setPreventsChatReports(boolean prevents) { + this.preventsChatReports = prevents; + } + // Plazma end } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 84bb45aef3c2087cb9c03a99184956c484b3d8e9..778b79ce3530781705f6d6ae11a2631f186e3763 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -684,7 +684,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public boolean enforceSecureProfile() { - return this.getProperties().enforceSecureProfile && this.getProperties().onlineMode; + return !org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled && this.getProperties().enforceSecureProfile && this.getProperties().onlineMode; // Plazma - NCR } protected boolean convertOldUsers() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java index 8f911f589bf04902e38e2c625d84ba0c47cbd9ee..b15de37a06c3efb1c4bc790ccb23ebff3c97d54d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2235,10 +2235,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override public void send(Packet packet) { + // Plazma start - NCR + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.convertToGameMessage() && packet instanceof ClientboundPlayerChatPacket chat) + packet = new ClientboundSystemChatPacket(null, Component.Serializer.toJson(chat.chatType().resolve(this.player.level.registryAccess()).get().decorate(chat.unsignedContent() != null ? chat.unsignedContent() : Component.literal(chat.body().content()))), false); this.send(packet, (PacketSendListener) null); } public void send(Packet packet, @Nullable PacketSendListener callbacks) { + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.convertToGameMessage() && packet instanceof ClientboundPlayerChatPacket p && callbacks != null) { + this.send(p); + return; + } + // Plazma end + // CraftBukkit start if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index b22b86d7f226e0e24d6be27ea33ec9d690f8f238..022da50912d357581b2132cf57e1a767e436022c 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1464,7 +1464,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public - return message.hasSignature() && !message.hasExpiredServer(Instant.now()); + return org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled || (message.hasSignature() && !message.hasExpiredServer(Instant.now())); // Plazma - NCR } // CraftBukkit start diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index 0e8d5b01a673ba826c943fcb33552518022a2ea3..17454a128f7ef53428920f95e4709180fd8efb32 100644 --- a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java +++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java @@ -48,7 +48,17 @@ public class GlobalConfiguration extends ConfigurationPart { public NoChatReports noChatReports; public class NoChatReports extends ConfigurationPart { + public boolean enabled = false; + boolean addQueryData = true; + boolean convertToGameMessage = true; + public boolean addQueryData() { + return enabled && addQueryData; + } + + public boolean convertToGameMessage() { + return enabled && convertToGameMessage; + } } }