Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
48 changes: 30 additions & 18 deletions src/main/java/com/actualplayer/rememberme/RememberMe.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()));
}
}
}