diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 3993114cc..0f2574bc9 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -21,6 +21,7 @@ import fr.xephi.authme.listener.PlayerListener111; import fr.xephi.authme.listener.PlayerListener16; import fr.xephi.authme.listener.PlayerListener18; import fr.xephi.authme.listener.PlayerListener19; +import fr.xephi.authme.listener.PlayerListener19Spigot; import fr.xephi.authme.listener.ServerListener; import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.security.crypts.Sha256; @@ -313,6 +314,11 @@ public class AuthMe extends JavaPlugin { pluginManager.registerEvents(injector.getSingleton(PlayerListener19.class), this); } + // Try to register 1.9 spigot player listeners + if (isClassLoaded("org.spigotmc.event.player.PlayerSpawnLocationEvent")) { + pluginManager.registerEvents(injector.getSingleton(PlayerListener19Spigot.class), this); + } + // Register listener for 1.11 events if available if (isClassLoaded("org.bukkit.event.entity.EntityAirChangeEvent")) { pluginManager.registerEvents(injector.getSingleton(PlayerListener111.class), this); diff --git a/src/main/java/fr/xephi/authme/listener/PlayerListener.java b/src/main/java/fr/xephi/authme/listener/PlayerListener.java index da489cdc2..a1cdbc433 100644 --- a/src/main/java/fr/xephi/authme/listener/PlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/PlayerListener.java @@ -191,7 +191,7 @@ public class PlayerListener implements Listener { public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); - if (!PlayerListener19.isIsPlayerSpawnLocationEventCalled()) { + if (!PlayerListener19Spigot.isIsPlayerSpawnLocationEventCalled()) { teleportationService.teleportOnJoin(player); management.performJoin(player, player.getLocation()); } diff --git a/src/main/java/fr/xephi/authme/listener/PlayerListener19.java b/src/main/java/fr/xephi/authme/listener/PlayerListener19.java index c5aef4dbc..b6db1802a 100644 --- a/src/main/java/fr/xephi/authme/listener/PlayerListener19.java +++ b/src/main/java/fr/xephi/authme/listener/PlayerListener19.java @@ -1,51 +1,20 @@ package fr.xephi.authme.listener; -import javax.inject.Inject; - -import fr.xephi.authme.process.Management; -import fr.xephi.authme.service.TeleportationService; -import org.bukkit.Location; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +import javax.inject.Inject; /** * Listener of player events for events introduced in Minecraft 1.9. */ public class PlayerListener19 implements Listener { - @Inject - private Management management; - - @Inject - private TeleportationService teleportationService; - @Inject private ListenerService listenerService; - private static boolean IS_PLAYER_SPAWN_LOCATION_EVENT_CALLED = false; - - public static boolean isIsPlayerSpawnLocationEventCalled() { - return IS_PLAYER_SPAWN_LOCATION_EVENT_CALLED; - } - - // Note: the following event is called since MC1.9, in older versions we have to fallback on the PlayerJoinEvent - @EventHandler(priority = EventPriority.HIGH) - public void onPlayerSpawn(PlayerSpawnLocationEvent event) { - PlayerListener19.IS_PLAYER_SPAWN_LOCATION_EVENT_CALLED = true; - final Player player = event.getPlayer(); - - management.performJoin(player, event.getSpawnLocation()); - - Location customSpawnLocation = teleportationService.prepareOnJoinSpawnLocation(player); - if (customSpawnLocation != null) { - event.setSpawnLocation(customSpawnLocation); - } - } - @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { if (listenerService.shouldCancelEvent(event)) { diff --git a/src/main/java/fr/xephi/authme/listener/PlayerListener19Spigot.java b/src/main/java/fr/xephi/authme/listener/PlayerListener19Spigot.java new file mode 100644 index 000000000..9877dbdea --- /dev/null +++ b/src/main/java/fr/xephi/authme/listener/PlayerListener19Spigot.java @@ -0,0 +1,42 @@ +package fr.xephi.authme.listener; + +import fr.xephi.authme.process.Management; +import fr.xephi.authme.service.TeleportationService; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +import javax.inject.Inject; + +public class PlayerListener19Spigot implements Listener { + + @Inject + private Management management; + + @Inject + private TeleportationService teleportationService; + + private static boolean IS_PLAYER_SPAWN_LOCATION_EVENT_CALLED = false; + + public static boolean isIsPlayerSpawnLocationEventCalled() { + return IS_PLAYER_SPAWN_LOCATION_EVENT_CALLED; + } + + // Note: the following event is called since MC1.9, in older versions we have to fallback on the PlayerJoinEvent + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerSpawn(PlayerSpawnLocationEvent event) { + IS_PLAYER_SPAWN_LOCATION_EVENT_CALLED = true; + final Player player = event.getPlayer(); + + management.performJoin(player, event.getSpawnLocation()); + + Location customSpawnLocation = teleportationService.prepareOnJoinSpawnLocation(player); + if (customSpawnLocation != null) { + event.setSpawnLocation(customSpawnLocation); + } + } + +} diff --git a/src/test/java/fr/xephi/authme/listener/ListenerConsistencyTest.java b/src/test/java/fr/xephi/authme/listener/ListenerConsistencyTest.java index 18f4fc809..e00d032a5 100644 --- a/src/test/java/fr/xephi/authme/listener/ListenerConsistencyTest.java +++ b/src/test/java/fr/xephi/authme/listener/ListenerConsistencyTest.java @@ -32,7 +32,7 @@ public final class ListenerConsistencyTest { "PlayerListener#onPlayerQuit", "ServerListener#onPluginDisable", "ServerListener#onServerPing", "ServerListener#onPluginEnable", "PlayerListener#onJoinMessage", "PlayerListener#onAsyncPlayerPreLoginEvent", - "PlayerListener19#onPlayerSpawn"); + "PlayerListener19Spigot#onPlayerSpawn"); @BeforeClass public static void collectListenerClasses() {