171 lines
9.9 KiB
Diff
171 lines
9.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: AlphaKR93 <dev@alpha93.kr>
|
|
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<JsonElement> 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 <T> void writeId(IdMap<T> 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 fa5107deb090a779ddc2fdd0fd6de05e1fcf85b9..901408f39509fab160180e13dcee6499542b49ca 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 3803a04804fc11553c85507a257939552ce4890f..56ee7057defed5c9281aa557d20608c275fac9d6 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -1499,6 +1499,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!";
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
}
|