Mimic
For gock_loverpackage me.blindedbythesun.nya.modules; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.blindedbythesun.nya.Addon; import me.blindedbythesun.nya.modules.notifications.NotificationType; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.settings.StringSetting; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket; public class Mimic extends Module { private final SettingGroup sgGeneral = this.settings.getDefaultGroup(); private final Setting<String> target = sgGeneral.add(new StringSetting.Builder() .name("Target Username") .description("The username of the player whose messages you want to mimic") .defaultValue("popbob") .build()); private final Setting<Boolean> greenText = sgGeneral.add(new BoolSetting.Builder() .name("Green Text") .description("Enables green text for mimicked messages by adding a > prefix") .defaultValue(false) .build()); private final Setting<Boolean> antiTrolling = sgGeneral.add(new BoolSetting.Builder() .name("Anti Troll") .description("Protect yourself from being trolled by replacing your name with the targets") .defaultValue(true) .build()); private final Setting<Boolean> privateMessageEnabled = sgGeneral.add(new BoolSetting.Builder() .name("Enable Private Message") .description("Enable sending a private message to the mimicked player") .defaultValue(false) .build()); private final Setting<String> privateMessageContent = sgGeneral.add(new StringSetting.Builder() .name("Private Message Text") .description("The private message to send to the mimicked player") .defaultValue("nya") .visible(privateMessageEnabled::get) .build()); public Mimic() { super(Addon.CATEGORY, "mimic", "Repeats messages of a specified player"); } @Override public void onActivate() { String trimmedTarget = target.get().trim(); if (trimmedTarget.isEmpty()) { notify("Target name is empty, please set a player name"); this.toggle(); return; } if (!isPlayerOnline(trimmedTarget)) { notify("Your mimic target, " + trimmedTarget + ", is not online"); } } @EventHandler public void onPacket(PacketEvent.Receive event) { if (!(event.packet instanceof GameMessageS2CPacket packet)) return; String formattedMessage = trimMessage(packet.content()); if (formattedMessage == null || formattedMessage.isEmpty()) return; String senderName = extractSenderName(formattedMessage); if (!senderName.equalsIgnoreCase(target.get().trim())) return; String messageContent = extractMessageContent(formattedMessage); if (messageContent == null || messageContent.isEmpty()) return; if (antiTrolling.get()) { messageContent = messageContent.replaceAll("(?i)" + Pattern.quote(mc.player.getName().getString()), Matcher.quoteReplacement(target.get().trim())); } sendMessage(messageContent); } private void sendMessage(String messageContent) { String finalMessage = greenText.get() ? ">" + messageContent : messageContent; mc.player.networkHandler.sendChatMessage(finalMessage); if (privateMessageEnabled.get() && !privateMessageContent.get().trim().isEmpty()) { mc.player.networkHandler.sendCommand("w " + target.get().trim() + " " + privateMessageContent.get().trim()); } } private String trimMessage(net.minecraft.text.Text content) { return content == null ? null : content.getString().trim(); } private void notify(String message) { if (Addon.notifications.isActive()) { Addon.notifications.addNotification("Mimic", message, 4000, NotificationType.WARNING); } } private String extractSenderName(String message) { int endIndex = message.indexOf(">"); return (message.startsWith("<") && endIndex > 1) ? message.substring(1, endIndex).trim() : ""; } private String extractMessageContent(String message) { int startIndex = message.indexOf(">"); return (startIndex > -1 && startIndex < message.length() - 2) ? message.substring(startIndex + 2).trim() : ""; } private boolean isPlayerOnline(String playerName) { return mc.getNetworkHandler().getPlayerList().stream() .anyMatch(entry -> entry.getProfile().getName().equalsIgnoreCase(playerName.trim())); } }
Leave a Comment