Fix non-spigot server support

This commit is contained in:
Gabriele C 2017-10-02 08:05:35 +02:00
parent 60c7499cf4
commit caf2a0ee9e
5 changed files with 52 additions and 35 deletions

View File

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

View File

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

View File

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

View File

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

View File

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