50 lines
2.0 KiB
Java
50 lines
2.0 KiB
Java
package tc.oc.commons.bukkit.nick;
|
|
|
|
import javax.inject.Inject;
|
|
import javax.inject.Singleton;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
import org.bukkit.event.player.PlayerLoginEvent;
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
import tc.oc.commons.core.plugin.PluginFacet;
|
|
|
|
/**
|
|
* Listens for events that require player names and/or appearances to be refreshed.
|
|
*/
|
|
@Singleton
|
|
public class PlayerAppearanceListener implements Listener, PluginFacet {
|
|
|
|
private final PlayerAppearanceChanger playerAppearanceChanger;
|
|
|
|
@Inject PlayerAppearanceListener(PlayerAppearanceChanger playerAppearanceChanger) {
|
|
this.playerAppearanceChanger = playerAppearanceChanger;
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void onIdentityChange(PlayerIdentityChangeEvent event) {
|
|
playerAppearanceChanger.refreshPlayer(event.getPlayer(), event.getNewIdentity());
|
|
}
|
|
|
|
/**
|
|
* When a player logs in, refresh their own appearance, and the appearance of all other players for them.
|
|
* This must run after {@link IdentityProviderImpl#applyNicknameOnLogin}
|
|
*
|
|
* Note: this needs to happen in {@link PlayerJoinEvent} rather than {@link PlayerLoginEvent},
|
|
* because the latter fires before the player is added to {@link Server#getOnlinePlayers},
|
|
* and the nickname packet filter in SportBukkit uses that list to lookup players from PacketPlayOutScoreboardTeam.
|
|
*/
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void refreshNamesOnLogin(PlayerJoinEvent event) {
|
|
playerAppearanceChanger.refreshPlayer(event.getPlayer());
|
|
playerAppearanceChanger.refreshViewer(event.getPlayer());
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR)
|
|
public void onQuit(PlayerQuitEvent event) {
|
|
playerAppearanceChanger.cleanupAfterPlayer(event.getPlayer());
|
|
}
|
|
}
|