src/main/java/de/viper/survivalplus/commands/FriendCommand.java aktualisiert

This commit is contained in:
2025-08-04 05:07:50 +00:00
parent 851ec03788
commit 7700c588ff

View File

@@ -1,343 +1,423 @@
package de.viper.survivalplus.commands; package de.viper.survivalplus.commands;
import org.bukkit.Bukkit; import net.md_5.bungee.api.chat.ClickEvent;
import org.bukkit.ChatColor; import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.command.Command; import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.Command;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player; import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import java.io.File; import org.bukkit.plugin.java.JavaPlugin;
import java.io.IOException;
import java.util.ArrayList; import java.io.File;
import java.util.List; import java.io.IOException;
import java.util.UUID; import java.text.SimpleDateFormat;
import java.util.logging.Logger; import java.util.ArrayList;
import java.util.Date;
public class FriendCommand implements CommandExecutor { import java.util.List;
private final JavaPlugin plugin; import java.util.UUID;
private final FileConfiguration friendsConfig; import java.util.logging.Logger;
private final FileConfiguration langConfig;
private final Logger logger; public class FriendCommand implements CommandExecutor {
private final JavaPlugin plugin;
public FriendCommand(JavaPlugin plugin, FileConfiguration friendsConfig, FileConfiguration langConfig, Logger logger) { private final FileConfiguration friendsConfig;
this.plugin = plugin; private final FileConfiguration langConfig;
this.friendsConfig = friendsConfig; private final Logger logger;
this.langConfig = langConfig;
this.logger = logger; public FriendCommand(JavaPlugin plugin, FileConfiguration friendsConfig, FileConfiguration langConfig, Logger logger) {
} this.plugin = plugin;
this.friendsConfig = friendsConfig;
@Override this.langConfig = langConfig;
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { this.logger = logger;
if (!(sender instanceof Player)) { }
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-only", "&cDieser Befehl ist nur für Spieler!")));
return true; @Override
} public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
Player player = (Player) sender; sender.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-only", "&cDieser Befehl ist nur für Spieler!")));
UUID playerUUID = player.getUniqueId(); return true;
}
if (args.length == 0) {
sendHelpMessage(player); Player player = (Player) sender;
return true; UUID playerUUID = player.getUniqueId();
}
if (args.length == 0) {
String subCommand = args[0].toLowerCase(); sendHelpMessage(player);
return true;
switch (subCommand) { }
case "add":
if (args.length != 2) { String subCommand = args[0].toLowerCase();
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.add-usage", "&cVerwendung: /friend add <Spielername>")));
return true; switch (subCommand) {
} case "add":
handleFriendAdd(player, args[1]); if (args.length != 2) {
break; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.add-usage", "&cVerwendung: /friend add <Spielername>")));
return true;
case "accept": }
if (args.length != 2) { handleFriendAdd(player, args[1]);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.accept-usage", "&cVerwendung: /friend accept <Spielername>"))); break;
return true;
} case "accept":
handleFriendAccept(player, args[1]); if (args.length != 2) {
break; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.accept-usage", "&cVerwendung: /friend accept <Spielername>")));
return true;
case "deny": }
if (args.length != 2) { handleFriendAccept(player, args[1]);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.deny-usage", "&cVerwendung: /friend deny <Spielername>"))); break;
return true;
} case "deny":
handleFriendDeny(player, args[1]); if (args.length != 2) {
break; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.deny-usage", "&cVerwendung: /friend deny <Spielername>")));
return true;
case "list": }
if (args.length != 1) { handleFriendDeny(player, args[1]);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.list-usage", "&cVerwendung: /friend list"))); break;
return true;
} case "list":
handleFriendList(player); if (args.length != 1) {
break; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.list-usage", "&cVerwendung: /friend list")));
return true;
case "del": }
if (args.length != 2) { handleFriendList(player);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.del-usage", "&cVerwendung: /friend del <Spielername>"))); break;
return true;
} case "del":
handleFriendDelete(player, args[1]); if (args.length != 2) {
break; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.del-usage", "&cVerwendung: /friend del <Spielername>")));
return true;
case "tp": }
if (args.length != 2) { handleFriendDelete(player, args[1]);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.tp-usage", "&cVerwendung: /friend tp <Spielername>"))); break;
return true;
} case "confirm":
handleFriendTeleport(player, args[1]); if (args.length != 2) {
break; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.confirm-usage", "&cVerwendung: /friend confirm <Spielername>")));
return true;
default: }
sendHelpMessage(player); handleFriendConfirmDelete(player, args[1]);
break; break;
}
case "tp":
return true; if (args.length != 2) {
} player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.tp-usage", "&cVerwendung: /friend tp <Spielername>")));
return true;
private void sendHelpMessage(Player player) { }
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.header", "&6=== Freundesliste Hilfe ==="))); handleFriendTeleport(player, args[1]);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.add", "&e/friend add <Spielername> &7- Freundschaftsanfrage senden"))); break;
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.accept", "&e/friend accept <Spielername> &7- Freundschaftsanfrage akzeptieren")));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.deny", "&e/friend deny <Spielername> &7- Freundschaftsanfrage ablehnen"))); default:
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.list", "&e/friend list &7- Liste deiner Freunde anzeigen"))); sendHelpMessage(player);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.del", "&e/friend del <Spielername> &7- Freund aus der Liste entfernen"))); break;
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.tp", "&e/friend tp <Spielername> &7- Zu einem Freund teleportieren"))); }
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.footer", "&6=====================")));
} return true;
}
private void handleFriendAdd(Player player, String targetName) {
Player target = Bukkit.getPlayerExact(targetName); private void sendHelpMessage(Player player) {
if (target == null) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.header", "&6=== Freundesliste Hilfe ===")));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", targetName))); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.add", "&e/friend add <Spielername> &7- Freundschaftsanfrage senden")));
return; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.accept", "&e/friend accept <Spielername> &7- Freundschaftsanfrage akzeptieren")));
} player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.deny", "&e/friend deny <Spielername> &7- Freundschaftsanfrage ablehnen")));
if (target.getUniqueId().equals(player.getUniqueId())) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.list", "&e/friend list &7- Liste deiner Freunde anzeigen")));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.self", "&cDu kannst dich nicht selbst hinzufügen!"))); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.del", "&e/friend del <Spielername> &7- Freund aus der Liste entfernen")));
return; player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.tp", "&e/friend tp <Spielername> &7- Zu einem Freund teleportieren")));
} player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.help.footer", "&6=====================")));
}
UUID playerUUID = player.getUniqueId();
UUID targetUUID = target.getUniqueId(); private void handleFriendAdd(Player player, String targetName) {
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends"); Player target = Bukkit.getPlayerExact(targetName);
List<String> pendingRequests = friendsConfig.getStringList(targetUUID + ".pending_requests"); if (target == null) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", targetName)));
if (playerFriends.contains(targetUUID.toString())) { return;
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.already-friends", "&cDu bist bereits mit %s befreundet!").replace("%s", targetName))); }
return; if (target.getUniqueId().equals(player.getUniqueId())) {
} player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.self", "&cDu kannst dich nicht selbst hinzufügen!")));
return;
if (pendingRequests.contains(playerUUID.toString())) { }
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.request-pending", "&cDu hast bereits eine Anfrage an %s gesendet!").replace("%s", targetName)));
return; UUID playerUUID = player.getUniqueId();
} UUID targetUUID = target.getUniqueId();
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
pendingRequests.add(playerUUID.toString()); List<String> pendingRequests = friendsConfig.getStringList(targetUUID + ".pending_requests");
friendsConfig.set(targetUUID + ".pending_requests", pendingRequests);
friendsConfig.set(targetUUID + ".name", targetName); // Speichere den Namen für Offline-Lookups if (playerFriends.contains(targetUUID.toString())) {
saveFriendsConfig(); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.already-friends", "&cDu bist bereits mit %s befreundet!").replace("%s", targetName)));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.sent", "&aFreundschaftsanfrage an %s gesendet!").replace("%s", targetName))); return;
target.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.received", "&aDu hast eine Freundschaftsanfrage von %s erhalten! Verwende /friend accept %s oder /friend deny %s.").replace("%s", player.getName()))); }
logger.info("Freundschaftsanfrage von " + player.getName() + " an " + targetName + " gesendet.");
} if (pendingRequests.contains(playerUUID.toString())) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.request-pending", "&cDu hast bereits eine Anfrage an %s gesendet!").replace("%s", targetName)));
private void handleFriendAccept(Player player, String requesterName) { return;
Player requester = Bukkit.getPlayerExact(requesterName); }
if (requester == null) {
UUID requesterUUID = getUUIDFromName(requesterName); pendingRequests.add(playerUUID.toString());
if (requesterUUID == null) { friendsConfig.set(targetUUID + ".pending_requests", pendingRequests);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", requesterName))); friendsConfig.set(targetUUID + ".name", targetName);
return; saveFriendsConfig();
}
acceptFriendRequest(player, requesterUUID, requesterName); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.sent", "&aFreundschaftsanfrage an %s gesendet!").replace("%s", targetName)));
} else {
acceptFriendRequest(player, requester.getUniqueId(), requesterName); TextComponent message = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.received", "&aDu hast eine Freundschaftsanfrage von %s erhalten! ").replace("%s", player.getName())));
} TextComponent accept = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.accept-button", "&a[Accept]")));
} accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend accept " + player.getName()));
TextComponent deny = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.deny-button", "&c [Deny]")));
private void acceptFriendRequest(Player player, UUID requesterUUID, String requesterName) { deny.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend deny " + player.getName()));
UUID playerUUID = player.getUniqueId(); message.addExtra(accept);
List<String> pendingRequests = friendsConfig.getStringList(playerUUID + ".pending_requests"); message.addExtra(deny);
target.spigot().sendMessage(message);
if (!pendingRequests.contains(requesterUUID.toString())) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.no-request", "&cKeine Anfrage von %s gefunden!").replace("%s", requesterName))); logger.info("Freundschaftsanfrage von " + player.getName() + " an " + targetName + " gesendet.");
return; }
}
private void handleFriendAccept(Player player, String requesterName) {
pendingRequests.remove(requesterUUID.toString()); Player requester = Bukkit.getPlayerExact(requesterName);
friendsConfig.set(playerUUID + ".pending_requests", pendingRequests); if (requester == null) {
UUID requesterUUID = getUUIDFromName(requesterName);
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends"); if (requesterUUID == null) {
List<String> requesterFriends = friendsConfig.getStringList(requesterUUID + ".friends"); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", requesterName)));
return;
playerFriends.add(requesterUUID.toString()); }
requesterFriends.add(playerUUID.toString()); acceptFriendRequest(player, requesterUUID, requesterName);
} else {
friendsConfig.set(playerUUID + ".friends", playerFriends); acceptFriendRequest(player, requester.getUniqueId(), requesterName);
friendsConfig.set(playerUUID + ".name", player.getName()); // Speichere den Namen für Offline-Lookups }
friendsConfig.set(requesterUUID + ".friends", requesterFriends); }
friendsConfig.set(requesterUUID + ".name", requesterName); // Speichere den Namen für Offline-Lookups
private void acceptFriendRequest(Player player, UUID requesterUUID, String requesterName) {
saveFriendsConfig(); UUID playerUUID = player.getUniqueId();
List<String> pendingRequests = friendsConfig.getStringList(playerUUID + ".pending_requests");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.accept.success", "&aDu bist jetzt mit %s befreundet!").replace("%s", requesterName)));
Player requester = Bukkit.getPlayer(requesterUUID); if (!pendingRequests.contains(requesterUUID.toString())) {
if (requester != null) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.no-request", "&cKeine Anfrage von %s gefunden!").replace("%s", requesterName)));
requester.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.accept.notify", "&a%s hat deine Freundschaftsanfrage akzeptiert!").replace("%s", player.getName()))); return;
} }
logger.info(player.getName() + " hat die Freundschaftsanfrage von " + requesterName + " akzeptiert.");
} pendingRequests.remove(requesterUUID.toString());
friendsConfig.set(playerUUID + ".pending_requests", pendingRequests);
private void handleFriendDeny(Player player, String requesterName) {
UUID requesterUUID = getUUIDFromName(requesterName); List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
if (requesterUUID == null) { List<String> requesterFriends = friendsConfig.getStringList(requesterUUID + ".friends");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", requesterName)));
return; playerFriends.add(requesterUUID.toString());
} requesterFriends.add(playerUUID.toString());
UUID playerUUID = player.getUniqueId(); friendsConfig.set(playerUUID + ".friends", playerFriends);
List<String> pendingRequests = friendsConfig.getStringList(playerUUID + ".pending_requests"); friendsConfig.set(playerUUID + ".name", player.getName());
friendsConfig.set(requesterUUID + ".friends", requesterFriends);
if (!pendingRequests.contains(requesterUUID.toString())) { friendsConfig.set(requesterUUID + ".name", requesterName);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.no-request", "&cKeine Anfrage von %s gefunden!").replace("%s", requesterName)));
return; saveFriendsConfig();
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.accept.success", "&aDu bist jetzt mit %s befreundet!").replace("%s", requesterName)));
pendingRequests.remove(requesterUUID.toString()); Player requester = Bukkit.getPlayer(requesterUUID);
friendsConfig.set(playerUUID + ".pending_requests", pendingRequests); if (requester != null) {
saveFriendsConfig(); requester.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.accept.notify", "&a%s hat deine Freundschaftsanfrage akzeptiert!").replace("%s", player.getName())));
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.deny.success", "&aFreundschaftsanfrage von %s abgelehnt.").replace("%s", requesterName))); logger.info(player.getName() + " hat die Freundschaftsanfrage von " + requesterName + " akzeptiert.");
Player requester = Bukkit.getPlayer(requesterUUID); }
if (requester != null) {
requester.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.deny.notify", "&c%s hat deine Freundschaftsanfrage abgelehnt.").replace("%s", player.getName()))); private void handleFriendDeny(Player player, String requesterName) {
} UUID requesterUUID = getUUIDFromName(requesterName);
logger.info(player.getName() + " hat die Freundschaftsanfrage von " + requesterName + " abgelehnt."); if (requesterUUID == null) {
} player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", requesterName)));
return;
private void handleFriendList(Player player) { }
UUID playerUUID = player.getUniqueId();
List<String> friendUUIDs = friendsConfig.getStringList(playerUUID + ".friends"); UUID playerUUID = player.getUniqueId();
List<String> pendingRequests = friendsConfig.getStringList(playerUUID + ".pending_requests");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.header", "&6=== Deine Freundesliste ===")));
if (friendUUIDs.isEmpty()) { if (!pendingRequests.contains(requesterUUID.toString())) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.empty", "&7Du hast keine Freunde."))); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.no-request", "&cKeine Anfrage von %s gefunden!").replace("%s", requesterName)));
} else { return;
for (String friendUUID : friendUUIDs) { }
String friendName = getNameFromUUID(UUID.fromString(friendUUID));
Player friend = Bukkit.getPlayer(UUID.fromString(friendUUID)); pendingRequests.remove(requesterUUID.toString());
String status = friend != null ? langConfig.getString("friend.list.online", "&aOnline") : langConfig.getString("friend.list.offline", "&7Offline"); friendsConfig.set(playerUUID + ".pending_requests", pendingRequests);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.entry", "&e%s: %s").replaceFirst("%s", friendName).replaceFirst("%s", status))); saveFriendsConfig();
}
} player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.deny.success", "&aFreundschaftsanfrage von %s abgelehnt.").replace("%s", requesterName)));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.footer", "&6====================="))); Player requester = Bukkit.getPlayer(requesterUUID);
logger.info("Freundesliste für " + player.getName() + " angezeigt."); if (requester != null) {
} requester.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.deny.notify", "&c%s hat deine Freundschaftsanfrage abgelehnt.").replace("%s", player.getName())));
}
private void handleFriendDelete(Player player, String friendName) { logger.info(player.getName() + " hat die Freundschaftsanfrage von " + requesterName + " abgelehnt.");
UUID friendUUID = getUUIDFromName(friendName); }
if (friendUUID == null) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", friendName))); private void handleFriendList(Player player) {
return; UUID playerUUID = player.getUniqueId();
} List<String> friendUUIDs = friendsConfig.getStringList(playerUUID + ".friends");
UUID playerUUID = player.getUniqueId(); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.header", "&6=== Deine Freundesliste ===")));
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends"); if (friendUUIDs.isEmpty()) {
List<String> friendFriends = friendsConfig.getStringList(friendUUID + ".friends"); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.empty", "&7Du hast keine Freunde.")));
} else {
if (!playerFriends.contains(friendUUID.toString())) { SimpleDateFormat dateFormat = new SimpleDateFormat(langConfig.getString("friend.list.date-format", "dd.MM.yyyy HH:mm:ss"));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.not-friends", "&c%s ist nicht in deiner Freundesliste!").replace("%s", friendName))); for (String friendUUID : friendUUIDs) {
return; String friendName = getNameFromUUID(UUID.fromString(friendUUID));
} Player friend = Bukkit.getPlayer(UUID.fromString(friendUUID));
TextComponent entry = new TextComponent();
playerFriends.remove(friendUUID.toString());
friendFriends.remove(playerUUID.toString()); if (friend != null) {
entry.addExtra(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.entry", "&e%s: %s").replaceFirst("%s", friendName).replaceFirst("%s", langConfig.getString("friend.list.online", "&aOnline"))));
friendsConfig.set(playerUUID + ".friends", playerFriends); } else {
friendsConfig.set(friendUUID + ".friends", friendFriends); long lastOnline = friendsConfig.getLong(friendUUID + ".last-online", 0);
saveFriendsConfig(); String lastOnlineStr = lastOnline > 0 ? dateFormat.format(new Date(lastOnline)) : langConfig.getString("friend.list.unknown", "&7Unbekannt");
entry.addExtra(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.entry-offline", "&e%s: %s &7(Zuletzt online: %s)").replaceFirst("%s", friendName).replaceFirst("%s", langConfig.getString("friend.list.offline", "&7Offline")).replace("%s", lastOnlineStr)));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.success", "&a%s wurde aus deiner Freundesliste entfernt.").replace("%s", friendName))); }
Player friend = Bukkit.getPlayer(friendUUID);
if (friend != null) { TextComponent removeButton = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.remove-button", "&c[X]")));
friend.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.notify", "&c%s hat dich aus seiner Freundesliste entfernt.").replace("%s", player.getName()))); removeButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend del " + friendName));
} entry.addExtra(" ");
logger.info(player.getName() + " hat " + friendName + " aus der Freundesliste entfernt."); entry.addExtra(removeButton);
}
player.spigot().sendMessage(entry);
private void handleFriendTeleport(Player player, String friendName) { }
Player friend = Bukkit.getPlayerExact(friendName); }
if (friend == null) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.footer", "&6=====================")));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", friendName))); logger.info("Freundesliste für " + player.getName() + " angezeigt.");
return; }
}
private void handleFriendDelete(Player player, String friendName) {
UUID playerUUID = player.getUniqueId(); UUID friendUUID = getUUIDFromName(friendName);
UUID friendUUID = friend.getUniqueId(); if (friendUUID == null) {
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends"); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", friendName)));
return;
if (!playerFriends.contains(friendUUID.toString())) { }
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.not-friends", "&c%s ist nicht in deiner Freundesliste!").replace("%s", friendName)));
return; UUID playerUUID = player.getUniqueId();
} List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
if (!player.getWorld().equals(friend.getWorld())) { if (!playerFriends.contains(friendUUID.toString())) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.different-world", "&cIhr müsst in derselben Welt sein, um zu teleportieren!"))); player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.not-friends", "&c%s ist nicht in deiner Freundesliste!").replace("%s", friendName)));
return; return;
} }
player.teleport(friend.getLocation()); TextComponent confirmMessage = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.confirm", "&cMöchtest du %s wirklich aus deiner Freundesliste entfernen? ").replace("%s", friendName)));
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.tp.success", "&aDu wurdest zu %s teleportiert!").replace("%s", friendName))); TextComponent confirmButton = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.confirm-button", "&a[Confirm]")));
friend.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.tp.notify", "&a%s hat sich zu dir teleportiert.").replace("%s", player.getName()))); confirmButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend confirm " + friendName));
logger.info(player.getName() + " hat sich zu " + friendName + " teleportiert."); TextComponent cancelButton = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.cancel-button", "&c[Cancel]")));
} cancelButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend list"));
confirmMessage.addExtra(confirmButton);
private UUID getUUIDFromName(String name) { confirmMessage.addExtra(" ");
Player target = Bukkit.getPlayerExact(name); confirmMessage.addExtra(cancelButton);
if (target != null) { player.spigot().sendMessage(confirmMessage);
return target.getUniqueId();
} logger.info(player.getName() + " wurde zur Bestätigung aufgefordert, " + friendName + " aus der Freundesliste zu entfernen.");
// Fallback für Offline-Spieler }
for (String key : friendsConfig.getKeys(false)) {
try { private void handleFriendConfirmDelete(Player player, String friendName) {
UUID uuid = UUID.fromString(key); UUID friendUUID = getUUIDFromName(friendName);
String storedName = friendsConfig.getString(key + ".name"); if (friendUUID == null) {
if (storedName != null && storedName.equalsIgnoreCase(name)) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", friendName)));
return uuid; return;
} }
} catch (IllegalArgumentException ignored) {
} UUID playerUUID = player.getUniqueId();
} List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
return null; List<String> friendFriends = friendsConfig.getStringList(friendUUID + ".friends");
}
if (!playerFriends.contains(friendUUID.toString())) {
private String getNameFromUUID(UUID uuid) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.not-friends", "&c%s ist nicht in deiner Freundesliste!").replace("%s", friendName)));
Player player = Bukkit.getPlayer(uuid); return;
if (player != null) { }
return player.getName();
} playerFriends.remove(friendUUID.toString());
String storedName = friendsConfig.getString(uuid + ".name"); friendFriends.remove(playerUUID.toString());
if (storedName != null) {
return storedName; friendsConfig.set(playerUUID + ".friends", playerFriends);
} friendsConfig.set(friendUUID + ".friends", friendFriends);
return uuid.toString(); // Fallback auf UUID, falls Name nicht gefunden saveFriendsConfig();
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.success", "&a%s wurde aus deiner Freundesliste entfernt.").replace("%s", friendName)));
private void saveFriendsConfig() { Player friend = Bukkit.getPlayer(friendUUID);
try { if (friend != null) {
friendsConfig.save(new File(plugin.getDataFolder(), "friends.yml")); friend.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.notify", "&c%s hat dich aus seiner Freundesliste entfernt.").replace("%s", player.getName())));
logger.fine("friends.yml erfolgreich gespeichert."); }
} catch (IOException e) { logger.info(player.getName() + " hat " + friendName + " aus der Freundesliste entfernt.");
logger.severe("Fehler beim Speichern der friends.yml: " + e.getMessage()); }
e.printStackTrace();
} private void handleFriendTeleport(Player player, String friendName) {
} Player friend = Bukkit.getPlayerExact(friendName);
if (friend == null) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.player-not-found", "&cSpieler %s nicht gefunden!").replace("%s", friendName)));
return;
}
UUID playerUUID = player.getUniqueId();
UUID friendUUID = friend.getUniqueId();
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
if (!playerFriends.contains(friendUUID.toString())) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.not-friends", "&c%s ist nicht in deiner Freundesliste!").replace("%s", friendName)));
return;
}
if (!player.getWorld().equals(friend.getWorld())) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.different-world", "&cIhr müsst in derselben Welt sein, um zu teleportieren!")));
return;
}
player.teleport(friend.getLocation());
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.tp.success", "&aDu wurdest zu %s teleportiert!").replace("%s", friendName)));
friend.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.tp.notify", "&a%s hat sich zu dir teleportiert.").replace("%s", player.getName())));
logger.info(player.getName() + " hat sich zu " + friendName + " teleportiert.");
}
private UUID getUUIDFromName(String name) {
Player target = Bukkit.getPlayerExact(name);
if (target != null) {
return target.getUniqueId();
}
for (String key : friendsConfig.getKeys(false)) {
try {
UUID uuid = UUID.fromString(key);
String storedName = friendsConfig.getString(key + ".name");
if (storedName != null && storedName.equalsIgnoreCase(name)) {
return uuid;
}
} catch (IllegalArgumentException ignored) {
}
}
return null;
}
private String getNameFromUUID(UUID uuid) {
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
return player.getName();
}
String storedName = friendsConfig.getString(uuid + ".name");
if (storedName != null) {
return storedName;
}
return uuid.toString();
}
private void saveFriendsConfig() {
try {
friendsConfig.save(new File(plugin.getDataFolder(), "friends.yml"));
logger.fine("friends.yml erfolgreich gespeichert.");
} catch (IOException e) {
logger.severe("Fehler beim Speichern der friends.yml: " + e.getMessage());
e.printStackTrace();
}
}
public void notifyFriendsOfJoin(Player player) {
UUID playerUUID = player.getUniqueId();
for (String friendUUIDStr : friendsConfig.getStringList(playerUUID + ".friends")) {
Player friend = Bukkit.getPlayer(UUID.fromString(friendUUIDStr));
if (friend != null) {
friend.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.join.notify", "&aDein Freund %s ist dem Server beigetreten.").replace("%s", player.getName())));
}
}
}
public void updateLastOnline(Player player) {
UUID playerUUID = player.getUniqueId();
friendsConfig.set(playerUUID + ".last-online", System.currentTimeMillis());
saveFriendsConfig();
}
} }