From 417408b2ea61e59e949b75e8c3da4f6ec01ba10b Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 11 Feb 2022 20:21:35 +0100 Subject: [PATCH] connection util: send chat message --- .../gui/gui/screen/menu/debug/DebugMenu.kt | 3 +-- .../gui/hud/elements/chat/ChatElement.kt | 6 ++--- .../network/connection/play/ConnectionUtil.kt | 22 ++++++++++++++++++ .../commands/commands/CommandSendChat.java | 23 +------------------ 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/debug/DebugMenu.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/debug/DebugMenu.kt index 527c34898..de704c7cb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/debug/DebugMenu.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/debug/DebugMenu.kt @@ -23,7 +23,6 @@ import de.bixilon.minosoft.gui.rendering.gui.gui.GUIBuilder import de.bixilon.minosoft.gui.rendering.gui.gui.screen.menu.Menu import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedGUIElement import de.bixilon.minosoft.modding.event.EventInitiators -import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP import glm_.vec2.Vec2i import glm_.vec3.Vec3d @@ -33,7 +32,7 @@ class DebugMenu(guiRenderer: GUIRenderer) : Menu(guiRenderer) { init { add(TextElement(guiRenderer, "Debug options", HorizontalAlignments.CENTER, false)) add(SpacerElement(guiRenderer, Vec2i(0, 10))) - add(ButtonElement(guiRenderer, "Switch to next gamemode") { connection.sendPacket(ChatMessageC2SP("/gamemode ${connection.player.gamemode.next().name.lowercase()}")) }) + add(ButtonElement(guiRenderer, "Switch to next gamemode") { connection.util.sendChatMessage("/gamemode ${connection.player.gamemode.next().name.lowercase()}") }) add(ButtonElement(guiRenderer, "Hack to next gamemode") { val previous = connection.player.tabListItem.gamemode val next = previous.next() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt index 98e81e49c..454543d24 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/chat/ChatElement.kt @@ -37,7 +37,6 @@ import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker -import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP import de.bixilon.minosoft.util.KUtil.toResourceLocation import glm_.vec2.Vec2d import glm_.vec2.Vec2i @@ -142,8 +141,9 @@ class ChatElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElem } private fun submit() { - if (input.value.isNotBlank()) { - connection.sendPacket(ChatMessageC2SP(input.value)) + val value = input.value + if (value.isNotBlank()) { + connection.util.sendChatMessage(value) } input.value = "" guiRenderer.gui.pop() diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/ConnectionUtil.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/ConnectionUtil.kt index 06e9521f8..017175c81 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/ConnectionUtil.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/ConnectionUtil.kt @@ -17,7 +17,10 @@ import de.bixilon.minosoft.data.text.BaseComponent import de.bixilon.minosoft.data.text.ChatColors import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.gui.rendering.RenderConstants +import de.bixilon.minosoft.modding.event.events.ChatMessageSendEvent import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent +import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType @@ -30,4 +33,23 @@ class ConnectionUtil( connection.fireEvent(InternalMessageReceiveEvent(connection, BaseComponent(RenderConstants.DEBUG_MESSAGES_PREFIX, ChatComponent.of(message).apply { applyDefaultColor(ChatColors.BLUE) }))) Log.log(LogMessageType.CHAT_IN, LogLevels.INFO) { message } } + + fun sendChatMessage(message: String) { + var toSend = message + // remove prefixed spaces + while (toSend.startsWith(' ')) { + toSend = toSend.removeRange(0, 1) + } + if (message.isBlank()) { + throw IllegalArgumentException("Chat message can not be blank!") + } + if (message.contains(ProtocolDefinition.TEXT_COMPONENT_SPECIAL_PREFIX_CHAR)) { + throw IllegalArgumentException("Chat message can not contain chat formatting (${ProtocolDefinition.TEXT_COMPONENT_SPECIAL_PREFIX_CHAR}): $toSend") + } + if (connection.fireEvent(ChatMessageSendEvent(connection, toSend))) { + return + } + Log.log(LogMessageType.CHAT_OUT) { toSend } + connection.sendPacket(ChatMessageC2SP(toSend)) + } } diff --git a/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandSendChat.java b/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandSendChat.java index dc22d789e..8e3fb8bfd 100644 --- a/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandSendChat.java +++ b/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandSendChat.java @@ -19,11 +19,6 @@ import de.bixilon.minosoft.data.commands.CommandNode; import de.bixilon.minosoft.data.commands.CommandRootNode; import de.bixilon.minosoft.data.commands.parser.MessageParser; import de.bixilon.minosoft.data.commands.parser.exceptions.CommandParseException; -import de.bixilon.minosoft.modding.event.events.ChatMessageSendEvent; -import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP; -import de.bixilon.minosoft.util.logging.Log; -import de.bixilon.minosoft.util.logging.LogMessageType; -import org.apache.commons.lang3.StringUtils; public class CommandSendChat extends Command { public static final char[] ILLEGAL_CHAT_CHARS = {'ยง'}; @@ -47,23 +42,7 @@ public class CommandSendChat extends Command { // return; } } - - if (StringUtils.isBlank(message)) { - // throw new IllegalArgumentException(("Chat message is blank!")); - return; - } - for (char illegalChar : ILLEGAL_CHAT_CHARS) { - if (message.indexOf(illegalChar) != -1) { - // throw new IllegalArgumentException(String.format("%s is not allowed in chat", illegalChar)); - return; - } - } - ChatMessageSendEvent event = new ChatMessageSendEvent(connection, message); - if (connection.fireEvent(event)) { - return; - } - Log.log(LogMessageType.CHAT_OUT, message); - connection.sendPacket(new ChatMessageC2SP(event.getMessage())); + connection.getUtil().sendChatMessage(message); }))); return parent; }