From ea65542c1b63d7ee37025837bf205e55ace0c863 Mon Sep 17 00:00:00 2001 From: Kevin <115616336+lag@users.noreply.github.com> Date: Fri, 6 Mar 2026 09:52:28 -0600 Subject: Add Chat / Pastes / Formatting (#682) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial fixes for ContainerSetSlotPacket and CraftItemPacket * Chat: paste, history, ยง formatting, 1-9 block when open (Windows64) Made-with: Cursor * static_cast refactor --- Minecraft.Client/PlayerConnection.cpp | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'Minecraft.Client/PlayerConnection.cpp') diff --git a/Minecraft.Client/PlayerConnection.cpp b/Minecraft.Client/PlayerConnection.cpp index ab8ae20b..9404a5d6 100644 --- a/Minecraft.Client/PlayerConnection.cpp +++ b/Minecraft.Client/PlayerConnection.cpp @@ -21,6 +21,8 @@ #include "..\Minecraft.World\AABB.h" #include "..\Minecraft.World\Pos.h" #include "..\Minecraft.World\SharedConstants.h" +#include "..\Minecraft.World\ChatPacket.h" +#include "..\Minecraft.World\StringHelpers.h" #include "..\Minecraft.World\Socket.h" #include "..\Minecraft.World\Achievements.h" #include "..\Minecraft.World\net.minecraft.h" @@ -607,38 +609,26 @@ void PlayerConnection::handleSetCarriedItem(shared_ptr pac void PlayerConnection::handleChat(shared_ptr packet) { - // 4J - TODO -#if 0 - wstring message = packet->message; + if (packet->m_stringArgs.empty()) return; + wstring message = trimString(packet->m_stringArgs[0]); if (message.length() > SharedConstants::maxChatLength) { - disconnect(L"Chat message too long"); + disconnect(DisconnectPacket::eDisconnect_None); // or a specific reason return; } - message = message.trim(); - for (int i = 0; i < message.length(); i++) - { - if (SharedConstants.acceptableLetters.indexOf(message.charAt(i)) < 0 && (int) message.charAt(i) < 32) - { - disconnect(L"Illegal characters in chat"); - return; - } - } - - if (message.startsWith("/")) + // Optional: validate characters (acceptableLetters) + if (message.length() > 0 && message[0] == L'/') { handleCommand(message); - } else { - message = "<" + player.name + "> " + message; - logger.info(message); - server.players.broadcastAll(new ChatPacket(message)); + return; } + wstring formatted = L"<" + player->name + L"> " + message; + server->getPlayers()->broadcastAll(shared_ptr(new ChatPacket(formatted))); chatSpamTickCount += SharedConstants::TICKS_PER_SECOND; if (chatSpamTickCount > SharedConstants::TICKS_PER_SECOND * 10) { - disconnect("disconnect.spam"); + disconnect(DisconnectPacket::eDisconnect_None); // spam } -#endif } void PlayerConnection::handleCommand(const wstring& message) -- cgit v1.2.3