diff --git a/README.md b/README.md index e7349a1..89f7b57 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ RememberMe versions < 1.2 can be used with the currently released version of Vel ## Permissions * `rememberme.notransfer` - doesn't transfer the user on login, but follows the default Velocity 'try' array instead, see velocity.toml +* `rememberme.notracking` - don't track the user at all (can be used with LuckPerms contexts to ignore tracking on certain servers) +* `rememberme.ignoreforcedhosts` - ignore forced hosts and connect to the last server (otherwise forced hosts have priority) ## Integrations diff --git a/build.gradle b/build.gradle index ff72756..ff438af 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { sourceCompatibility = JavaVersion.VERSION_11 group 'com.actualplayer' -version '1.2.3' +version '1.3.2' description 'A way for the user to login to the server he last connected to.' repositories { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 44e7c4d..e5338d3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/actualplayer/rememberme/RememberMe.java b/src/main/java/com/actualplayer/rememberme/RememberMe.java index 93a0489..93460c4 100644 --- a/src/main/java/com/actualplayer/rememberme/RememberMe.java +++ b/src/main/java/com/actualplayer/rememberme/RememberMe.java @@ -3,10 +3,11 @@ import com.actualplayer.rememberme.handlers.*; import com.google.inject.Inject; import com.google.inject.name.Named; +import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.connection.LoginEvent; import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent; -import com.velocitypowered.api.event.player.ServerConnectedEvent; +import com.velocitypowered.api.event.player.ServerPostConnectEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.plugin.Dependency; import com.velocitypowered.api.plugin.Plugin; @@ -69,25 +70,36 @@ public void onProxyInitialization(ProxyInitializeEvent event) { @Subscribe public void onServerChooseEvent(PlayerChooseInitialServerEvent chooseServerEvent) { + var p = chooseServerEvent.getPlayer(); + var h = p.getVirtualHost(); + + // Ignore plugin when user wants to use forced hosts + if (!p.hasPermission("rememberme.ignoreforcedhosts") && h.isPresent() && server.getConfiguration().getForcedHosts().containsKey(h.get().getHostString())) + return; + // Ignore plugin when user has notransfer permission - if (!chooseServerEvent.getPlayer().hasPermission("rememberme.notransfer")) { - handler.getLastServerName(chooseServerEvent.getPlayer().getUniqueId()).thenAcceptAsync(lastServerName -> { - if (lastServerName != null) { - getServer().getServer(lastServerName).ifPresent((registeredServer) -> { - try { - registeredServer.ping().join(); - } catch(CancellationException|CompletionException exception) { - return; - } - chooseServerEvent.setInitialServer(registeredServer); - }); - } - }).join(); - } + if (p.hasPermission("rememberme.notransfer")) + return; + + handler.getLastServerName(p.getUniqueId()).thenAcceptAsync(lastServerName -> { + if (lastServerName != null) { + getServer().getServer(lastServerName).ifPresent((registeredServer) -> { + try { + registeredServer.ping().join(); + } catch(CancellationException|CompletionException exception) { + return; + } + chooseServerEvent.setInitialServer(registeredServer); + }); + } + }).join(); } - @Subscribe - public void onServerChange(ServerConnectedEvent serverConnectedEvent) { - handler.setLastServerName(serverConnectedEvent.getPlayer().getUniqueId(), serverConnectedEvent.getServer().getServerInfo().getName()); + @Subscribe(order = PostOrder.LAST) + public void onServerChange(ServerPostConnectEvent serverConnectedEvent) { + if (!serverConnectedEvent.getPlayer().hasPermission("rememberme.notracking")) { + var p = serverConnectedEvent.getPlayer(); + p.getCurrentServer().ifPresent(s -> handler.setLastServerName(p.getUniqueId(), s.getServerInfo().getName())); + } } }