2019-08-12 19:14:11 +00:00
|
|
|
package com.actualplayer.rememberme;
|
|
|
|
|
2019-08-12 21:57:18 +00:00
|
|
|
import com.actualplayer.rememberme.handlers.*;
|
2019-08-12 19:14:11 +00:00
|
|
|
import com.google.inject.Inject;
|
|
|
|
import com.velocitypowered.api.event.Subscribe;
|
2019-08-12 21:57:18 +00:00
|
|
|
import com.velocitypowered.api.event.connection.LoginEvent;
|
|
|
|
import com.velocitypowered.api.event.player.ServerConnectedEvent;
|
2019-08-12 19:14:11 +00:00
|
|
|
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
2019-08-12 21:57:18 +00:00
|
|
|
import com.velocitypowered.api.plugin.Dependency;
|
2019-08-12 19:14:11 +00:00
|
|
|
import com.velocitypowered.api.plugin.Plugin;
|
|
|
|
import com.velocitypowered.api.plugin.annotation.DataDirectory;
|
|
|
|
import com.velocitypowered.api.proxy.ProxyServer;
|
2019-08-12 21:57:18 +00:00
|
|
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
2019-08-12 19:14:11 +00:00
|
|
|
import lombok.Getter;
|
2019-08-12 21:57:18 +00:00
|
|
|
import me.lucko.luckperms.LuckPerms;
|
|
|
|
import me.lucko.luckperms.api.LuckPermsApi;
|
2019-08-12 19:14:11 +00:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
|
|
|
import java.nio.file.Path;
|
|
|
|
|
2019-08-12 21:57:18 +00:00
|
|
|
@Plugin(id = "@ID@", name = "@NAME@", version = "@VERSION@", description = "@Description@", authors = {"ActualPlayer"}, dependencies = { @Dependency(id = "luckperms", optional = true) })
|
2019-08-12 19:14:11 +00:00
|
|
|
public class RememberMe {
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
private final ProxyServer server;
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
private final Logger logger;
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
@DataDirectory
|
|
|
|
@Getter
|
|
|
|
private Path dataFolderPath;
|
|
|
|
|
2019-08-12 21:57:18 +00:00
|
|
|
private IRememberMeHandler handler;
|
|
|
|
|
2019-08-12 19:14:11 +00:00
|
|
|
@Inject
|
|
|
|
public RememberMe(ProxyServer server, Logger logger) {
|
|
|
|
this.server = server;
|
|
|
|
this.logger = logger;
|
|
|
|
}
|
|
|
|
|
2019-08-12 21:57:18 +00:00
|
|
|
/**
|
|
|
|
* If LuckPerms is present, use the User meta tags to save last server
|
|
|
|
* @param event Velocity init event
|
|
|
|
*/
|
2019-08-12 19:14:11 +00:00
|
|
|
@Subscribe
|
|
|
|
public void onProxyInitialization(ProxyInitializeEvent event) {
|
2019-08-12 21:57:18 +00:00
|
|
|
try {
|
|
|
|
LuckPermsApi api = LuckPerms.getApi();
|
|
|
|
handler = new LuckPermsHandler(api);
|
|
|
|
getLogger().info("LuckPerms is installed, using LuckPerms meta-data to store last server info");
|
|
|
|
} catch (IllegalStateException ex) {
|
|
|
|
getLogger().error(ex.toString());
|
|
|
|
handler = new FileHandler(this);
|
|
|
|
getLogger().info("Using file-based storage");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Subscribe
|
|
|
|
public void onLoginEvent(LoginEvent loginEvent) {
|
|
|
|
// Ignore plugin when user has notransfer permission
|
|
|
|
if (!loginEvent.getPlayer().hasPermission("rememberme.notransfer")) {
|
|
|
|
handler.getLastServerName(loginEvent.getPlayer().getUniqueId()).thenAcceptAsync(lastServerName -> {
|
|
|
|
if (lastServerName != null) {
|
|
|
|
getServer().getServer(lastServerName).ifPresent(lastServer -> loginEvent.getPlayer().createConnectionRequest(lastServer).connectWithIndication());
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Subscribe
|
|
|
|
public void onServerChange(ServerConnectedEvent serverConnectedEvent) {
|
|
|
|
handler.setLastServerName(serverConnectedEvent.getPlayer().getUniqueId(), serverConnectedEvent.getServer().getServerInfo().getName());
|
2019-08-12 19:14:11 +00:00
|
|
|
}
|
|
|
|
}
|