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

95 lines
3.4 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.google.inject.name.Named;
2019-08-12 19:14:11 +00:00
import com.velocitypowered.api.event.Subscribe;
2019-08-12 21:57:18 +00:00
import com.velocitypowered.api.event.connection.LoginEvent;
2020-07-13 09:59:23 +00:00
import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent;
2019-08-12 21:57:18 +00:00
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.PluginContainer;
2019-08-12 19:14:11 +00:00
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.ProxyServer;
import lombok.Getter;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
2019-08-12 19:14:11 +00:00
import org.slf4j.Logger;
import java.nio.file.Path;
2021-04-20 20:16:30 +00:00
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletionException;
2019-08-12 19:14:11 +00:00
2024-04-15 17:00:30 +00:00
@Plugin(id = "@ID@", name = "@NAME@", version = "@VERSION@", description = "@DESCRIPTION@", authors = {"ActualPlayer", "evert"}, 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;
private boolean hasLuckPerms;
@Inject()
2019-08-12 19:14:11 +00:00
public RememberMe(ProxyServer server, Logger logger) {
this.server = server;
this.logger = logger;
}
@Inject(optional = true)
2024-04-15 17:00:30 +00:00
public void initLuckPerms(@Named("luckperms") PluginContainer luckPermsContainer) {
this.hasLuckPerms = luckPermsContainer != null;
}
2019-08-12 21:57:18 +00:00
/**
* If LuckPerms is present, use the User meta tags to save last server
2024-04-15 17:00:30 +00:00
*
2019-08-12 21:57:18 +00:00
* @param event Velocity init event
*/
2019-08-12 19:14:11 +00:00
@Subscribe
public void onProxyInitialization(ProxyInitializeEvent event) {
if (hasLuckPerms) {
LuckPerms api = LuckPermsProvider.get();
2019-08-12 21:57:18 +00:00
handler = new LuckPermsHandler(api);
getLogger().info("LuckPerms is installed, using LuckPerms meta-data to store last server info");
} else {
2019-08-12 21:57:18 +00:00
handler = new FileHandler(this);
getLogger().info("Using file-based storage");
}
}
@Subscribe
2020-07-13 09:59:23 +00:00
public void onServerChooseEvent(PlayerChooseInitialServerEvent chooseServerEvent) {
2019-08-12 21:57:18 +00:00
// Ignore plugin when user has notransfer permission
2020-07-13 09:59:23 +00:00
if (!chooseServerEvent.getPlayer().hasPermission("rememberme.notransfer")) {
handler.getLastServerName(chooseServerEvent.getPlayer().getUniqueId()).thenAcceptAsync(lastServerName -> {
2019-08-12 21:57:18 +00:00
if (lastServerName != null) {
getServer().getServer(lastServerName).ifPresent((registeredServer) -> {
2024-04-15 17:00:30 +00:00
try {
registeredServer.ping().join();
} catch (CancellationException | CompletionException exception) {
return;
}
chooseServerEvent.setInitialServer(registeredServer);
});
2019-08-12 21:57:18 +00:00
}
2019-08-13 21:35:35 +00:00
}).join();
2019-08-12 21:57:18 +00:00
}
}
@Subscribe
public void onServerChange(ServerConnectedEvent serverConnectedEvent) {
handler.setLastServerName(serverConnectedEvent.getPlayer().getUniqueId(), serverConnectedEvent.getServer().getServerInfo().getName());
2019-08-12 19:14:11 +00:00
}
}