RememberMe/src/main/java/com/actualplayer/rememberme/RememberMe.java

77 lines
2.8 KiB
Java
Raw Normal View History

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
}
}