Files
ChatPlus/src/main/java/cn/revaria/chatplus/mixin/ChatMixin.java
T
CPTProgrammer d5f37d5e07 Rewrite entire project for v1.0.0
- Remove legacy code and replace with new implementation
- Update version to 1.0.0
- Adjust build configurations and dependencies.
2025-04-21 04:31:40 +08:00

44 lines
2.0 KiB
Java

package cn.revaria.chatplus.mixin;
#if MC_VER <= MC_1_19
import net.minecraft.server.filter.FilteredMessage;
import net.minecraft.util.registry.RegistryKey;
#endif
import cn.revaria.chatplus.plugin.annotation.DisableIfModsLoaded;
import net.minecraft.network.message.MessageType;
import net.minecraft.network.message.SignedMessage;
import net.minecraft.server.PlayerManager;
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.Redirect;
import static cn.revaria.chatplus.util.TextStyleFormatter.applyStyle;
@DisableIfModsLoaded("styledchat")
@Mixin(ServerPlayNetworkHandler.class)
public abstract class ChatMixin {
@Redirect(method = "handleDecoratedMessage", at = @At(value = "INVOKE", target =
#if MC_VER <= MC_1_19
"Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/server/filter/FilteredMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/util/registry/RegistryKey;)V"
#else
"Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V"
#endif
))
#if MC_VER <= MC_1_19
private void replaceText(PlayerManager instance, FilteredMessage<SignedMessage> message, ServerPlayerEntity sender, RegistryKey<MessageType> typeKey) {
var newMessage = new FilteredMessage<>(
message.raw().withUnsigned(applyStyle(message.raw().getContent(), sender)),
message.filtered() != null ? message.filtered().withUnsigned(applyStyle(message.filtered().getContent(), sender)) : null
);
instance.broadcast(newMessage, sender, typeKey);
}
#else
private void replaceText(PlayerManager instance, SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters params) {
instance.broadcast(message.withUnsignedContent(applyStyle(message.getContent(), sender)), sender, params);
}
#endif
}