Fix for last spawnpoint saving.

This commit is contained in:
Ka0rX 2023-07-19 13:21:42 +01:00
parent dc36fe7531
commit 3786ca1c15

View File

@ -6,6 +6,7 @@ import net.Indyuce.mmocore.spawnpoint.SpawnPoint;
import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; import net.Indyuce.mmocore.spawnpoint.SpawnPointContext;
import net.Indyuce.mmocore.spawnpoint.def.DefaultSpawnOption; import net.Indyuce.mmocore.spawnpoint.def.DefaultSpawnOption;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -22,7 +23,7 @@ public class SpawnPointsListener implements Listener {
public void onTeleport(PlayerTeleportEvent event) { public void onTeleport(PlayerTeleportEvent event) {
if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) { if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) {
PlayerData playerData = PlayerData.get(event.getPlayer()); PlayerData playerData = PlayerData.get(event.getPlayer());
getLastSpawnPointContext(playerData).ifPresent(playerData::setLastSpawnPointContext); getLastSpawnPointContext(event.getFrom(), playerData).ifPresent(playerData::setLastSpawnPointContext);
} }
} }
@ -51,8 +52,8 @@ public class SpawnPointsListener implements Listener {
} }
} }
public Optional<SpawnPointContext> getLastSpawnPointContext(PlayerData playerData) { public Optional<SpawnPointContext> getLastSpawnPointContext(Location location, PlayerData playerData) {
World world = playerData.getPlayer().getWorld(); World world = location.getWorld();
List<SpawnPoint> reachableSpawnPoints = MMOCore.plugin.spawnPointManager. List<SpawnPoint> reachableSpawnPoints = MMOCore.plugin.spawnPointManager.
getAll() getAll()
.stream() .stream()
@ -63,7 +64,7 @@ public class SpawnPointsListener implements Listener {
double minDistance = Double.MAX_VALUE; double minDistance = Double.MAX_VALUE;
SpawnPoint closestSpawnPoint = null; SpawnPoint closestSpawnPoint = null;
for (SpawnPoint spawnPoint : reachableSpawnPoints) { for (SpawnPoint spawnPoint : reachableSpawnPoints) {
double distance = spawnPoint.getLocation().distance(playerData.getPlayer().getLocation()); double distance = spawnPoint.getLocation().distance(location);
distance = distance / spawnPoint.getStrength(); distance = distance / spawnPoint.getStrength();
if (distance < minDistance) { if (distance < minDistance) {
minDistance = distance; minDistance = distance;
@ -72,10 +73,17 @@ public class SpawnPointsListener implements Listener {
} }
return Optional.of(new SpawnPointContext(closestSpawnPoint.getId())); return Optional.of(new SpawnPointContext(closestSpawnPoint.getId()));
} else } 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)) { if (defaultSpawnOption.matches(world)) {
return Optional.of(defaultSpawnOption.getSpawnPointContext(playerData)); return Optional.of(defaultSpawnOption.getSpawnPointContext(playerData));
} }
}
return Optional.empty(); return Optional.empty();
} }
public Optional<SpawnPointContext> getLastSpawnPointContext(PlayerData playerData) {
return getLastSpawnPointContext(playerData.getPlayer().getLocation(), playerData);
}
} }