Username Highlight

 avatar
unknown
java
23 days ago
4.4 kB
2
Indexable
package me.blindedbythesun.nya.modules;

import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.EnumSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;

import java.util.Locale;

public class UsernameHighlight extends Module {
    private final SettingGroup sgGeneral = settings.getDefaultGroup();

    public enum HighlightColor {
        Black(Formatting.BLACK), DarkBlue(Formatting.DARK_BLUE), DarkGreen(Formatting.DARK_GREEN),
        DarkAqua(Formatting.DARK_AQUA), DarkRed(Formatting.DARK_RED), DarkPurple(Formatting.DARK_PURPLE),
        Gold(Formatting.GOLD), Gray(Formatting.GRAY), DarkGray(Formatting.DARK_GRAY), Blue(Formatting.BLUE),
        Green(Formatting.GREEN), Aqua(Formatting.AQUA), Red(Formatting.RED), LightPurple(Formatting.LIGHT_PURPLE),
        Yellow(Formatting.YELLOW);

        public final Formatting formatting;

        HighlightColor(Formatting formatting) {
            this.formatting = formatting;
        }
    }

    private final Setting<HighlightColor> highlightColor = sgGeneral.add(new EnumSetting.Builder<HighlightColor>()
        .name("highlight-color").description("The color to highlight your username in chat messages")
        .defaultValue(HighlightColor.LightPurple).build());

    private final Setting<Boolean> highlightInBrackets = sgGeneral.add(new BoolSetting.Builder()
        .name("brackets-highlight").description("Highlights your username in brackets").defaultValue(false).build());

    private String nameToHighlight;

    public UsernameHighlight() {
        super(me.blindedbythesun.nya.Addon.CATEGORY, "username-highlight", "Highlights your username in chat messages");
    }

    @EventHandler
    private void onReceiveMessage(ReceiveMessageEvent event) {
        String message = event.getMessage().getString();
        if (!message.toLowerCase(Locale.ROOT).contains(nameToHighlight.toLowerCase(Locale.ROOT))) return;

        event.setMessage(Text.of(highlight(message, nameToHighlight, highlightColor.get().formatting)));
    }

    private String highlight(String message, String target, Formatting color) {
        StringBuilder result = new StringBuilder();
        int lastIndex = 0;

        while (true) {
            int openBracket = message.indexOf('<', lastIndex);
            int closeBracket = message.indexOf('>', openBracket);

            if (openBracket == -1 || closeBracket == -1) {
                result.append(highlightMatches(message.substring(lastIndex), target, color));
                break;
            }

            result.append(highlightMatches(message.substring(lastIndex, openBracket), target, color));

            if (highlightInBrackets.get()) {
                String bracketedText = message.substring(openBracket + 1, closeBracket);
                result.append('<')
                    .append(highlightMatches(bracketedText, target, color))
                    .append('>');
            } else {
                result.append(message, openBracket, closeBracket + 1);
            }

            lastIndex = closeBracket + 1;
        }

        return result.toString();
    }

    private String highlightMatches(String text, String target, Formatting color) {
        StringBuilder result = new StringBuilder();
        String lowerText = text.toLowerCase(Locale.ROOT);
        String lowerTarget = target.toLowerCase(Locale.ROOT);
        int lastIndex = 0;

        while (true) {
            int index = lowerText.indexOf(lowerTarget, lastIndex);
            if (index == -1) break;

            result.append(text, lastIndex, index)
                .append(color)
                .append(text, index, index + target.length())
                .append(Formatting.RESET);

            lastIndex = index + target.length();
        }
        result.append(text.substring(lastIndex));
        return result.toString();
    }

    @Override
    public void onActivate() {
        nameToHighlight = mc.player.getGameProfile().getName();
    }

    @Override
    public void onDeactivate() {
        nameToHighlight = "";
    }
}
Leave a Comment