feat: Implement /authmevelocity command

resolves #41
This commit is contained in:
4drian3d 2022-07-27 16:20:37 +00:00
parent 01b41e47ae
commit 581e615363
5 changed files with 93 additions and 20 deletions

View File

@ -7,7 +7,7 @@
<groupId>com.glyart.authmevelocity</groupId> <groupId>com.glyart.authmevelocity</groupId>
<artifactId>parent</artifactId> <artifactId>parent</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>2.1.1</version> <version>2.2.0</version>
<properties> <properties>
<maven.compiler.source>11</maven.compiler.source> <maven.compiler.source>11</maven.compiler.source>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>parent</artifactId> <artifactId>parent</artifactId>
<groupId>com.glyart.authmevelocity</groupId> <groupId>com.glyart.authmevelocity</groupId>
<version>2.1.1</version> <version>2.2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -1,11 +1,13 @@
package com.glyart.authmevelocity.proxy; package com.glyart.authmevelocity.proxy;
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.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;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.moandjiezana.toml.Toml; import com.moandjiezana.toml.Toml;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.annotation.DataDirectory; import com.velocitypowered.api.plugin.annotation.DataDirectory;
@ -13,14 +15,19 @@ import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.messages.ChannelIdentifier; import com.velocitypowered.api.proxy.messages.ChannelIdentifier;
import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.slf4j.Logger; import org.slf4j.Logger;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -32,7 +39,9 @@ public class AuthMeVelocityPlugin {
private final Logger logger; private final Logger logger;
private final Path pluginDirectory; private final Path pluginDirectory;
private AuthmeVelocityAPI api; private AuthmeVelocityAPI api;
private AuthMeConfig config;
private final List<Object> listeners = new ArrayList<>(3);
protected final Set<UUID> loggedPlayers = Collections.synchronizedSet(new HashSet<>()); protected final Set<UUID> loggedPlayers = Collections.synchronizedSet(new HashSet<>());
@Inject @Inject
@ -44,30 +53,18 @@ public class AuthMeVelocityPlugin {
@Subscribe @Subscribe
public void onProxyInitialization(ProxyInitializeEvent event) { public void onProxyInitialization(ProxyInitializeEvent event) {
Toml toml = this.loadConfig(pluginDirectory); if (this.reload()) {
if (toml == null) {
logger.warn("Failed to load config.toml. Shutting down."); logger.warn("Failed to load config.toml. Shutting down.");
return; return;
} }
AuthMeConfig config = new AuthMeConfig(toml);
this.api = new AuthmeVelocityAPI(this, config);
proxy.getChannelRegistrar().register(AUTHMEVELOCITY_CHANNEL);
proxy.getEventManager().register(this, new ProxyListener(config, api, logger, proxy));
proxy.getEventManager().register(this, new PluginMessageListener(proxy, logger, config, api));
if (proxy.getPluginManager().isLoaded("fastlogin")) {
proxy.getEventManager().register(this, new FastLoginListener(proxy, api));
}
if (proxy.getPluginManager().isLoaded("miniplaceholders")) { if (proxy.getPluginManager().isLoaded("miniplaceholders")) {
AuthmePlaceholders.getExpansion(this).register(); AuthmePlaceholders.getExpansion(this).register();
} }
logger.info("-- AuthMeVelocity enabled --"); AuthmeCommand.register(this, proxy.getCommandManager());
logger.info("AuthServers: {}", config.getAuthServers());
if (config.getToServerOptions().sendToServer()) { this.sendInfoMessage();
logger.info("LobbyServers: {}", config.getToServerOptions().getTeleportServers());
}
} }
protected ProxyServer getProxy(){ protected ProxyServer getProxy(){
@ -95,7 +92,39 @@ public class AuthMeVelocityPlugin {
} catch (IOException ex) { } catch (IOException ex) {
logger.info("An error ocurred on configuration initialization", ex); logger.info("An error ocurred on configuration initialization", ex);
return null; return null;
}
}
public boolean reload() {
Toml toml = this.loadConfig(pluginDirectory);
if (toml == null) {
return false;
}
this.config = new AuthMeConfig(toml);
this.api = new AuthmeVelocityAPI(this, config);
proxy.getChannelRegistrar().register(AUTHMEVELOCITY_CHANNEL);
listeners.forEach(listener -> proxy.getEventManager().unregisterListener(this, listener));
listeners.add(new ProxyListener(config, api, logger, proxy));
listeners.add(new PluginMessageListener(proxy, logger, config, api));
if (proxy.getPluginManager().isLoaded("fastlogin")) {
listeners.add(new FastLoginListener(proxy, api));
}
listeners.forEach(listener -> proxy.getEventManager().register(this, listener));
return true;
}
public void sendInfoMessage() {
CommandSource source = proxy.getConsoleCommandSource();
source.sendMessage(Component.text("-- AuthMeVelocity enabled --"));
source.sendMessage(MiniMessage.miniMessage().deserialize(
"<gray>AuthServers: <green>" + config.getAuthServers()));
if (config.getToServerOptions().sendToServer()) {
source.sendMessage(MiniMessage.miniMessage().deserialize(
"<gray>LobbyServers: <green>" + config.getToServerOptions().getTeleportServers()));
} }
} }
} }

View File

@ -0,0 +1,44 @@
package com.glyart.authmevelocity.proxy.commands;
import com.glyart.authmevelocity.proxy.AuthMeVelocityPlugin;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.velocitypowered.api.command.BrigadierCommand;
import com.velocitypowered.api.command.CommandManager;
import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.command.CommandSource;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
public class AuthmeCommand {
private AuthmeCommand() {}
public static void register(AuthMeVelocityPlugin plugin, CommandManager manager) {
LiteralCommandNode<CommandSource> command = LiteralArgumentBuilder.<CommandSource>literal("authmevelocity")
.requires(src -> src.hasPermission("authmevelocity.commands"))
.then(LiteralArgumentBuilder.<CommandSource>literal("reload")
.executes(cmd -> {
CommandSource source = cmd.getSource();
if (plugin.reload()) {
plugin.sendInfoMessage();
source.sendMessage(Component.text("AuthmeVelocity was correctly reloaded", NamedTextColor.GREEN));
} else {
source.sendMessage(Component.text(
"There was an error while reloading the configuration. Check the server console", NamedTextColor.DARK_RED));
}
return Command.SINGLE_SUCCESS;
})
).build();
BrigadierCommand brigadier = new BrigadierCommand(command);
CommandMeta meta = manager.metaBuilder(brigadier)
.plugin(plugin)
.aliases("vauthme", "authmev")
.build();
manager.register(meta, brigadier);
}
}

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>parent</artifactId> <artifactId>parent</artifactId>
<groupId>com.glyart.authmevelocity</groupId> <groupId>com.glyart.authmevelocity</groupId>
<version>2.1.1</version> <version>2.2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>