From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Sun, 19 Mar 2023 19:07:20 +0300 Subject: [PATCH] NoChatReports Implementation idk why, but server status has been updated. waiting for ncr diff --git a/src/main/java/gq/bxteam/divinemc/DivineConfig.java b/src/main/java/gq/bxteam/divinemc/DivineConfig.java --- a/src/main/java/gq/bxteam/divinemc/DivineConfig.java (revision 5273f89dd19146a784cf4c584647befb8099b105) +++ b/src/main/java/gq/bxteam/divinemc/DivineConfig.java (date 1679415878866) @@ -131,4 +131,14 @@ return config.getStringList(key); } + public static boolean noChatReportsEnable = true; + public static boolean noChatReportsConvertToGameMessage = true; + public static boolean noChatReportsAddQueryData = true; + + private static void noChatReportsConfig() { + setComment("no-chat-reports", "[ No Chat Reports ] Player Chat Reporting Control Mod"); + noChatReportsEnable = getBoolean("no-chat-reports.enable", noChatReportsEnable); + noChatReportsConvertToGameMessage = getBoolean("no-chat-reports.convert-to-game-message", noChatReportsConvertToGameMessage) && noChatReportsEnable; + noChatReportsAddQueryData = getBoolean("no-chat-reports.add-query-data", noChatReportsAddQueryData) && noChatReportsEnable; + } } \ No newline at end of file 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 6e0a3086da142f1c42007a16bbec7edbab17da04..60ad75fdf0c43a19cdfaf73fd07ad0a8b4d0da96 100644 --- a/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java +++ b/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java @@ -28,6 +28,14 @@ public class ServerStatus { private String favicon; private boolean enforcesSecureChat; + // DivineMC start - NoChatReports + /** + * Special additional variable that allows the client to know whether server prevents chat reports + * upon pinging it. + */ + private boolean preventsChatReports; + // DivineMC end + @Nullable public Component getDescription() { return this.description; @@ -68,9 +76,23 @@ public class ServerStatus { this.enforcesSecureChat = secureChatEnforced; } + // DivineMC start - NoChatReports public boolean enforcesSecureChat() { - return this.enforcesSecureChat; + return gq.bxteam.divinemc.DivineConfig.noChatReportsConvertToGameMessage ? true : this.enforcesSecureChat; + } + + public boolean preventsChatReports() { + if (this.getVersion() != null && this.getVersion().getProtocol() < 759 + && this.getVersion().getProtocol() > 0) + return true; + + return this.preventsChatReports; + } + + public void setPreventsChatReports(boolean prevents) { + this.preventsChatReports = prevents; } + // DivineMC end public static class Players { private final int maxPlayers; @@ -173,6 +195,12 @@ public class ServerStatus { serverStatus.setEnforcesSecureChat(GsonHelper.getAsBoolean(jsonObject, "enforcesSecureChat")); } + // DivineMC start - NoChatReports + if (jsonObject.has("preventsChatReports")) { + serverStatus.setPreventsChatReports(GsonHelper.getAsBoolean(jsonObject, "preventsChatReports")); + } + // DivineMC end + return serverStatus; } @@ -196,6 +224,12 @@ public class ServerStatus { jsonObject.addProperty("favicon", serverStatus.getFavicon()); } + // DivineMC start - NoChatReports + if (gq.bxteam.divinemc.DivineConfig.noChatReportsAddQueryData) { + jsonObject.addProperty("preventsChatReports", true); + } + // DivineMC end + return jsonObject; } } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 40f11933defbac1a5d4494e643b19af20e5997f1..fc37cbaaf0dc5994ae8e3f7fd5dd087db4e5212c 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -19,6 +19,8 @@ import java.util.Locale; import java.util.Optional; import java.util.function.BooleanSupplier; import javax.annotation.Nullable; + +import gq.bxteam.divinemc.DivineConfig; import net.minecraft.DefaultUncaughtExceptionHandler; import net.minecraft.DefaultUncaughtExceptionHandlerWithName; import net.minecraft.SharedConstants; @@ -642,7 +644,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public boolean enforceSecureProfile() { - return this.getProperties().enforceSecureProfile && this.getProperties().onlineMode; + return DivineConfig.noChatReportsEnable ? false : this.getProperties().enforceSecureProfile && this.getProperties().onlineMode; } 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 2ca19bbe3a71091843fc7175d726c70321d1fee3..83433dc5b9ff683bbb4949e2acfdb14193405a73 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2139,12 +2139,25 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } } + // DivineMC start - NoChatReports @Override public void send(Packet packet) { + if (gq.bxteam.divinemc.DivineConfig.noChatReportsConvertToGameMessage) { + if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat) { + packet = new net.minecraft.network.protocol.game.ClientboundSystemChatPacket(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 (gq.bxteam.divinemc.DivineConfig.noChatReportsConvertToGameMessage) { + if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat && callbacks != null) { + this.send(chat); + return; + } + } // CraftBukkit start if (packet == null || this.processedDisconnect) { // Spigot return; @@ -2166,6 +2179,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic throw new ReportedException(crashreport); } } + // DivineMC end @Override public void handleSetCarriedItem(ServerboundSetCarriedItemPacket packet) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index 68fb745e74ec4a0c367b0d80d7d437bd3b99a10d..cb2016596c3f519f17a0dc5e7bee0ca0c35471ba 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1414,9 +1414,11 @@ public abstract class PlayerList { } + // DivineMC start - NoChatReports public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public - return message.hasSignature() && !message.hasExpiredServer(Instant.now()); + return gq.bxteam.divinemc.DivineConfig.noChatReportsEnable ? true : message.hasSignature() && !message.hasExpiredServer(Instant.now()); } + // DivineMC end // CraftBukkit start public ServerStatsCounter getPlayerStats(ServerPlayer entityhuman) {