From 5ef62784b549fe034ac34bf5a5a3480c7a150122 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Sun, 12 Jun 2016 14:10:38 +0200 Subject: [PATCH] #729 Use world from LimboPlayer for "spawn after login" feat., simplify teleport event constructors --- .../events/FirstSpawnTeleportEvent.java | 5 +-- .../authme/events/SpawnTeleportEvent.java | 6 +-- .../authme/util/TeleportationService.java | 44 ++++++++++--------- .../authme/util/TeleportationServiceTest.java | 17 ++++--- 4 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/main/java/fr/xephi/authme/events/FirstSpawnTeleportEvent.java b/src/main/java/fr/xephi/authme/events/FirstSpawnTeleportEvent.java index 28532b39..6a90e5dd 100644 --- a/src/main/java/fr/xephi/authme/events/FirstSpawnTeleportEvent.java +++ b/src/main/java/fr/xephi/authme/events/FirstSpawnTeleportEvent.java @@ -17,11 +17,10 @@ public class FirstSpawnTeleportEvent extends AbstractTeleportEvent { * Constructor. * * @param player The player - * @param from The location the player is being teleported away from * @param to The teleport destination */ - public FirstSpawnTeleportEvent(Player player, Location from, Location to) { - super(true, player, from, to); + public FirstSpawnTeleportEvent(Player player, Location to) { + super(true, player, to); } /** diff --git a/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java b/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java index 28f61111..a1a85d84 100644 --- a/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java +++ b/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java @@ -17,13 +17,11 @@ public class SpawnTeleportEvent extends AbstractTeleportEvent { * Constructor. * * @param player The player - * @param from The location the player is being teleported away from * @param to The teleport destination * @param isAuthenticated Whether or not the player is logged in */ - // TODO ljacqu 20160611: We only ever call this with from = player.getLocation() -> could be done in constructor - public SpawnTeleportEvent(Player player, Location from, Location to, boolean isAuthenticated) { - super(false, player, from, to); + public SpawnTeleportEvent(Player player, Location to, boolean isAuthenticated) { + super(false, player, to); this.isAuthenticated = isAuthenticated; } diff --git a/src/main/java/fr/xephi/authme/util/TeleportationService.java b/src/main/java/fr/xephi/authme/util/TeleportationService.java index b7beaedd..1042caf4 100644 --- a/src/main/java/fr/xephi/authme/util/TeleportationService.java +++ b/src/main/java/fr/xephi/authme/util/TeleportationService.java @@ -62,7 +62,7 @@ public class TeleportationService implements Reloadable { return; } - if (settings.getProperty(TELEPORT_UNAUTHED_TO_SPAWN) || mustForceSpawnAfterLogin(player.getWorld())) { + if (settings.getProperty(TELEPORT_UNAUTHED_TO_SPAWN) || mustForceSpawnAfterLogin(player.getWorld().getName())) { teleportToSpawn(player, playerCache.isAuthenticated(player.getName())); } } @@ -72,7 +72,9 @@ public class TeleportationService implements Reloadable { return; } - if (mustForceSpawnAfterLogin(player.getWorld())) { + // The world in LimboPlayer is from where the player comes, before any teleportation by AuthMe + String worldName = limbo.getLoc().getWorld().getName(); + if (mustForceSpawnAfterLogin(worldName)) { teleportToSpawn(player, true); } else if (settings.getProperty(TELEPORT_UNAUTHED_TO_SPAWN)) { if (settings.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION) && auth.getQuitLocY() != 0) { @@ -84,21 +86,9 @@ public class TeleportationService implements Reloadable { } } - private boolean teleportToFirstSpawn(final Player player) { - if (player.hasPlayedBefore()) { - return false; - } - Location firstSpawn = spawnLoader.getFirstSpawn(); - if (firstSpawn == null) { - return false; - } - - performTeleportation(player, new FirstSpawnTeleportEvent(player, player.getLocation(), firstSpawn)); - return true; - } - - private static boolean isEventValid(AbstractTeleportEvent event) { - return !event.isCancelled() && event.getTo() != null && event.getTo().getWorld() != null; + private boolean mustForceSpawnAfterLogin(String worldName) { + return settings.getProperty(RestrictionSettings.FORCE_SPAWN_LOCATION_AFTER_LOGIN) + && spawnOnLoginWorlds.contains(worldName); } private Location buildLocationFromAuth(Player player, PlayerAuth auth) { @@ -109,13 +99,26 @@ public class TeleportationService implements Reloadable { return new Location(world, auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ()); } + private boolean teleportToFirstSpawn(final Player player) { + if (player.hasPlayedBefore()) { + return false; + } + Location firstSpawn = spawnLoader.getFirstSpawn(); + if (firstSpawn == null) { + return false; + } + + performTeleportation(player, new FirstSpawnTeleportEvent(player, firstSpawn)); + return true; + } + private void teleportBackFromSpawn(final Player player, final Location location) { performTeleportation(player, new AuthMeTeleportEvent(player, location)); } private void teleportToSpawn(final Player player, final boolean isAuthenticated) { final Location spawnLoc = spawnLoader.getSpawnLocation(player); - performTeleportation(player, new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, isAuthenticated)); + performTeleportation(player, new SpawnTeleportEvent(player, spawnLoc, isAuthenticated)); } /** @@ -137,8 +140,7 @@ public class TeleportationService implements Reloadable { }); } - private boolean mustForceSpawnAfterLogin(World world) { - return settings.getProperty(RestrictionSettings.FORCE_SPAWN_LOCATION_AFTER_LOGIN) - && spawnOnLoginWorlds.contains(world.getName()); + private static boolean isEventValid(AbstractTeleportEvent event) { + return !event.isCancelled() && event.getTo() != null && event.getTo().getWorld() != null; } } diff --git a/src/test/java/fr/xephi/authme/util/TeleportationServiceTest.java b/src/test/java/fr/xephi/authme/util/TeleportationServiceTest.java index 6309bfa9..b39fc9cf 100644 --- a/src/test/java/fr/xephi/authme/util/TeleportationServiceTest.java +++ b/src/test/java/fr/xephi/authme/util/TeleportationServiceTest.java @@ -133,6 +133,7 @@ public class TeleportationServiceTest { Player player = mock(Player.class); given(player.hasPlayedBefore()).willReturn(false); given(player.isOnline()).willReturn(true); + given(player.getWorld()).willReturn(mock(World.class)); given(settings.getProperty(RestrictionSettings.TELEPORT_UNAUTHED_TO_SPAWN)).willReturn(false); given(settings.getProperty(RestrictionSettings.FORCE_SPAWN_LOCATION_AFTER_LOGIN)).willReturn(false); given(spawnLoader.getFirstSpawn()).willReturn(null); @@ -250,15 +251,15 @@ public class TeleportationServiceTest { public void shouldTeleportPlayerToSpawnAfterLogin() { // given given(settings.getProperty(RestrictionSettings.FORCE_SPAWN_LOCATION_AFTER_LOGIN)).willReturn(true); - World world = mock(World.class); - given(world.getName()).willReturn("forced1"); Player player = mock(Player.class); - given(player.getWorld()).willReturn(world); given(player.isOnline()).willReturn(true); Location spawn = mockLocation(); given(spawnLoader.getSpawnLocation(player)).willReturn(spawn); PlayerAuth auth = mock(PlayerAuth.class); LimboPlayer limbo = mock(LimboPlayer.class); + Location limboLocation = mockLocation(); + given(limboLocation.getWorld().getName()).willReturn("forced1"); + given(limbo.getLoc()).willReturn(limboLocation); // when teleportationService.teleportOnLogin(player, auth, limbo); @@ -274,15 +275,15 @@ public class TeleportationServiceTest { // given given(settings.getProperty(RestrictionSettings.FORCE_SPAWN_LOCATION_AFTER_LOGIN)).willReturn(true); given(settings.getProperty(RestrictionSettings.TELEPORT_UNAUTHED_TO_SPAWN)).willReturn(false); - World world = mock(World.class); - given(world.getName()).willReturn("Forced1"); // different case Player player = mock(Player.class); - given(player.getWorld()).willReturn(world); given(player.isOnline()).willReturn(true); Location spawn = mockLocation(); given(spawnLoader.getSpawnLocation(player)).willReturn(spawn); PlayerAuth auth = mock(PlayerAuth.class); LimboPlayer limbo = mock(LimboPlayer.class); + Location limboLocation = mockLocation(); + given(limboLocation.getWorld().getName()).willReturn("Forced1"); // different case + given(limbo.getLoc()).willReturn(limboLocation); // when teleportationService.teleportOnLogin(player, auth, limbo); @@ -307,6 +308,8 @@ public class TeleportationServiceTest { Player player = mock(Player.class); given(player.isOnline()).willReturn(true); LimboPlayer limbo = mock(LimboPlayer.class); + Location limboLocation = mockLocation(); + given(limbo.getLoc()).willReturn(limboLocation); // when teleportationService.teleportOnLogin(player, auth, limbo); @@ -334,6 +337,8 @@ public class TeleportationServiceTest { World world = mock(World.class); given(player.getWorld()).willReturn(world); LimboPlayer limbo = mock(LimboPlayer.class); + Location limboLocation = mockLocation(); + given(limbo.getLoc()).willReturn(limboLocation); // when teleportationService.teleportOnLogin(player, auth, limbo);