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.commands.AuthmeCommand;
|
||||||
import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
|
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.FastLoginListener;
|
||||||
import com.glyart.authmevelocity.proxy.listener.PluginMessageListener;
|
import com.glyart.authmevelocity.proxy.listener.PluginMessageListener;
|
||||||
import com.glyart.authmevelocity.proxy.listener.ProxyListener;
|
import com.glyart.authmevelocity.proxy.listener.ProxyListener;
|
||||||
@ -111,7 +112,8 @@ public class AuthMeVelocityPlugin {
|
|||||||
listeners.forEach(listener -> proxy.getEventManager().unregisterListener(this, listener));
|
listeners.forEach(listener -> proxy.getEventManager().unregisterListener(this, listener));
|
||||||
listeners.clear();
|
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));
|
listeners.add(new PluginMessageListener(proxy, logger, config, api));
|
||||||
|
|
||||||
if (proxy.getPluginManager().isLoaded("fastlogin")) {
|
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;
|
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.AuthmeVelocityAPI;
|
||||||
import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
|
import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
|
||||||
import com.glyart.authmevelocity.proxy.config.ConfigUtils;
|
import com.glyart.authmevelocity.proxy.config.ConfigUtils;
|
||||||
import com.glyart.authmevelocity.proxy.utils.AuthmeUtils;
|
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.Continuation;
|
||||||
import com.velocitypowered.api.event.EventTask;
|
import com.velocitypowered.api.event.EventTask;
|
||||||
import com.velocitypowered.api.event.PostOrder;
|
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.command.CommandExecuteEvent;
|
||||||
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
||||||
import com.velocitypowered.api.event.player.PlayerChatEvent;
|
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.event.player.TabCompleteEvent;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
|
|
||||||
public final class ProxyListener {
|
public final class ProxyListener {
|
||||||
private final AuthMeConfig config;
|
private final AuthMeConfig config;
|
||||||
private final AuthmeVelocityAPI api;
|
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.config = config;
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.logger = logger;
|
|
||||||
this.proxy = proxy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@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)
|
@Subscribe(order = PostOrder.FIRST)
|
||||||
public void onTabComplete(TabCompleteEvent event){
|
public void onTabComplete(TabCompleteEvent event){
|
||||||
if (api.isLogged(event.getPlayer())) {
|
if (api.isLogged(event.getPlayer())) {
|
||||||
@ -120,29 +80,4 @@ public final class ProxyListener {
|
|||||||
event.getSuggestions().clear();
|
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