2 Commits
1.0.3 ... 1.0.4

Author SHA1 Message Date
Git Manager GUI
9e74ab28fb Upload folder via GUI - src 2026-05-24 01:16:54 +02:00
Git Manager GUI
3b7a1556d1 Upload via Git Manager GUI 2026-05-24 01:16:49 +02:00
7 changed files with 61 additions and 15 deletions

View File

@@ -7,7 +7,7 @@
<groupId>de.teleportsuite</groupId> <groupId>de.teleportsuite</groupId>
<artifactId>TeleportSuite</artifactId> <artifactId>TeleportSuite</artifactId>
<version>1.0.2</version> <version>1.0.3</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<properties> <properties>

View File

@@ -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);

View File

@@ -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(),

View File

@@ -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);
} }
} }

View File

@@ -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;
} }

View File

@@ -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!"

View File

@@ -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