From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Thu, 28 Sep 2023 11:47:50 +0900 Subject: [PATCH] Implement No Chat Reports Implemented: 644bb6bb4a8012c75900c643d9863fe92c799e1d diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java index bdcfd80f937c34956911373905d66424bbff8e1d..6c575aeeef323c8eb0837eb9d9eea8fcff21da17 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java @@ -145,9 +145,13 @@ public class FriendlyByteBuf extends ByteBuf { // Paper end - Adventure; add max length parameter 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); - })), maxLength); // Paper - Adventure; add max length parameter + // Plazma start - Implement No Chat Reports + JsonElement element = Util.getOrThrow(dataresult, s -> new EncoderException("Failed to encode: " + s + " " + value)); + if (codec == net.minecraft.network.protocol.status.ServerStatus.CODEC + && org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.queryData()) + element.getAsJsonObject().addProperty("preventsChatReports", true); + this.writeUtf(GSON.toJson(element), maxLength); + // Plazma end - Implement No Chat Reports } public void writeId(IdMap registry, T value) { diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java index b8c1f3b9afddc87d56541c8af63cffecfcdd2653..4fe3de84fbbd16ecfe0b27922d5bfeaa9c89f61b 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java @@ -24,4 +24,13 @@ public record ServerboundChatCommandPacket(String command, Instant timeStamp, lo public void handle(ServerGamePacketListener listener) { listener.handleChatCommand(this); } + + // Plazma start - Implement No Chat Reports + @Override + public ArgumentSignatures argumentSignatures() { + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled) + return ArgumentSignatures.EMPTY; + return this.argumentSignatures; + } + // Plazma end - Implement No Chat Reports } diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java index d1d2fc0c57523c1abf1e8bfec913c78927c3dafc..bd69821b153b692b508505264899bdfda4805f0f 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java @@ -25,4 +25,12 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt public void handle(ServerGamePacketListener listener) { listener.handleChat(this); } + + // Plazma start - Implement No Chat Reports + @Override + public @Nullable MessageSignature signature() { + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled) return null; + return this.signature; + } + // Plazma end - Implement No Chat Reports } diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..587d89d67afe9108b5e810463fb3cb21f1b8accf 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java @@ -16,6 +16,15 @@ public record ServerboundChatSessionUpdatePacket(RemoteChatSession.Data chatSess @Override public void handle(ServerGamePacketListener listener) { + // Plazma start - Implement No Chat Reports + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.requireModInstallation()) { + ((net.minecraft.server.network.ServerGamePacketListenerImpl) listener).disconnect( + net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.requireModInstallation.message), + org.bukkit.event.player.PlayerKickEvent.Cause.NCR_NOT_INSTALLED + ); + return; + } + // Plazma end - Implement No Chat Reports listener.handleChatSessionUpdate(this); } } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 84cf2b2e289af0a43c9cc64a9c7e045ffaf9c62b..3b7a0e6220e93157b171d227676147b0cb481d97 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -681,6 +681,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public boolean enforceSecureProfile() { + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled) return false; // Plazma - Implement No Chat Reports DedicatedServerProperties dedicatedserverproperties = this.getProperties(); // Paper start - Add setting for proxy online mode status diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java index 02e65b0bd212d46855baee48fab35dc95a88b43f..59c96512dcdac551e9919c3893e1340f86e3e861 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -271,10 +271,31 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void send(Packet packet) { + // Plazma start - Implement No Chat Reports + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.convertToSystemMessage() + && this instanceof ServerGamePacketListenerImpl impl + && packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket p) { + impl.send(new net.minecraft.network.protocol.game.ClientboundSystemChatPacket( + p.chatType().resolve(impl.player.level().registryAccess()) + .orElseThrow().decorate(p.unsignedContent() != null ? p.unsignedContent() : Component.literal(p.body().content())), + false + )); + return; + } + // Plazma end - Implement No Chat Reports this.send(packet, (PacketSendListener) null); } public void send(Packet packet, @Nullable PacketSendListener callbacks) { + // Plazma start - Implement No Chat Reports + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.convertToSystemMessage() + && callbacks != null + && this instanceof ServerGamePacketListenerImpl impl + && packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket p) { + impl.send(p); + return; + } + // Plazma end - Implement No Chat Reports // 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 ada7af155d02b580b8262ff4ca37b44d79792cec..d8b0f270369e28da1226cd2ad4480dea3f347593 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1498,6 +1498,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled) return true; // Plazma - Implement No Chat Reports return message.hasSignature() && !message.hasExpiredServer(Instant.now()); } diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index 832fef7f967f5497d2ddf20db3de8036805e27e3..54bf494356f3c224f86d06462f2686023da9ccc5 100644 --- a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java +++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java @@ -55,4 +55,22 @@ public class GlobalConfiguration extends ConfigurationPart { } + public NoChatReports noChatReports; + public class NoChatReports extends ConfigurationPart { + + public boolean enabled = false; + boolean queryData = true; public boolean queryData() { return this.enabled && this.queryData; } + boolean convertToSystemMessage = true; public boolean convertToSystemMessage() { return this.enabled && this.convertToSystemMessage; } + public boolean requireModInstallation() { return this.enabled && this.requireModInstallation.enabled; } + + public RequireModInstallation requireModInstallation; + public class RequireModInstallation extends ConfigurationPart { + + boolean enabled = false; + public String message = "You do not have No Chat Reports, and this server is configured to require it on client!"; + + } + + } + }