src/main/java/de/viper/survivalplus/commands/FriendCommand.java aktualisiert
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package de.viper.survivalplus.commands;
|
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.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@@ -11,7 +13,9 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -87,6 +91,14 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
handleFriendDelete(player, args[1]);
|
handleFriendDelete(player, args[1]);
|
||||||
break;
|
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":
|
case "tp":
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.error.tp-usage", "&cVerwendung: /friend tp <Spielername>")));
|
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());
|
pendingRequests.add(playerUUID.toString());
|
||||||
friendsConfig.set(targetUUID + ".pending_requests", pendingRequests);
|
friendsConfig.set(targetUUID + ".pending_requests", pendingRequests);
|
||||||
friendsConfig.set(targetUUID + ".name", targetName); // Speichere den Namen für Offline-Lookups
|
friendsConfig.set(targetUUID + ".name", targetName);
|
||||||
saveFriendsConfig();
|
saveFriendsConfig();
|
||||||
|
|
||||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.add.sent", "&aFreundschaftsanfrage an %s gesendet!").replace("%s", targetName)));
|
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.");
|
logger.info("Freundschaftsanfrage von " + player.getName() + " an " + targetName + " gesendet.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,9 +204,9 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
requesterFriends.add(playerUUID.toString());
|
requesterFriends.add(playerUUID.toString());
|
||||||
|
|
||||||
friendsConfig.set(playerUUID + ".friends", playerFriends);
|
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 + ".friends", requesterFriends);
|
||||||
friendsConfig.set(requesterUUID + ".name", requesterName); // Speichere den Namen für Offline-Lookups
|
friendsConfig.set(requesterUUID + ".name", requesterName);
|
||||||
|
|
||||||
saveFriendsConfig();
|
saveFriendsConfig();
|
||||||
|
|
||||||
@@ -231,11 +253,26 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
if (friendUUIDs.isEmpty()) {
|
if (friendUUIDs.isEmpty()) {
|
||||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.empty", "&7Du hast keine Freunde.")));
|
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.empty", "&7Du hast keine Freunde.")));
|
||||||
} else {
|
} else {
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat(langConfig.getString("friend.list.date-format", "dd.MM.yyyy HH:mm:ss"));
|
||||||
for (String friendUUID : friendUUIDs) {
|
for (String friendUUID : friendUUIDs) {
|
||||||
String friendName = getNameFromUUID(UUID.fromString(friendUUID));
|
String friendName = getNameFromUUID(UUID.fromString(friendUUID));
|
||||||
Player friend = Bukkit.getPlayer(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");
|
TextComponent entry = new TextComponent();
|
||||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.entry", "&e%s: %s").replaceFirst("%s", friendName).replaceFirst("%s", status)));
|
|
||||||
|
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=====================")));
|
player.sendMessage(ChatColor.translateAlternateColorCodes('&', langConfig.getString("friend.list.footer", "&6=====================")));
|
||||||
@@ -249,6 +286,34 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
return;
|
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();
|
UUID playerUUID = player.getUniqueId();
|
||||||
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
|
List<String> playerFriends = friendsConfig.getStringList(playerUUID + ".friends");
|
||||||
List<String> friendFriends = friendsConfig.getStringList(friendUUID + ".friends");
|
List<String> friendFriends = friendsConfig.getStringList(friendUUID + ".friends");
|
||||||
@@ -305,7 +370,6 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
if (target != null) {
|
if (target != null) {
|
||||||
return target.getUniqueId();
|
return target.getUniqueId();
|
||||||
}
|
}
|
||||||
// Fallback für Offline-Spieler
|
|
||||||
for (String key : friendsConfig.getKeys(false)) {
|
for (String key : friendsConfig.getKeys(false)) {
|
||||||
try {
|
try {
|
||||||
UUID uuid = UUID.fromString(key);
|
UUID uuid = UUID.fromString(key);
|
||||||
@@ -328,7 +392,7 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
if (storedName != null) {
|
if (storedName != null) {
|
||||||
return storedName;
|
return storedName;
|
||||||
}
|
}
|
||||||
return uuid.toString(); // Fallback auf UUID, falls Name nicht gefunden
|
return uuid.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveFriendsConfig() {
|
private void saveFriendsConfig() {
|
||||||
@@ -340,4 +404,20 @@ public class FriendCommand implements CommandExecutor {
|
|||||||
e.printStackTrace();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user