diff options
Diffstat (limited to 'src/main/java/org/polyfrost/chatting/mixin/ChatLineMixin.java')
-rw-r--r-- | src/main/java/org/polyfrost/chatting/mixin/ChatLineMixin.java | 91 |
1 files changed, 34 insertions, 57 deletions
diff --git a/src/main/java/org/polyfrost/chatting/mixin/ChatLineMixin.java b/src/main/java/org/polyfrost/chatting/mixin/ChatLineMixin.java index 2e5f21c..cde09ea 100644 --- a/src/main/java/org/polyfrost/chatting/mixin/ChatLineMixin.java +++ b/src/main/java/org/polyfrost/chatting/mixin/ChatLineMixin.java @@ -7,28 +7,23 @@ package org.polyfrost.chatting.mixin; import org.polyfrost.chatting.config.ChattingConfig; import org.polyfrost.chatting.hook.ChatLineHook; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ChatLine; -import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.util.IChatComponent; -import org.jetbrains.annotations.Nullable; +import org.polyfrost.chatting.utils.ChatHeadHooks; 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 java.lang.ref.WeakReference; -import java.util.HashMap; -import java.util.Map; @Mixin(ChatLine.class) public class ChatLineMixin implements ChatLineHook { private boolean detected = false; - private boolean first = true; + private boolean firstDetection = true; private NetworkPlayerInfo playerInfo; private NetworkPlayerInfo detectedPlayerInfo; - private static NetworkPlayerInfo lastPlayerInfo; private static long lastUniqueId = 0; private long uniqueId = 0; @@ -37,60 +32,17 @@ public class ChatLineMixin implements ChatLineHook { lastUniqueId++; uniqueId = lastUniqueId; chatLines.add(new WeakReference<>((ChatLine) (Object) this)); - NetHandlerPlayClient netHandler = Minecraft.getMinecraft().getNetHandler(); - if (netHandler == null) return; - Map<String, NetworkPlayerInfo> nicknameCache = new HashMap<>(); - try { - for (String word : iChatComponent.getFormattedText().split("(ยง.)|\\W")) { - if (word.isEmpty()) continue; - playerInfo = netHandler.getPlayerInfo(word); - if (playerInfo == null) { - playerInfo = getPlayerFromNickname(word, netHandler, nicknameCache); - } - if (playerInfo != null) { - detectedPlayerInfo = playerInfo; - detected = true; - if (playerInfo == lastPlayerInfo) { - first = false; - if (ChattingConfig.INSTANCE.getHideChatHeadOnConsecutiveMessages()) { - playerInfo = null; - } - } else { - lastPlayerInfo = playerInfo; - } - break; - } - } - } catch (Exception ignored) { - } + ChatHeadHooks.INSTANCE.detect(iChatComponent.getFormattedText(), (ChatLine) (Object) this); } - @Nullable - private static NetworkPlayerInfo getPlayerFromNickname(String word, NetHandlerPlayClient connection, Map<String, NetworkPlayerInfo> nicknameCache) { - if (nicknameCache.isEmpty()) { - for (NetworkPlayerInfo p : connection.getPlayerInfoMap()) { - IChatComponent displayName = p.getDisplayName(); - if (displayName != null) { - String nickname = displayName.getUnformattedTextForChat(); - if (word.equals(nickname)) { - nicknameCache.clear(); - return p; - } - - nicknameCache.put(nickname, p); - } - } - } else { - // use prepared cache - return nicknameCache.get(word); - } - - return null; + @Override + public boolean isDetected() { + return detected; } @Override - public boolean hasDetected() { - return detected; + public void setDetected(boolean detected) { + this.detected = detected; } @Override @@ -99,8 +51,33 @@ public class ChatLineMixin implements ChatLineHook { } @Override + public void setPlayerInfo(NetworkPlayerInfo playerInfo) { + this.playerInfo = playerInfo; + } + + @Override + public NetworkPlayerInfo getDetectedPlayerInfo() { + return detectedPlayerInfo; + } + + @Override + public void setDetectedPlayerInfo(NetworkPlayerInfo detectedPlayerInfo) { + this.detectedPlayerInfo = detectedPlayerInfo; + } + + @Override + public boolean isFirstDetection() { + return firstDetection; + } + + @Override + public void setFirstDetection(boolean firstDetection) { + this.firstDetection = firstDetection; + } + + @Override public void updatePlayerInfo() { - if (ChattingConfig.INSTANCE.getHideChatHeadOnConsecutiveMessages() && !first) { + if (ChattingConfig.INSTANCE.getHideChatHeadOnConsecutiveMessages() && !firstDetection) { playerInfo = null; } else { playerInfo = detectedPlayerInfo; |