diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index 808cf0f..289b500 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -4,6 +4,7 @@ import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker; import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; import eu.mhsl.craftattack.spawn.appliances.countdown.Countdown; +import eu.mhsl.craftattack.spawn.appliances.debug.Debug; import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist; import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear; import eu.mhsl.craftattack.spawn.config.Configuration; @@ -32,6 +33,8 @@ public final class Main extends JavaPlugin { new Countdown(), new Tablist(), new ChatMessages() + new ChatMessages(), + new Debug() ); Bukkit.getLogger().info("Loading appliances..."); appliances.forEach(appliance -> { diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/debug/Debug.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/debug/Debug.java new file mode 100644 index 0000000..4b1e94e --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/debug/Debug.java @@ -0,0 +1,14 @@ +package eu.mhsl.craftattack.spawn.appliances.debug; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.appliances.debug.command.UserInfoCommand; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +public class Debug extends Appliance { + @Override + protected @NotNull List> commands() { + return List.of(new UserInfoCommand()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/debug/command/UserInfoCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/debug/command/UserInfoCommand.java new file mode 100644 index 0000000..51f958b --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/debug/command/UserInfoCommand.java @@ -0,0 +1,82 @@ +package eu.mhsl.craftattack.spawn.appliances.debug.command; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.appliances.debug.Debug; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Stream; + +public class UserInfoCommand extends ApplianceCommand { + public UserInfoCommand() { + super("userInfo"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if(args.length != 1) { + sender.sendMessage(Component.text("Bitte gib einen Nutzernamen an.", NamedTextColor.RED)); + return; + } + + OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); + + sender.sendMessage( + Component.text() + .appendNewline() + .append(Component.text("Informationen zu: ", NamedTextColor.GOLD)) + .append( + Component + .text(Objects.requireNonNull(player.getName()), NamedTextColor.YELLOW) + .clickEvent(ClickEvent.copyToClipboard(Objects.requireNonNull(player.getName()))) + ) + .appendNewline() + .append( + Component + .text("UUID: " + player.getUniqueId(), NamedTextColor.GRAY) + .clickEvent(ClickEvent.copyToClipboard(player.getUniqueId().toString())) + ) + .appendNewline() + .append( + Component + .text("Erster Besuch: " + formatUnixTimestamp(player.getFirstPlayed()), NamedTextColor.GRAY) + .clickEvent(ClickEvent.copyToClipboard(String.valueOf(player.getFirstPlayed()))) + ) + .appendNewline() + .append( + Component + .text("Letzter Besuch: " + formatUnixTimestamp(player.getLastSeen()), NamedTextColor.GRAY) + .clickEvent(ClickEvent.copyToClipboard(String.valueOf(player.getLastSeen()))) + ) + .appendNewline() + ); + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if(args.length < 2) { + return Stream.concat( + Bukkit.getOnlinePlayers().stream().map(Player::getName), + Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getName) + ).toList(); + } + + return new ArrayList<>(); + } + + private String formatUnixTimestamp(long timestamp) { + DateFormat format = new SimpleDateFormat("E dd.MM.yyyy H:m:s"); + return format.format(new Date(timestamp)); + } +}