From 3786ca1c15711c00629740d6fccc2fc1e45551be Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Wed, 19 Jul 2023 13:21:42 +0100 Subject: [PATCH] Fix for last spawnpoint saving. --- .../mmocore/listener/SpawnPointsListener.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java index 69cc056d..c215601d 100644 --- a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java +++ b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java @@ -6,6 +6,7 @@ import net.Indyuce.mmocore.spawnpoint.SpawnPoint; import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; import net.Indyuce.mmocore.spawnpoint.def.DefaultSpawnOption; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -22,7 +23,7 @@ public class SpawnPointsListener implements Listener { public void onTeleport(PlayerTeleportEvent event) { if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) { PlayerData playerData = PlayerData.get(event.getPlayer()); - getLastSpawnPointContext(playerData).ifPresent(playerData::setLastSpawnPointContext); + getLastSpawnPointContext(event.getFrom(), playerData).ifPresent(playerData::setLastSpawnPointContext); } } @@ -43,7 +44,7 @@ public class SpawnPointsListener implements Listener { Optional context = getLastSpawnPointContext(playerData); if (context.isPresent()) { SpawnPointContext spawnPointContext = context.get(); - if (!spawnPointContext.isOtherServer()){ + if (!spawnPointContext.isOtherServer()) { event.setRespawnLocation(spawnPointContext.getLocation()); } @@ -51,8 +52,8 @@ public class SpawnPointsListener implements Listener { } } - public Optional getLastSpawnPointContext(PlayerData playerData) { - World world = playerData.getPlayer().getWorld(); + public Optional getLastSpawnPointContext(Location location, PlayerData playerData) { + World world = location.getWorld(); List reachableSpawnPoints = MMOCore.plugin.spawnPointManager. getAll() .stream() @@ -63,7 +64,7 @@ public class SpawnPointsListener implements Listener { double minDistance = Double.MAX_VALUE; SpawnPoint closestSpawnPoint = null; for (SpawnPoint spawnPoint : reachableSpawnPoints) { - double distance = spawnPoint.getLocation().distance(playerData.getPlayer().getLocation()); + double distance = spawnPoint.getLocation().distance(location); distance = distance / spawnPoint.getStrength(); if (distance < minDistance) { minDistance = distance; @@ -72,10 +73,17 @@ public class SpawnPointsListener implements Listener { } return Optional.of(new SpawnPointContext(closestSpawnPoint.getId())); } else - for (DefaultSpawnOption defaultSpawnOption : MMOCore.plugin.spawnPointManager.getDefaultSpawnOptions()) + for (DefaultSpawnOption defaultSpawnOption : MMOCore.plugin.spawnPointManager.getDefaultSpawnOptions()) { + Bukkit.broadcastMessage("world: " + world.getName() + " matches: " + defaultSpawnOption.matches(world)); if (defaultSpawnOption.matches(world)) { return Optional.of(defaultSpawnOption.getSpawnPointContext(playerData)); } + } + return Optional.empty(); } + + public Optional getLastSpawnPointContext(PlayerData playerData) { + return getLastSpawnPointContext(playerData.getPlayer().getLocation(), playerData); + } }