Upload folder via GUI - src
This commit is contained in:
@@ -13,6 +13,9 @@ public class TeleportManager {
|
||||
// Pending TPA requests: requester -> target
|
||||
private final Map<UUID, UUID> tpaRequests = new HashMap<>();
|
||||
private final Map<UUID, Long> requestTimestamps = new HashMap<>();
|
||||
// Pending cross-server TPA requests: requesterName -> targetName
|
||||
private final Map<String, String> crossServerTpaRequests = new HashMap<>();
|
||||
private final Map<String, Long> crossServerRequestTimestamps = new HashMap<>();
|
||||
// Cooldowns
|
||||
private final Map<UUID, Long> cooldowns = new HashMap<>();
|
||||
// Warmup tasks
|
||||
@@ -122,6 +125,101 @@ public class TeleportManager {
|
||||
}, timeout * 20L);
|
||||
}
|
||||
|
||||
public void sendTpaRequest(Player from, String targetName) {
|
||||
if (plugin.getBungeeMessenger() == null) {
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("player-not-found", "player", targetName));
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.getBungeeMessenger().requestPlayerServer(from, targetName, server -> {
|
||||
if (server == null || server.isBlank()) {
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("player-not-found", "player", targetName));
|
||||
return;
|
||||
}
|
||||
|
||||
String localServer = plugin.getConfigManager().getServerName();
|
||||
if (server.equalsIgnoreCase(localServer)) {
|
||||
Player localTarget = Bukkit.getPlayerExact(targetName);
|
||||
if (localTarget == null || !localTarget.isOnline()) {
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("player-not-found", "player", targetName));
|
||||
return;
|
||||
}
|
||||
sendTpaRequest(from, localTarget);
|
||||
return;
|
||||
}
|
||||
|
||||
String requesterKey = from.getName();
|
||||
crossServerTpaRequests.put(requesterKey, targetName);
|
||||
crossServerRequestTimestamps.put(requesterKey, System.currentTimeMillis());
|
||||
|
||||
plugin.getBungeeMessenger().sendTpaRequestToPlayer(from, targetName);
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("tpa-sent", "player", targetName));
|
||||
|
||||
int timeout = plugin.getConfigManager().getRequestTimeout();
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
||||
if (!crossServerTpaRequests.containsKey(requesterKey)) return;
|
||||
crossServerTpaRequests.remove(requesterKey);
|
||||
crossServerRequestTimestamps.remove(requesterKey);
|
||||
|
||||
Player requester = Bukkit.getPlayerExact(from.getName());
|
||||
if (requester != null && requester.isOnline()) {
|
||||
requester.sendMessage(plugin.getConfigManager().getMessage("tpa-expired"));
|
||||
}
|
||||
if (plugin.getBungeeMessenger() != null) {
|
||||
plugin.getBungeeMessenger().sendTpaExpiredToPlayer(from, targetName);
|
||||
}
|
||||
}, timeout * 20L);
|
||||
});
|
||||
}
|
||||
|
||||
public void receiveCrossServerTpaRequest(String requesterName, String targetName) {
|
||||
Player target = Bukkit.getPlayerExact(targetName);
|
||||
if (target == null || !target.isOnline()) return;
|
||||
|
||||
crossServerTpaRequests.put(requesterName, targetName);
|
||||
crossServerRequestTimestamps.put(requesterName, System.currentTimeMillis());
|
||||
target.sendMessage(plugin.getConfigManager().getMessage("tpa-received", "player", requesterName));
|
||||
}
|
||||
|
||||
public void receiveCrossServerTpaAccepted(String requesterName, String targetName) {
|
||||
Player requester = Bukkit.getPlayerExact(requesterName);
|
||||
if (requester == null || !requester.isOnline()) return;
|
||||
|
||||
String requesterKey = findRequesterKey(requesterName);
|
||||
if (requesterKey != null) {
|
||||
crossServerTpaRequests.remove(requesterKey);
|
||||
crossServerRequestTimestamps.remove(requesterKey);
|
||||
}
|
||||
requester.sendMessage(plugin.getConfigManager().getMessage("tpa-accepted", "player", targetName));
|
||||
|
||||
if (plugin.getBungeeMessenger() != null) {
|
||||
plugin.getBungeeMessenger().teleportToPlayer(requester, targetName);
|
||||
}
|
||||
}
|
||||
|
||||
public void receiveCrossServerTpaDenied(String requesterName, String targetName) {
|
||||
Player requester = Bukkit.getPlayerExact(requesterName);
|
||||
if (requester == null || !requester.isOnline()) return;
|
||||
|
||||
String requesterKey = findRequesterKey(requesterName);
|
||||
if (requesterKey != null) {
|
||||
crossServerTpaRequests.remove(requesterKey);
|
||||
crossServerRequestTimestamps.remove(requesterKey);
|
||||
}
|
||||
requester.sendMessage(plugin.getConfigManager().getMessage("tpa-denied", "player", targetName));
|
||||
}
|
||||
|
||||
public void receiveCrossServerTpaExpired(String requesterName, String targetName) {
|
||||
Player target = Bukkit.getPlayerExact(targetName);
|
||||
if (target == null || !target.isOnline()) return;
|
||||
|
||||
String requesterKey = findRequesterKey(requesterName);
|
||||
if (requesterKey != null && target.getName().equalsIgnoreCase(crossServerTpaRequests.get(requesterKey))) {
|
||||
crossServerTpaRequests.remove(requesterKey);
|
||||
crossServerRequestTimestamps.remove(requesterKey);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean acceptTpa(Player target) {
|
||||
UUID requester = null;
|
||||
for (Map.Entry<UUID, UUID> entry : tpaRequests.entrySet()) {
|
||||
@@ -130,15 +228,27 @@ public class TeleportManager {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (requester == null) return false;
|
||||
if (requester != null) {
|
||||
Player from = Bukkit.getPlayer(requester);
|
||||
tpaRequests.remove(requester);
|
||||
requestTimestamps.remove(requester);
|
||||
|
||||
Player from = Bukkit.getPlayer(requester);
|
||||
tpaRequests.remove(requester);
|
||||
requestTimestamps.remove(requester);
|
||||
if (from != null && from.isOnline()) {
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("tpa-accepted", "player", target.getName()));
|
||||
teleport(from, new TeleportLocation(target.getLocation(), plugin.getConfigManager().getServerName()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (from != null && from.isOnline()) {
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("tpa-accepted", "player", target.getName()));
|
||||
teleport(from, new TeleportLocation(target.getLocation(), plugin.getConfigManager().getServerName()));
|
||||
String requesterName = findRequesterByTarget(target.getName());
|
||||
|
||||
if (requesterName == null) return false;
|
||||
|
||||
crossServerTpaRequests.remove(requesterName);
|
||||
crossServerRequestTimestamps.remove(requesterName);
|
||||
|
||||
if (plugin.getBungeeMessenger() != null) {
|
||||
plugin.getBungeeMessenger().sendTpaAcceptToPlayer(target, requesterName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -151,14 +261,45 @@ public class TeleportManager {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (requester == null) return false;
|
||||
if (requester != null) {
|
||||
Player from = Bukkit.getPlayer(requester);
|
||||
tpaRequests.remove(requester);
|
||||
requestTimestamps.remove(requester);
|
||||
|
||||
Player from = Bukkit.getPlayer(requester);
|
||||
tpaRequests.remove(requester);
|
||||
requestTimestamps.remove(requester);
|
||||
if (from != null && from.isOnline()) {
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("tpa-denied", "player", target.getName()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (from != null && from.isOnline())
|
||||
from.sendMessage(plugin.getConfigManager().getMessage("tpa-denied", "player", target.getName()));
|
||||
String requesterName = findRequesterByTarget(target.getName());
|
||||
|
||||
if (requesterName == null) return false;
|
||||
|
||||
crossServerTpaRequests.remove(requesterName);
|
||||
crossServerRequestTimestamps.remove(requesterName);
|
||||
|
||||
if (plugin.getBungeeMessenger() != null) {
|
||||
plugin.getBungeeMessenger().sendTpaDenyToPlayer(target, requesterName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private String findRequesterByTarget(String targetName) {
|
||||
for (Map.Entry<String, String> entry : crossServerTpaRequests.entrySet()) {
|
||||
if (targetName.equalsIgnoreCase(entry.getValue())) {
|
||||
return entry.getKey();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String findRequesterKey(String requesterName) {
|
||||
for (String key : crossServerTpaRequests.keySet()) {
|
||||
if (key.equalsIgnoreCase(requesterName)) {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user