parent
f90be2e75f
commit
019471387a
@ -2,6 +2,7 @@ package com.glyart.authmevelocity.proxy;
|
||||
|
||||
import com.glyart.authmevelocity.proxy.commands.AuthmeCommand;
|
||||
import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
|
||||
import com.glyart.authmevelocity.proxy.listener.ConnectListener;
|
||||
import com.glyart.authmevelocity.proxy.listener.FastLoginListener;
|
||||
import com.glyart.authmevelocity.proxy.listener.PluginMessageListener;
|
||||
import com.glyart.authmevelocity.proxy.listener.ProxyListener;
|
||||
@ -111,7 +112,8 @@ public class AuthMeVelocityPlugin {
|
||||
listeners.forEach(listener -> proxy.getEventManager().unregisterListener(this, listener));
|
||||
listeners.clear();
|
||||
|
||||
listeners.add(new ProxyListener(config, api, logger, proxy));
|
||||
listeners.add(new ProxyListener(config, api));
|
||||
listeners.add(new ConnectListener(config, api, proxy, logger));
|
||||
listeners.add(new PluginMessageListener(proxy, logger, config, api));
|
||||
|
||||
if (proxy.getPluginManager().isLoaded("fastlogin")) {
|
||||
|
@ -0,0 +1,91 @@
|
||||
package com.glyart.authmevelocity.proxy.listener;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import com.glyart.authmevelocity.proxy.AuthMeVelocityPlugin;
|
||||
import com.glyart.authmevelocity.proxy.AuthmeVelocityAPI;
|
||||
import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.velocitypowered.api.event.Continuation;
|
||||
import com.velocitypowered.api.event.PostOrder;
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent;
|
||||
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
|
||||
import com.velocitypowered.api.event.player.ServerPreConnectEvent;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
|
||||
public class ConnectListener {
|
||||
private final ProxyServer proxy;
|
||||
private final Logger logger;
|
||||
private final AuthMeConfig config;
|
||||
private final AuthmeVelocityAPI api;
|
||||
|
||||
public ConnectListener(AuthMeConfig config, AuthmeVelocityAPI api, ProxyServer proxy, Logger logger) {
|
||||
this.config = config;
|
||||
this.api = api;
|
||||
this.logger = logger;
|
||||
this.proxy = proxy;
|
||||
}
|
||||
|
||||
@Subscribe(order = PostOrder.LATE)
|
||||
public void onInitialServer(PlayerChooseInitialServerEvent event, Continuation continuation){
|
||||
if(!config.getEnsureOptions().ensureAuthServer()) {
|
||||
continuation.resume();
|
||||
return;
|
||||
}
|
||||
|
||||
Optional<RegisteredServer> optionalSV = event.getInitialServer();
|
||||
if(optionalSV.isPresent() && api.isAuthServer(optionalSV.get())){
|
||||
continuation.resume();
|
||||
return;
|
||||
}
|
||||
|
||||
@Nullable RegisteredServer server = getAvailableServer();
|
||||
// Velocity takes over in case the initial server is not present
|
||||
event.setInitialServer(server);
|
||||
continuation.resume();
|
||||
if (server == null) {
|
||||
logger.error("Cannot send the player {} to an auth server", event.getPlayer().getUsername());
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onServerPreConnect(ServerPreConnectEvent event, Continuation continuation) {
|
||||
if (!event.getResult().isAllowed() && api.isLogged(event.getPlayer())) {
|
||||
continuation.resume();
|
||||
return;
|
||||
}
|
||||
|
||||
event.getResult().getServer().ifPresent(server -> {
|
||||
if(!api.isAuthServer(server)){
|
||||
event.setResult(ServerPreConnectEvent.ServerResult.denied());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onServerPostConnect(ServerPostConnectEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
if (api.isLogged(player) && api.isInAuthServer(player)){
|
||||
ByteArrayDataOutput buf = ByteStreams.newDataOutput();
|
||||
buf.writeUTF("LOGIN");
|
||||
player.getCurrentServer().ifPresent(sv ->
|
||||
sv.sendPluginMessage(AuthMeVelocityPlugin.AUTHMEVELOCITY_CHANNEL, buf.toByteArray()));
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Implement #40
|
||||
private @Nullable RegisteredServer getAvailableServer() {
|
||||
for(String sv : config.getAuthServers()){
|
||||
Optional<RegisteredServer> opt = proxy.getServer(sv);
|
||||
if (opt.isPresent()) return opt.get();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,14 +1,9 @@
|
||||
package com.glyart.authmevelocity.proxy.listener;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import com.glyart.authmevelocity.proxy.AuthMeVelocityPlugin;
|
||||
import com.glyart.authmevelocity.proxy.AuthmeVelocityAPI;
|
||||
import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
|
||||
import com.glyart.authmevelocity.proxy.config.ConfigUtils;
|
||||
import com.glyart.authmevelocity.proxy.utils.AuthmeUtils;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.velocitypowered.api.event.Continuation;
|
||||
import com.velocitypowered.api.event.EventTask;
|
||||
import com.velocitypowered.api.event.PostOrder;
|
||||
@ -16,29 +11,18 @@ import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.command.CommandExecuteEvent;
|
||||
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
||||
import com.velocitypowered.api.event.player.PlayerChatEvent;
|
||||
import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent;
|
||||
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
|
||||
import com.velocitypowered.api.event.player.ServerPreConnectEvent;
|
||||
import com.velocitypowered.api.event.player.TabCompleteEvent;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public final class ProxyListener {
|
||||
private final AuthMeConfig config;
|
||||
private final AuthmeVelocityAPI api;
|
||||
private final ProxyServer proxy;
|
||||
private final Logger logger;
|
||||
|
||||
public ProxyListener(@NotNull AuthMeConfig config, AuthmeVelocityAPI api, Logger logger, ProxyServer proxy) {
|
||||
public ProxyListener(@NotNull AuthMeConfig config, AuthmeVelocityAPI api) {
|
||||
this.config = config;
|
||||
this.api = api;
|
||||
this.logger = logger;
|
||||
this.proxy = proxy;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@ -80,30 +64,6 @@ public final class ProxyListener {
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onServerPreConnect(ServerPreConnectEvent event, Continuation continuation) {
|
||||
if (
|
||||
!event.getResult().isAllowed() && api.isLogged(event.getPlayer())
|
||||
|| !event.getResult().getServer().map(api::isAuthServer).orElse(false)
|
||||
) {
|
||||
continuation.resume();
|
||||
return;
|
||||
}
|
||||
event.setResult(ServerPreConnectEvent.ServerResult.denied());
|
||||
continuation.resume();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onServerPostConnect(ServerPostConnectEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
if (api.isLogged(player) && api.isInAuthServer(player)){
|
||||
ByteArrayDataOutput buf = ByteStreams.newDataOutput();
|
||||
buf.writeUTF("LOGIN");
|
||||
player.getCurrentServer().ifPresent(sv ->
|
||||
sv.sendPluginMessage(AuthMeVelocityPlugin.AUTHMEVELOCITY_CHANNEL, buf.toByteArray()));
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(order = PostOrder.FIRST)
|
||||
public void onTabComplete(TabCompleteEvent event){
|
||||
if (api.isLogged(event.getPlayer())) {
|
||||
@ -120,29 +80,4 @@ public final class ProxyListener {
|
||||
event.getSuggestions().clear();
|
||||
}
|
||||
|
||||
@Subscribe(order = PostOrder.LATE)
|
||||
public void onInitialServer(PlayerChooseInitialServerEvent event, Continuation continuation){
|
||||
if(!config.getEnsureOptions().ensureAuthServer()
|
||||
|| event.getInitialServer().map(api::isAuthServer).orElse(false)
|
||||
) {
|
||||
continuation.resume();
|
||||
return;
|
||||
}
|
||||
@Nullable RegisteredServer server = getAvailableServer();
|
||||
// Velocity takes over in case the initial server is not present
|
||||
event.setInitialServer(server);
|
||||
continuation.resume();
|
||||
if (server == null) {
|
||||
logger.error("Cannot send the player {} to an auth server", event.getPlayer().getUsername());
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Implement #40
|
||||
private @Nullable RegisteredServer getAvailableServer() {
|
||||
for(String sv : config.getAuthServers()){
|
||||
Optional<RegisteredServer> opt = proxy.getServer(sv);
|
||||
if (opt.isPresent()) return opt.get();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user