Mimic
For gock_loverunknown
java
9 months ago
4.9 kB
5
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()));
}
}Editor is loading...
Leave a Comment