MixinOnChat.java 1.76 KB
Newer Older
1 2 3
package com.owlmaddie.mixin;

import com.owlmaddie.chat.EntityChatData;
4 5
import com.owlmaddie.commands.ConfigurationHandler;
import com.owlmaddie.network.ServerPackets;
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
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 static com.owlmaddie.network.ServerPackets.BroadcastPlayerMessage;

/**
 * The {@code MixinOnChat} mixin class intercepts chat messages from players, and broadcasts them as chat bubbles
 */
@Mixin(ServerPlayNetworkHandler.class)
public abstract class MixinOnChat {

    @Inject(method = "onChatMessage", at = @At("HEAD"), cancellable = true)
    private void onChatMessage(ChatMessageC2SPacket packet, CallbackInfo ci) {
24 25
        ConfigurationHandler.Config config = new ConfigurationHandler(ServerPackets.serverInstance).loadConfig();
        if (config.getChatBubbles()) {
26

27 28 29
            // Get the player who sent the message
            ServerPlayNetworkHandler handler = (ServerPlayNetworkHandler) (Object) this;
            ServerPlayerEntity player = handler.player;
30

31 32
            // Get the chat message
            String chatMessage = packet.chatMessage();
33

34 35 36 37 38 39 40 41
            // Example: Call your broadcast function
            EntityChatData chatData = new EntityChatData(player.getUuidAsString());
            chatData.currentMessage = chatMessage;
            BroadcastPlayerMessage(chatData, player);

            // Optionally, cancel the event to prevent the default behavior
            //ci.cancel();
        }
42 43
    }
}