From 3a9d0b8f38935638e2b995baa30e19bc1e479b40 Mon Sep 17 00:00:00 2001 From: Erdragh Date: Mon, 27 May 2024 16:53:25 +0200 Subject: [PATCH] Handle messages sent by commands too --- CHANGELOG.md | 1 + .../kotlin/dev/erdragh/astralbot/fabric/BotMod.kt | 6 ++++++ .../astralbot/mixins/forge/PlayerListMixin.java | 11 ++++++++++- .../kotlin/dev/erdragh/astralbot/neoforge/BotMod.kt | 8 ++++++++ .../astralbot/neoforge/event/CommandMessageEvent.kt | 7 +++++++ 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/event/CommandMessageEvent.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index e9a7112..9a861f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Port to 1.20.4 and NeoForge - Removed Forge as a supported Platform for Minecraft > 1.20.1 - JiJ SQLite and Commonmark dependencies, allowing better compatibility and removing the SQLite JDBC dependency +- Handle messages sent by commands too (i.e. `say hello`) # 1.3.0 - Message Embeds to better represent Minecraft messages on Discord diff --git a/fabric/src/main/kotlin/dev/erdragh/astralbot/fabric/BotMod.kt b/fabric/src/main/kotlin/dev/erdragh/astralbot/fabric/BotMod.kt index 295309e..890ed3e 100644 --- a/fabric/src/main/kotlin/dev/erdragh/astralbot/fabric/BotMod.kt +++ b/fabric/src/main/kotlin/dev/erdragh/astralbot/fabric/BotMod.kt @@ -36,6 +36,12 @@ object BotMod : ModInitializer { minecraftHandler?.sendChatToDiscord(null as ServerPlayer?, message) } } + ServerMessageEvents.COMMAND_MESSAGE.register { message, _, _ -> + val content = message.decoratedContent() + if (content !is DiscordMessageComponent) { + minecraftHandler?.sendChatToDiscord(null as ServerPlayer?, content) + } + } ServerPlayConnectionEvents.JOIN.register { packet, _, _ -> minecraftHandler?.onPlayerJoin(packet.player.name.string) diff --git a/neoforge/src/main/java/dev/erdragh/astralbot/mixins/forge/PlayerListMixin.java b/neoforge/src/main/java/dev/erdragh/astralbot/mixins/forge/PlayerListMixin.java index 4193cd1..0ea3b04 100644 --- a/neoforge/src/main/java/dev/erdragh/astralbot/mixins/forge/PlayerListMixin.java +++ b/neoforge/src/main/java/dev/erdragh/astralbot/mixins/forge/PlayerListMixin.java @@ -1,7 +1,11 @@ package dev.erdragh.astralbot.mixins.forge; +import dev.erdragh.astralbot.neoforge.event.CommandMessageEvent; import dev.erdragh.astralbot.neoforge.event.SystemMessageEvent; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.network.chat.ChatType; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.PlayerChatMessage; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.players.PlayerList; import net.neoforged.neoforge.common.NeoForge; @@ -14,8 +18,13 @@ @Mixin(PlayerList.class) public abstract class PlayerListMixin { - @Inject(method = "broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Ljava/util/function/Function;Z)V", at = @At("HEAD"), cancellable = true) + @Inject(method = "broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Ljava/util/function/Function;Z)V", at = @At("HEAD")) private void onSendGameMessage(Component message, Function playerMessageFactory, boolean overlay, CallbackInfo ci) { NeoForge.EVENT_BUS.post(new SystemMessageEvent(message)); } + + @Inject(method = "broadcastChatMessage(Lnet/minecraft/network/chat/PlayerChatMessage;Lnet/minecraft/commands/CommandSourceStack;Lnet/minecraft/network/chat/ChatType$Bound;)V", at = @At("HEAD")) + private void onSendCommandMessage(PlayerChatMessage message, CommandSourceStack source, ChatType.Bound params, CallbackInfo ci) { + NeoForge.EVENT_BUS.post(new CommandMessageEvent(message.decoratedContent())); + } } \ No newline at end of file diff --git a/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/BotMod.kt b/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/BotMod.kt index 8241fcb..39c80df 100644 --- a/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/BotMod.kt +++ b/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/BotMod.kt @@ -6,6 +6,7 @@ import dev.erdragh.astralbot.config.AstralBotConfig import dev.erdragh.astralbot.config.AstralBotTextConfig import dev.erdragh.astralbot.neoforge.event.SystemMessageEvent import dev.erdragh.astralbot.handlers.DiscordMessageComponent +import dev.erdragh.astralbot.neoforge.event.CommandMessageEvent import net.minecraft.server.level.ServerPlayer import net.neoforged.fml.ModLoadingContext import net.neoforged.fml.common.Mod @@ -26,6 +27,7 @@ object BotMod { FORGE_BUS.addListener(::onServerStop) FORGE_BUS.addListener(::onChatMessage) FORGE_BUS.addListener(::onSystemMessage) + FORGE_BUS.addListener(::onCommandMessage) FORGE_BUS.addListener(::onCommandRegistration) FORGE_BUS.addListener(::onPlayerJoin) @@ -54,6 +56,12 @@ object BotMod { } } + private fun onCommandMessage(event: CommandMessageEvent) { + if (event.message !is DiscordMessageComponent) { + minecraftHandler?.sendChatToDiscord(null as ServerPlayer?, event.message) + } + } + private fun onPlayerJoin(event: PlayerEvent.PlayerLoggedInEvent) { minecraftHandler?.onPlayerJoin(event.entity.name.string) } diff --git a/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/event/CommandMessageEvent.kt b/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/event/CommandMessageEvent.kt new file mode 100644 index 0000000..a03bdf1 --- /dev/null +++ b/neoforge/src/main/kotlin/dev/erdragh/astralbot/neoforge/event/CommandMessageEvent.kt @@ -0,0 +1,7 @@ +package dev.erdragh.astralbot.neoforge.event + +import net.minecraft.network.chat.Component +import net.neoforged.bus.api.Event +import net.neoforged.bus.api.ICancellableEvent + +class CommandMessageEvent(val message: Component) : Event(), ICancellableEvent \ No newline at end of file