From 6fc2321fada78fa23b01e0d7b4ef6be72878fbd3 Mon Sep 17 00:00:00 2001 From: Luck Date: Wed, 2 Jan 2019 13:54:55 +0000 Subject: [PATCH] Refactor PlayerLoginProcessEvent This is technically a breaking change, but I'm fairly sure I'm the only person using this event. It's quite obscure ;p --- .../PlayerLoginProcessEvent.java} | 39 ++++++++++++++----- .../listeners/BukkitConnectionListener.java | 3 +- .../listeners/BungeeConnectionListener.java | 3 +- .../luckperms/common/event/EventFactory.java | 16 +++++--- .../listeners/NukkitConnectionListener.java | 3 +- .../listeners/SpongeConnectionListener.java | 3 +- .../listeners/VelocityConnectionListener.java | 5 +-- 7 files changed, 49 insertions(+), 23 deletions(-) rename api/src/main/java/me/lucko/luckperms/api/event/{user/UserLoginProcessEvent.java => player/PlayerLoginProcessEvent.java} (64%) diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/UserLoginProcessEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/player/PlayerLoginProcessEvent.java similarity index 64% rename from api/src/main/java/me/lucko/luckperms/api/event/user/UserLoginProcessEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/player/PlayerLoginProcessEvent.java index 53efaaa2..9bc5c2d4 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/user/UserLoginProcessEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/player/PlayerLoginProcessEvent.java @@ -23,29 +23,36 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.user; +package me.lucko.luckperms.api.event.player; import me.lucko.luckperms.api.User; import me.lucko.luckperms.api.event.LuckPermsEvent; import me.lucko.luckperms.api.event.Param; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.UUID; /** - * Called when LuckPerms has finished processing a certain Player's connection. + * Called when LuckPerms has finished processing a Player's initial connection. * - *

This event will always execute during the platforms async login/auth event. - * All handlers will be called instantly.

+ *

This event will always execute during the platforms async connection + * event. The LuckPerms platform listener processing the connection will block + * while this event is posted.

* - *

This, among other things, allows you to wait until permission data is loaded - * for a User during the BungeeCord 'LoginEvent', as event priorities are ignored - * by the current implementation.

+ *

This, among other things, allows you to wait until permission data is + * loaded for a User during the BungeeCord 'LoginEvent', as event priorities are + * ignored by the current implementation.

* - * @since 3.4 + *

The implementation will make an attempt to ensure this event is called + * for all connections, even if the operation to load User data was not + * successful. Note that LuckPerms will usually cancel the platform connection + * event if data could not be loaded.

+ * + * @since 4.4 */ -public interface UserLoginProcessEvent extends LuckPermsEvent { +public interface PlayerLoginProcessEvent extends LuckPermsEvent { /** * Gets the UUID of the connection which was processed @@ -61,11 +68,23 @@ public interface UserLoginProcessEvent extends LuckPermsEvent { */ @NonNull @Param(1) String getUsername(); + /** + * Gets if the login was processed successfully. + * + * @return true if the login was successful + */ + default boolean wasSuccessful() { + return getUser() != null; + } + /** * Gets the resultant User instance which was loaded. * + *

Returns {@code null} if the login was not processed + * {@link #wasSuccessful() successfully.}

+ * * @return the user instance */ - @NonNull @Param(2) User getUser(); + @Nullable @Param(2) User getUser(); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java index b4e2c544..2a609fac 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java @@ -86,8 +86,8 @@ public class BukkitConnectionListener extends AbstractConnectionListener impleme - setting up cached data. */ try { User user = loadUser(e.getUniqueId(), e.getName()); - this.plugin.getEventFactory().handleUserLoginProcess(e.getUniqueId(), e.getName(), user); recordConnection(e.getUniqueId()); + this.plugin.getEventFactory().handlePlayerLoginProcess(e.getUniqueId(), e.getName(), user); } catch (Exception ex) { this.plugin.getLogger().severe("Exception occurred whilst loading data for " + e.getUniqueId() + " - " + e.getName()); ex.printStackTrace(); @@ -95,6 +95,7 @@ public class BukkitConnectionListener extends AbstractConnectionListener impleme // deny the connection this.deniedAsyncLogin.add(e.getUniqueId()); e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, Message.LOADING_DATABASE_ERROR.asString(this.plugin.getLocaleManager())); + this.plugin.getEventFactory().handlePlayerLoginProcess(e.getUniqueId(), e.getName(), null); } } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java index 410d8343..60d9d122 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java @@ -82,8 +82,8 @@ public class BungeeConnectionListener extends AbstractConnectionListener impleme - setting up cached data. */ try { User user = loadUser(c.getUniqueId(), c.getName()); - this.plugin.getEventFactory().handleUserLoginProcess(c.getUniqueId(), c.getName(), user); recordConnection(c.getUniqueId()); + this.plugin.getEventFactory().handlePlayerLoginProcess(c.getUniqueId(), c.getName(), user); } catch (Exception ex) { this.plugin.getLogger().severe("Exception occurred whilst loading data for " + c.getUniqueId() + " - " + c.getName()); ex.printStackTrace(); @@ -94,6 +94,7 @@ public class BungeeConnectionListener extends AbstractConnectionListener impleme e.setCancelReason(TextComponent.fromLegacyText(Message.LOADING_DATABASE_ERROR.asString(this.plugin.getLocaleManager()))); e.setCancelled(true); } + this.plugin.getEventFactory().handlePlayerLoginProcess(c.getUniqueId(), c.getName(), null); } // finally, complete our intent to modify state, so the proxy can continue handling the connection. diff --git a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java index 54ae9f12..8585b3bf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java @@ -52,6 +52,7 @@ import me.lucko.luckperms.api.event.node.NodeAddEvent; import me.lucko.luckperms.api.event.node.NodeClearEvent; import me.lucko.luckperms.api.event.node.NodeRemoveEvent; import me.lucko.luckperms.api.event.player.PlayerDataSaveEvent; +import me.lucko.luckperms.api.event.player.PlayerLoginProcessEvent; import me.lucko.luckperms.api.event.source.Source; import me.lucko.luckperms.api.event.sync.ConfigReloadEvent; import me.lucko.luckperms.api.event.sync.PostSyncEvent; @@ -68,7 +69,6 @@ import me.lucko.luckperms.api.event.user.UserCacheLoadEvent; import me.lucko.luckperms.api.event.user.UserDataRecalculateEvent; import me.lucko.luckperms.api.event.user.UserFirstLoginEvent; import me.lucko.luckperms.api.event.user.UserLoadEvent; -import me.lucko.luckperms.api.event.user.UserLoginProcessEvent; import me.lucko.luckperms.api.event.user.track.UserDemoteEvent; import me.lucko.luckperms.api.event.user.track.UserPromoteEvent; import me.lucko.luckperms.common.api.implementation.ApiPermissionHolder; @@ -121,7 +121,7 @@ public final class EventFactory { return; } T event = supplier.get(); - this.eventBus.post(event); + post(event); }); } @@ -280,6 +280,14 @@ public final class EventFactory { post(UserFirstLoginEvent.class, () -> generate(UserFirstLoginEvent.class, uuid, username)); } + public void handlePlayerLoginProcess(UUID uuid, String username, User user) { + if (!shouldPost(PlayerLoginProcessEvent.class)) { + return; + } + + post(generate(PlayerLoginProcessEvent.class, uuid, username, new ApiUser(user))); + } + public void handlePlayerDataSave(UUID uuid, String username, PlayerSaveResult result) { post(PlayerDataSaveEvent.class, () -> generate(PlayerDataSaveEvent.class, uuid, username, result)); } @@ -288,10 +296,6 @@ public final class EventFactory { post(UserLoadEvent.class, () -> generate(UserLoadEvent.class, new ApiUser(user))); } - public void handleUserLoginProcess(UUID uuid, String username, User user) { - post(UserLoginProcessEvent.class, () -> generate(UserLoginProcessEvent.class, uuid, username, new ApiUser(user))); - } - public void handleUserDemote(User user, Track track, String from, String to, @Nullable Sender source) { post(UserDemoteEvent.class, () -> { Source s = source == null ? UnknownSource.INSTANCE : new EntitySourceImpl(new SenderEntity(source)); diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/listeners/NukkitConnectionListener.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/listeners/NukkitConnectionListener.java index d1cf98ec..06ca2685 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/listeners/NukkitConnectionListener.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/listeners/NukkitConnectionListener.java @@ -77,8 +77,8 @@ public class NukkitConnectionListener extends AbstractConnectionListener impleme - setting up cached data. */ try { User user = loadUser(e.getUuid(), e.getName()); - this.plugin.getEventFactory().handleUserLoginProcess(e.getUuid(), e.getName(), user); recordConnection(e.getUuid()); + this.plugin.getEventFactory().handlePlayerLoginProcess(e.getUuid(), e.getName(), user); } catch (Exception ex) { this.plugin.getLogger().severe("Exception occurred whilst loading data for " + e.getUuid() + " - " + e.getName()); ex.printStackTrace(); @@ -86,6 +86,7 @@ public class NukkitConnectionListener extends AbstractConnectionListener impleme // deny the connection this.deniedAsyncLogin.add(e.getUuid()); e.disAllow(Message.LOADING_DATABASE_ERROR.asString(this.plugin.getLocaleManager())); + this.plugin.getEventFactory().handlePlayerLoginProcess(e.getUuid(), e.getName(), null); } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java b/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java index 1774e5f8..56040bef 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java @@ -79,8 +79,8 @@ public class SpongeConnectionListener extends AbstractConnectionListener { - setting up cached data. */ try { User user = loadUser(profile.getUniqueId(), username); - this.plugin.getEventFactory().handleUserLoginProcess(profile.getUniqueId(), username, user); recordConnection(profile.getUniqueId()); + this.plugin.getEventFactory().handlePlayerLoginProcess(profile.getUniqueId(), username, user); } catch (Exception ex) { this.plugin.getLogger().severe("Exception occurred whilst loading data for " + profile.getUniqueId() + " - " + profile.getName()); ex.printStackTrace(); @@ -91,6 +91,7 @@ public class SpongeConnectionListener extends AbstractConnectionListener { e.setMessageCancelled(false); //noinspection deprecation e.setMessage(TextSerializers.LEGACY_FORMATTING_CODE.deserialize(Message.LOADING_DATABASE_ERROR.asString(this.plugin.getLocaleManager()))); + this.plugin.getEventFactory().handlePlayerLoginProcess(profile.getUniqueId(), username, null); } } diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/VelocityConnectionListener.java b/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/VelocityConnectionListener.java index 311e4cc8..8fd2cfc2 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/VelocityConnectionListener.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/VelocityConnectionListener.java @@ -86,11 +86,9 @@ public class VelocityConnectionListener extends AbstractConnectionListener { - setting up cached data. */ try { User user = loadUser(p.getUniqueId(), p.getUsername()); - this.plugin.getEventFactory().handleUserLoginProcess(p.getUniqueId(), p.getUsername(), user); recordConnection(p.getUniqueId()); - - // set permission provider e.setProvider(new PlayerPermissionProvider(p, user, this.plugin.getContextManager().getCacheFor(p))); + this.plugin.getEventFactory().handlePlayerLoginProcess(p.getUniqueId(), p.getUsername(), user); } catch (Exception ex) { this.plugin.getLogger().severe("Exception occurred whilst loading data for " + p.getUniqueId() + " - " + p.getUsername()); ex.printStackTrace(); @@ -100,6 +98,7 @@ public class VelocityConnectionListener extends AbstractConnectionListener { // cancel the login attempt this.deniedLogin.add(p.getUniqueId()); } + this.plugin.getEventFactory().handlePlayerLoginProcess(p.getUniqueId(), p.getUsername(), null); } }