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,5 +1,7 @@
package de.viper.survivalplus.commands;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
@@ -11,7 +13,9 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;
@@ -87,6 +91,14 @@ public class FriendCommand implements CommandExecutor {
handleFriendDelete(player, args[1]);
break;
case "confirm":
if (args.length != 2) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.confirm-usage", "&cVerwendung: /friend confirm <Spielername>")));
return true;
}
handleFriendConfirmDelete(player, args[1]);
break;
case "tp":
if (args.length != 2) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.tp-usage", "&cVerwendung: /friend tp <Spielername>")));
@@ -142,10 +154,20 @@ public class FriendCommand implements CommandExecutor {
pendingRequests.add(playerUUID.toString());
friendsConfig.set(targetUUID + ".pending_requests", pendingRequests);
friendsConfig.set(targetUUID + ".name", targetName); // Speichere den Namen für Offline-Lookups
friendsConfig.set(targetUUID + ".name", targetName);
saveFriendsConfig();
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.sent", "&aFreundschaftsanfrage an %s gesendet!").replace("%s", targetName)));
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())));
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]")));
deny.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend deny " + player.getName()));
message.addExtra(accept);
message.addExtra(deny);
target.spigot().sendMessage(message);
logger.info("Freundschaftsanfrage von " + player.getName() + " an " + targetName + " gesendet.");
}
@@ -182,9 +204,9 @@ public class FriendCommand implements CommandExecutor {
requesterFriends.add(playerUUID.toString());
friendsConfig.set(playerUUID + ".friends", playerFriends);
friendsConfig.set(playerUUID + ".name", player.getName()); // Speichere den Namen für Offline-Lookups
friendsConfig.set(playerUUID + ".name", player.getName());
friendsConfig.set(requesterUUID + ".friends", requesterFriends);
friendsConfig.set(requesterUUID + ".name", requesterName); // Speichere den Namen für Offline-Lookups
friendsConfig.set(requesterUUID + ".name", requesterName);
saveFriendsConfig();
@@ -231,11 +253,26 @@ public class FriendCommand implements CommandExecutor {
if (friendUUIDs.isEmpty()) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.empty", "&7Du hast keine Freunde.")));
} else {
SimpleDateFormat dateFormat = new SimpleDateFormat(langConfig.getString("friend.list.date-format", "dd.MM.yyyy HH:mm:ss"));
for (String friendUUID : friendUUIDs) {
String friendName = getNameFromUUID(UUID.fromString(friendUUID));
Player friend = Bukkit.getPlayer(UUID.fromString(friendUUID));
String status = friend != null ? langConfig.getString("friend.list.online", "&aOnline") : langConfig.getString("friend.list.offline", "&7Offline");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.entry", "&e%s: %s").replaceFirst("%s", friendName).replaceFirst("%s", status)));
TextComponent entry = new TextComponent();
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"))));
} else {
long lastOnline = friendsConfig.getLong(friendUUID + ".last-online", 0);
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)));
}
TextComponent removeButton = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.remove-button", "&c[X]")));
removeButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend del " + friendName));
entry.addExtra(" ");
entry.addExtra(removeButton);
player.spigot().sendMessage(entry);
}
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.footer", "&6=====================")));
@@ -249,6 +286,34 @@ public class FriendCommand implements CommandExecutor {
return;
}
UUID playerUUID = player.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;
}
TextComponent confirmMessage = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.confirm", "&cMöchtest du %s wirklich aus deiner Freundesliste entfernen? ").replace("%s", friendName)));
TextComponent confirmButton = new TextComponent(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.del.confirm-button", "&a[Confirm]")));
confirmButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/friend confirm " + friendName));
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);
confirmMessage.addExtra(" ");
confirmMessage.addExtra(cancelButton);
player.spigot().sendMessage(confirmMessage);
logger.info(player.getName() + " wurde zur Bestätigung aufgefordert, " + friendName + " aus der Freundesliste zu entfernen.");
}
private void handleFriendConfirmDelete(Player player, String friendName) {
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)));
return;
}
UUID playerUUID = player.getUniqueId();
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
List<String> friendFriends = friendsConfig.getStringList(friendUUID + ".friends");
@@ -305,7 +370,6 @@ public class FriendCommand implements CommandExecutor {
if (target != null) {
return target.getUniqueId();
}
// Fallback für Offline-Spieler
for (String key : friendsConfig.getKeys(false)) {
try {
UUID uuid = UUID.fromString(key);
@@ -328,7 +392,7 @@ public class FriendCommand implements CommandExecutor {
if (storedName != null) {
return storedName;
}
return uuid.toString(); // Fallback auf UUID, falls Name nicht gefunden
return uuid.toString();
}
private void saveFriendsConfig() {
@@ -340,4 +404,20 @@ public class FriendCommand implements CommandExecutor {
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();
}
}