Username Highlight
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