Upload folder via GUI - src
This commit is contained in:
@@ -42,9 +42,19 @@ public class TeleportSuite extends JavaPlugin {
|
|||||||
savePointManager = new SavePointManager(this);
|
savePointManager = new SavePointManager(this);
|
||||||
|
|
||||||
if (configManager.isBungeeEnabled()) {
|
if (configManager.isBungeeEnabled()) {
|
||||||
|
String serverName = configManager.getServerName();
|
||||||
|
if (serverName == null || serverName.isBlank() || serverName.equals("survival")) {
|
||||||
|
getLogger().warning("==================================================");
|
||||||
|
getLogger().warning("BUNGEE: bungee.server-name in config.yml ist noch");
|
||||||
|
getLogger().warning("auf dem Default-Wert 'survival'. Bitte auf den");
|
||||||
|
getLogger().warning("tatsaechlichen BungeeCord-Servernamen aendern!");
|
||||||
|
getLogger().warning("==================================================");
|
||||||
|
}
|
||||||
bungeeMessenger = new BungeeMessenger(this);
|
bungeeMessenger = new BungeeMessenger(this);
|
||||||
bungeeMessenger.register();
|
bungeeMessenger.register();
|
||||||
getLogger().info("BungeeCord-Unterstuetzung aktiviert.");
|
getLogger().info("BungeeCord-Unterstuetzung aktiviert. Server: " + serverName);
|
||||||
|
} else {
|
||||||
|
getLogger().warning("BungeeCord deaktiviert (bungee.enabled=false). Cross-Server-Teleport nicht verfuegbar.");
|
||||||
}
|
}
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
|
getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ public class BungeeMessenger implements PluginMessageListener {
|
|||||||
case "TP_PLAYERTOPLAYER": {
|
case "TP_PLAYERTOPLAYER": {
|
||||||
String senderName = in.readUTF();
|
String senderName = in.readUTF();
|
||||||
String targetName = in.readUTF();
|
String targetName = in.readUTF();
|
||||||
schedulePlayerToPlayerTeleport(senderName, targetName);
|
schedulePlayerToPlayerTeleportWithBack(senderName, targetName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,10 +198,14 @@ public class BungeeMessenger implements PluginMessageListener {
|
|||||||
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
||||||
org.bukkit.entity.Player p = plugin.getServer().getPlayerExact(playerName);
|
org.bukkit.entity.Player p = plugin.getServer().getPlayerExact(playerName);
|
||||||
if (p == null || !p.isOnline()) return;
|
if (p == null || !p.isOnline()) return;
|
||||||
TeleportLocation loc = new TeleportLocation(
|
// Save back location BEFORE teleporting (teleport() with saveBack=false
|
||||||
|
// skips this, so we do it manually here for cross-server teleports)
|
||||||
|
plugin.getDatabaseManager().saveLastLocation(p.getUniqueId(),
|
||||||
|
new TeleportLocation(p.getLocation(), plugin.getConfigManager().getServerName()));
|
||||||
|
TeleportLocation dest = new TeleportLocation(
|
||||||
world, x, y, z, yaw, pitch,
|
world, x, y, z, yaw, pitch,
|
||||||
plugin.getConfigManager().getServerName());
|
plugin.getConfigManager().getServerName());
|
||||||
plugin.getTeleportManager().teleport(p, loc, false);
|
plugin.getTeleportManager().teleport(p, dest, false);
|
||||||
}, 10L);
|
}, 10L);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -231,9 +235,9 @@ public class BungeeMessenger implements PluginMessageListener {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Wartet bis sender UND target lokal online sind (max. 100 × 10 Ticks = 50 s),
|
* Wartet bis sender UND target lokal online sind (max. 100 × 10 Ticks = 50 s),
|
||||||
* dann führt player.teleport() aus – identisch zum BTM-Ansatz.
|
* speichert Back-Location und führt dann player.teleport() aus.
|
||||||
*/
|
*/
|
||||||
private void schedulePlayerToPlayerTeleport(String senderName, String targetName) {
|
private void schedulePlayerToPlayerTeleportWithBack(String senderName, String targetName) {
|
||||||
final int[] attempts = {0};
|
final int[] attempts = {0};
|
||||||
final int[] taskId = {-1};
|
final int[] taskId = {-1};
|
||||||
|
|
||||||
@@ -243,6 +247,10 @@ public class BungeeMessenger implements PluginMessageListener {
|
|||||||
org.bukkit.entity.Player target = plugin.getServer().getPlayerExact(targetName);
|
org.bukkit.entity.Player target = plugin.getServer().getPlayerExact(targetName);
|
||||||
|
|
||||||
if (sender != null && sender.isOnline() && target != null && target.isOnline()) {
|
if (sender != null && sender.isOnline() && target != null && target.isOnline()) {
|
||||||
|
// Save back location before teleport so /back works cross-server
|
||||||
|
plugin.getDatabaseManager().saveLastLocation(sender.getUniqueId(),
|
||||||
|
new TeleportLocation(sender.getLocation(),
|
||||||
|
plugin.getConfigManager().getServerName()));
|
||||||
plugin.getTeleportManager().teleport(
|
plugin.getTeleportManager().teleport(
|
||||||
sender,
|
sender,
|
||||||
new TeleportLocation(target.getLocation(),
|
new TeleportLocation(target.getLocation(),
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package de.teleportsuite.listeners;
|
|||||||
|
|
||||||
import de.teleportsuite.TeleportSuite;
|
import de.teleportsuite.TeleportSuite;
|
||||||
import de.teleportsuite.models.TeleportLocation;
|
import de.teleportsuite.models.TeleportLocation;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
|
|
||||||
@@ -10,12 +12,33 @@ public class PlayerRespawnListener implements Listener {
|
|||||||
private final TeleportSuite plugin;
|
private final TeleportSuite plugin;
|
||||||
public PlayerRespawnListener(TeleportSuite plugin) { this.plugin = plugin; }
|
public PlayerRespawnListener(TeleportSuite plugin) { this.plugin = plugin; }
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onRespawn(PlayerRespawnEvent event) {
|
public void onRespawn(PlayerRespawnEvent event) {
|
||||||
if (!plugin.getConfigManager().deathRespawnToSpawn()) return;
|
if (!plugin.getConfigManager().deathRespawnToSpawn()) return;
|
||||||
|
|
||||||
TeleportLocation spawn = plugin.getDatabaseManager().getSpawn("spawn");
|
TeleportLocation spawn = plugin.getDatabaseManager().getSpawn("spawn");
|
||||||
if (spawn == null) return;
|
if (spawn == null) {
|
||||||
var loc = spawn.toBukkitLocation();
|
plugin.getLogger().warning("death-respawn-to-spawn ist aktiv, aber kein Spawn gesetzt!");
|
||||||
if (loc != null) event.setRespawnLocation(loc);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spawn ist auf einem anderen Server → nach dem Respawn teleportieren
|
||||||
|
String localServer = plugin.getConfigManager().getServerName();
|
||||||
|
if (!spawn.isLocalServer(localServer)) {
|
||||||
|
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
||||||
|
if (event.getPlayer().isOnline()) {
|
||||||
|
plugin.getTeleportManager().teleport(event.getPlayer(), spawn, false);
|
||||||
|
}
|
||||||
|
}, 5L);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spawn ist lokal → direkt als Respawn-Location setzen
|
||||||
|
Location loc = spawn.toBukkitLocation();
|
||||||
|
if (loc == null || loc.getWorld() == null) {
|
||||||
|
plugin.getLogger().warning("Spawn-Welt \"" + spawn.getWorld() + "\" nicht gefunden!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
event.setRespawnLocation(loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,10 @@ public class TeleportManager {
|
|||||||
|
|
||||||
Location loc = dest.toBukkitLocation();
|
Location loc = dest.toBukkitLocation();
|
||||||
if (loc == null || loc.getWorld() == null) {
|
if (loc == null || loc.getWorld() == null) {
|
||||||
player.sendMessage("§cZielwelt nicht gefunden!");
|
player.sendMessage("§cFehler: Zielwelt §6" + dest.getWorld() + "§c nicht gefunden!"
|
||||||
|
+ " Ist der Spawn auf diesem Server gesetzt?");
|
||||||
|
plugin.getLogger().warning("Teleport fehlgeschlagen: Welt '" + dest.getWorld()
|
||||||
|
+ "' fuer Spieler " + player.getName() + " nicht geladen.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,10 @@ database:
|
|||||||
file: teleportsuite.db
|
file: teleportsuite.db
|
||||||
|
|
||||||
# BungeeCord Einstellungen
|
# BungeeCord Einstellungen
|
||||||
|
# WICHTIG: server-name muss dem Namen dieses Servers in der BungeeCord config.yml entsprechen!
|
||||||
bungee:
|
bungee:
|
||||||
enabled: false
|
enabled: true
|
||||||
server-name: "survival" # Name dieses Servers im BungeeCord-Netz
|
server-name: "survival" # Name dieses Servers im BungeeCord-Netz (z.B. "lobby", "survival", "creative")
|
||||||
|
|
||||||
# Teleport Einstellungen
|
# Teleport Einstellungen
|
||||||
teleport:
|
teleport:
|
||||||
@@ -70,6 +71,7 @@ messages:
|
|||||||
death-no-location: "&cKein Todesort gespeichert."
|
death-no-location: "&cKein Todesort gespeichert."
|
||||||
no-permission: "&cDazu hast du keine Berechtigung."
|
no-permission: "&cDazu hast du keine Berechtigung."
|
||||||
player-not-found: "&cSpieler &6{player}&c nicht gefunden."
|
player-not-found: "&cSpieler &6{player}&c nicht gefunden."
|
||||||
|
tpa-request-not-found: "&cKeine offene Teleportanfrage gefunden."
|
||||||
portal-created: "&aPortal &6{name}&a erstellt!"
|
portal-created: "&aPortal &6{name}&a erstellt!"
|
||||||
portal-deleted: "&cPortal &6{name}&c gelöscht."
|
portal-deleted: "&cPortal &6{name}&c gelöscht."
|
||||||
savepoint-set: "&aSavepoint &6{name}&a gesetzt!"
|
savepoint-set: "&aSavepoint &6{name}&a gesetzt!"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: TeleportSuite
|
name: TeleportSuite
|
||||||
version: 1.0.2
|
version: 1.0.3
|
||||||
main: de.teleportsuite.TeleportSuite
|
main: de.teleportsuite.TeleportSuite
|
||||||
api-version: 1.20
|
api-version: 1.20
|
||||||
description: BungeeCord-fähiges Teleport-Komplettpaket
|
description: BungeeCord-fähiges Teleport-Komplettpaket
|
||||||
|
|||||||
Reference in New Issue
Block a user