aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/notenoughupdates/mixins/MixinMessageHandler.kt
blob: b6151b9d4c7783659e6f4a8872887643846067d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package moe.nea.notenoughupdates.mixins

import org.spongepowered.asm.mixin.Mixin
import org.spongepowered.asm.mixin.injection.At
import org.spongepowered.asm.mixin.injection.Inject
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo
import net.minecraft.client.network.message.MessageHandler
import net.minecraft.network.message.MessageType
import net.minecraft.network.message.SignedMessage
import net.minecraft.text.Text
import moe.nea.notenoughupdates.events.ServerChatLineReceivedEvent

@Mixin(MessageHandler::class)
class MixinMessageHandler {
    @Inject(method = ["onChatMessage"], at = [At("HEAD")], cancellable = true)
    fun onOnChatMessage(message: SignedMessage, params: MessageType.Parameters, ci: CallbackInfo) {
        val decoratedText = params.applyChatDecoration(message.unsignedContent.orElse(message.content))
        val event = ServerChatLineReceivedEvent(decoratedText)
        if (ServerChatLineReceivedEvent.publish(event).cancelled) {
            ci.cancel()
        }
    }

    @Inject(method = ["onGameMessage"], at = [At("HEAD")], cancellable = true)
    fun onOnGameMessage(message: Text, overlay: Boolean, ci: CallbackInfo) {
        if (!overlay) {
            val event = ServerChatLineReceivedEvent(message)
            if (ServerChatLineReceivedEvent.publish(event).cancelled) {
                ci.cancel()
            }
        }
    }
}