- feat: Фаза 1 ребрендинг combatant → lovisual + восстановление config - refactor: Фаза 2 — выкинуть Runtime/JarReplacement, заменить на Lifecycle - refactor: Фаза 3.5 — удалить читерские модули, ESP под легит - refactor: Фаза 3 — разбить Renderer2D (3379→2150 фасад + 14 хелперов ≤200) - refactor: Фаза 3 — разбить BetterChatRenderer (2870→210 фасад + 21 хелпер ≤200) - refactor: Фаза 3 — разбить UnifiedSettingRenderer (2798→208 фасад + 24 хелпера ≤200) - refactor: Фаза 3 — разбить ClickGuiRenderer (1887→542 фасад + 15 хелперов ≤200) - refactor: Фаза 3 — разбить NameTags (1791→438 фасад + 11 хелперов ≤200) - refactor: Фаза 3 — разбить TargetHud (1655→340 фасад + 11 хелперов ≤200) - refactor: Фаза 3 — разбить ESP (1538→269 фасад + 11 хелперов ≤200)
87 lines
4 KiB
Java
87 lines
4 KiB
Java
/*
|
|
* This file is part of the LoVisual Client distribution.
|
|
* Copyright (c) 2026 pivosos2007.
|
|
*
|
|
* Licensed under the GNU General Public License v3.0.
|
|
*/
|
|
|
|
package dev.loki.lovisual.mixins;
|
|
|
|
import net.minecraft.client.gui.Font;
|
|
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
|
import net.minecraft.client.gui.components.ChatComponent;
|
|
import net.minecraft.client.gui.components.ChatComponent.DisplayMode;
|
|
import net.minecraft.client.multiplayer.chat.GuiMessageSource;
|
|
import net.minecraft.client.multiplayer.chat.GuiMessageTag;
|
|
import net.minecraft.client.multiplayer.chat.GuiMessage;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.network.chat.MessageSignature;
|
|
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 dev.loki.lovisual.features.command.CommandOutput;
|
|
import dev.loki.lovisual.features.gui.chat.BetterChatStoreManager;
|
|
import dev.loki.lovisual.features.gui.hud.draggable.impl.BetterChat;
|
|
import dev.loki.lovisual.features.module.Modules;
|
|
import dev.loki.lovisual.features.module.modules.misc.MessageFilter;
|
|
import dev.loki.lovisual.Lifecycle;
|
|
|
|
@Mixin(ChatComponent.class)
|
|
public class ChatComponentMixin {
|
|
|
|
@Inject(
|
|
method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/multiplayer/chat/GuiMessageSource;Lnet/minecraft/client/multiplayer/chat/GuiMessageTag;)V",
|
|
at = @At("HEAD"),
|
|
cancellable = true
|
|
)
|
|
private void lovisual$filterChatFull(Component message,
|
|
MessageSignature signatureData,
|
|
GuiMessageSource source,
|
|
GuiMessageTag indicator,
|
|
CallbackInfo ci) {
|
|
if (!Lifecycle.canRunHud()) return;
|
|
MessageFilter messageFilter = Modules.get(MessageFilter.class);
|
|
if (messageFilter != null && messageFilter.shouldHideChat(message)) {
|
|
ci.cancel();
|
|
return;
|
|
}
|
|
if (!CommandOutput.isLoVisualMessage(message)) {
|
|
BetterChatStoreManager.addMessage(message);
|
|
}
|
|
}
|
|
|
|
@Inject(method = "logChatMessage(Lnet/minecraft/client/multiplayer/chat/GuiMessage;)V", at = @At("HEAD"), cancellable = true)
|
|
private void lovisual$commands$suppressClientLog(GuiMessage message, CallbackInfo ci) {
|
|
if (message != null && CommandOutput.isLoVisualMessage(message.content())) {
|
|
ci.cancel();
|
|
}
|
|
}
|
|
|
|
@Inject(method = "clearMessages(Z)V", at = @At("TAIL"))
|
|
private void lovisual$betterChat$clear(boolean clearHistory, CallbackInfo ci) {
|
|
if (!Lifecycle.canRunHud()) return;
|
|
if (!BetterChat.isActive()) return;
|
|
// Never wipe BetterChat store on vanilla clear; just persist to disk.
|
|
BetterChatStoreManager.flushActive();
|
|
}
|
|
|
|
@Inject(method = "extractRenderState(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/gui/Font;IIILnet/minecraft/client/gui/components/ChatComponent$DisplayMode;Z)V",
|
|
at = @At("HEAD"), cancellable = true)
|
|
private void lovisual$betterChat$hideVanilla(GuiGraphicsExtractor context,
|
|
Font textRenderer,
|
|
int currentTick,
|
|
int mouseX,
|
|
int mouseY,
|
|
DisplayMode displayMode,
|
|
boolean inChat,
|
|
CallbackInfo ci) {
|
|
if (!Lifecycle.canRunHud()) return;
|
|
if (!BetterChat.isActive()) return;
|
|
BetterChat cfg = BetterChat.get();
|
|
if (cfg != null && cfg.hideVanilla()) {
|
|
ci.cancel();
|
|
}
|
|
}
|
|
}
|
|
|