From 019ad46fe7b2acb30ac664f2d45fb48c22c3698a Mon Sep 17 00:00:00 2001 From: PadBro <64410553+PadBro@users.noreply.github.com> Date: Sun, 4 Jan 2026 00:02:45 +0100 Subject: [PATCH] feat: add copy ip --- .../commands/HandleAltsCommand.java | 21 +++++++++++++++---- .../commands/ListIpsWithMultiplePlayers.java | 20 +++++++++++++++--- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/xadale/playerlogger/commands/HandleAltsCommand.java b/src/main/java/com/xadale/playerlogger/commands/HandleAltsCommand.java index 8c39f09..f6ce377 100644 --- a/src/main/java/com/xadale/playerlogger/commands/HandleAltsCommand.java +++ b/src/main/java/com/xadale/playerlogger/commands/HandleAltsCommand.java @@ -12,10 +12,13 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; - import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.HoverEvent; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; public class HandleAltsCommand { @@ -67,7 +70,7 @@ public static int execute(CommandContext context, File logF // Query is a username Set ips = playerToIps.get(query); if (ips != null) { - StringBuilder response = new StringBuilder(); + MutableText response = Text.literal(""); if (Permissions.check(source, "altx.viewips", 4)) { response .append("§bPlayer §3") @@ -82,13 +85,13 @@ public static int execute(CommandContext context, File logF response.append("\n"); if (Permissions.check(source, "altx.viewips", 4)) { - response.append("§3- (§b").append(ip).append("§3): §f"); + response.append("§3- (§b").append(getIpText(ip)).append("§3): §f"); } else { response.append("§3- §f"); } response.append(String.join(", ", players)); } - context.getSource().sendFeedback(() -> Text.literal(response.toString()), false); + context.getSource().sendFeedback(() -> response, false); } else { context .getSource() @@ -97,6 +100,16 @@ public static int execute(CommandContext context, File logF return 1; } + private static MutableText getIpText(String ip) { + return Text.literal(ip) + .styled( + style -> + style + .withColor(Formatting.AQUA) // §b + .withClickEvent(new ClickEvent.CopyToClipboard(ip)) + .withHoverEvent(new HoverEvent.ShowText(Text.literal("Copy")))); + } + private static void readLogFile( Map> ipToPlayers, Map> playerToIps, File logFile) throws IOException { diff --git a/src/main/java/com/xadale/playerlogger/commands/ListIpsWithMultiplePlayers.java b/src/main/java/com/xadale/playerlogger/commands/ListIpsWithMultiplePlayers.java index 313e1f1..24914a0 100644 --- a/src/main/java/com/xadale/playerlogger/commands/ListIpsWithMultiplePlayers.java +++ b/src/main/java/com/xadale/playerlogger/commands/ListIpsWithMultiplePlayers.java @@ -11,7 +11,11 @@ import java.util.Set; import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.HoverEvent; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; public class ListIpsWithMultiplePlayers { public static int execute(CommandContext context, File logFile) { @@ -28,7 +32,7 @@ public static int execute(CommandContext context, File logF } // Filter and build the result - StringBuilder response = new StringBuilder("§bIPs with two or more users:"); + MutableText response = Text.literal("§bIPs with two or more users:"); boolean found = false; for (Map.Entry> entry : ipToPlayers.entrySet()) { @@ -36,7 +40,7 @@ public static int execute(CommandContext context, File logF found = true; response.append("\n"); if (Permissions.check(source, "altx.viewips", 4)) { - response.append("§3- (§b").append(entry.getKey()).append("§3): §f"); + response.append("§3- (§b").append(getIpText(entry.getKey())).append("§3): §f"); } else { response.append("§3- §f"); } @@ -49,11 +53,21 @@ public static int execute(CommandContext context, File logF } // Send the response - context.getSource().sendFeedback(() -> Text.literal(response.toString()), false); + context.getSource().sendFeedback(() -> response, false); return 1; } + private static MutableText getIpText(String ip) { + return Text.literal(ip) + .styled( + style -> + style + .withColor(Formatting.AQUA) // §b + .withClickEvent(new ClickEvent.CopyToClipboard(ip)) + .withHoverEvent(new HoverEvent.ShowText(Text.literal("Copy")))); + } + private static void readLogFile(File logFile, Map> ipToPlayers) throws IOException { // Load the IP-to-players map from the log file