Mimic

For gock_lover
 avatar
unknown
java
a month ago
4.9 kB
3
Indexable
package 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