UsernameHighlight

 avatar
unknown
java
a month ago
3.3 kB
2
Indexable
package me.blindedbythesun.nya.modules;

import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent;
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.MutableText;
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 String nameToHighlight;

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

    @EventHandler
    private void onReceiveMessage(ReceiveMessageEvent event) {
        Text originalText = event.getMessage();
        String lowerNameToHighlight = nameToHighlight.toLowerCase(Locale.ROOT);

        MutableText result = Text.empty();
        for (Text sibling : originalText.getSiblings()) {
            String content = sibling.getString();
            String lowerContent = content.toLowerCase(Locale.ROOT);

            int startIndex = 0;
            while (true) {
                int index = lowerContent.indexOf(lowerNameToHighlight, startIndex);
                if (index == -1) {
                    result.append(Text.literal(content.substring(startIndex)).setStyle(sibling.getStyle()));
                    break;
                }

                if (index > startIndex) {
                    result.append(Text.literal(content.substring(startIndex, index)).setStyle(sibling.getStyle()));
                }

                result.append(Text.literal(content.substring(index, index + nameToHighlight.length()))
                    .setStyle(sibling.getStyle().withColor(highlightColor.get().formatting)));

                startIndex = index + nameToHighlight.length();
            }
        }

        event.setMessage(result);
    }

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

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