feat: implement injection

This commit is contained in:
Adrian 2023-03-11 09:30:14 -05:00
parent b15cb1f17b
commit 63f7af9046
No known key found for this signature in database
GPG Key ID: FB8EF84DCE1BE452
9 changed files with 78 additions and 81 deletions

View File

@ -24,7 +24,7 @@ import org.spongepowered.configurate.CommentedConfigurationNode;
import org.spongepowered.configurate.ConfigurateException;
import org.spongepowered.configurate.hocon.HoconConfigurationLoader;
public class ConfigurationContainer<C> {
public final class ConfigurationContainer<C> {
private C config;
private final HoconConfigurationLoader loader;
private final Class<C> clazz;
@ -45,16 +45,11 @@ public class ConfigurationContainer<C> {
public CompletableFuture<Void> reload() {
return CompletableFuture.runAsync(() -> {
C newConfig = null;
try {
final CommentedConfigurationNode node = loader.load();
newConfig = node.get(clazz);
config = node.get(clazz);
} catch (ConfigurateException exception) {
throw new CompletionException("Could not load config.conf file", exception);
} finally {
if (newConfig != null) {
config = newConfig;
}
}
});
}

View File

@ -75,17 +75,17 @@ public final class AuthMeVelocityPlugin extends JavaPlugin {
public void sendMessageToProxy(
final Player player,
final @NotNull MessageType type,
final @NotNull String playername
final @NotNull String playerName
) {
@SuppressWarnings("UnstableApiUsage") final ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF(type.toString());
out.writeUTF(playername);
out.writeUTF(playerName);
if (player == null) {
logDebug("MessageToProxy | Null Player, Player Name: " + playername);
logDebug("MessageToProxy | Null Player, Player Name: " + playerName);
Bukkit.getServer().sendPluginMessage(this, CHANNEL, out.toByteArray());
} else {
logDebug("MessageToProxy | Player Present: " + player.getName() + ", Player Name: " + playername);
logDebug("MessageToProxy | Player Present: " + player.getName() + ", Player Name: " + playerName);
player.sendPluginMessage(this, CHANNEL, out.toByteArray());
}
}

View File

@ -17,7 +17,9 @@
package io.github._4drian3d.authmevelocity.velocity;
import com.google.inject.Inject;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import io.github.miniplaceholders.api.Expansion;
import net.kyori.adventure.text.minimessage.tag.Tag;
@ -25,10 +27,12 @@ import static io.github.miniplaceholders.api.utils.Components.FALSE_COMPONENT;
import static io.github.miniplaceholders.api.utils.Components.TRUE_COMPONENT;
final class AuthMePlaceholders {
private AuthMePlaceholders() {
}
@Inject
private AuthMeVelocityPlugin plugin;
@Inject
private ProxyServer proxyServer;
static Expansion getExpansion(AuthMeVelocityPlugin plugin) {
Expansion getExpansion() {
return Expansion.builder("authme")
.filter(Player.class)
// Logged Placeholders
@ -37,7 +41,7 @@ final class AuthMePlaceholders {
.globalPlaceholder("is_player_logged", (queue, ctx) -> {
String playerName = queue.popOr(() -> "you need to provide a player").value();
return Tag.selfClosingInserting(
plugin.getProxy().getPlayer(playerName)
proxyServer.getPlayer(playerName)
.map(plugin::isLogged)
.orElse(false) ? TRUE_COMPONENT : FALSE_COMPONENT
);
@ -48,7 +52,7 @@ final class AuthMePlaceholders {
.globalPlaceholder("player_in_auth_server", (queue, ctx) -> {
String playerName = queue.popOr(() -> "you need to provide a player").value();
return Tag.selfClosingInserting(
plugin.getProxy().getPlayer(playerName)
proxyServer.getPlayer(playerName)
.map(plugin::isInAuthServer)
.orElse(false) ? TRUE_COMPONENT : FALSE_COMPONENT
);

View File

@ -18,11 +18,14 @@
package io.github._4drian3d.authmevelocity.velocity;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.Dependency;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.plugin.PluginManager;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
@ -50,11 +53,11 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import java.nio.file.Path;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
import java.util.stream.Stream;
@Plugin(
id = "authmevelocity",
@ -82,12 +85,18 @@ public final class AuthMeVelocityPlugin implements AuthMeVelocityAPI {
@Inject
private ProxyServer proxy;
@Inject
private EventManager eventManager;
@Inject
private PluginManager pluginManager;
@Inject
private Logger logger;
@Inject
@DataDirectory
private Path pluginDirectory;
@Inject
private Metrics.Factory metricsFactory;
@Inject
private Injector injector;
private ConfigurationContainer<ProxyConfiguration> config;
final Set<UUID> loggedPlayers = ConcurrentHashMap.newKeySet();
@ -97,7 +106,7 @@ public final class AuthMeVelocityPlugin implements AuthMeVelocityAPI {
final LibsManager libraries
= new LibsManager(
new VelocityLibraryManager<>(
logger, pluginDirectory, proxy.getPluginManager(), this));
logger, pluginDirectory, pluginManager, this));
libraries.loadLibraries();
try {
@ -114,36 +123,32 @@ public final class AuthMeVelocityPlugin implements AuthMeVelocityAPI {
proxy.getChannelRegistrar().register(MODERN_CHANNEL, LEGACY_CHANNEL);
List.of(
new ProxyListener(this),
new ConnectListener(this, proxy, logger),
new PluginMessageListener(proxy, logger, this)
).forEach(listener ->
proxy.getEventManager().register(this, listener));
Stream.of(
ProxyListener.class,
ConnectListener.class,
PluginMessageListener.class
).map(injector::getInstance)
.forEach(listener -> eventManager.register(this, listener));
final boolean fastlogin = proxy.getPluginManager().isLoaded("fastlogin");
final boolean fastlogin = pluginManager.isLoaded("fastlogin");
metrics.addCustomChart(new SimplePie("fastlogin_compatibility", () -> Boolean.toString(fastlogin)));
if (fastlogin) {
logDebug("Register FastLogin compatibility");
proxy.getEventManager().register(this, new FastLoginListener(proxy, this));
eventManager.register(this, injector.getInstance(FastLoginListener.class));
}
final boolean miniplaceholders = proxy.getPluginManager().isLoaded("miniplaceholders");
final boolean miniplaceholders = pluginManager.isLoaded("miniplaceholders");
metrics.addCustomChart(new SimplePie("miniplaceholders_compatibility", () -> Boolean.toString(miniplaceholders)));
if (miniplaceholders) {
logDebug("Register MiniPlaceholders compatibility");
AuthMePlaceholders.getExpansion(this).register();
injector.getInstance(AuthMePlaceholders.class).getExpansion().register();
}
AuthMeCommand.register(this, proxy.getCommandManager(), logger);
injector.getInstance(AuthMeCommand.class).register();
this.sendInfoMessage();
}
ProxyServer getProxy(){
return this.proxy;
}
public void sendInfoMessage() {
final CommandSource source = proxy.getConsoleCommandSource();
source.sendMessage(MiniMessage.miniMessage().deserialize(
@ -182,7 +187,7 @@ public final class AuthMeVelocityPlugin implements AuthMeVelocityAPI {
@Override
public void removePlayerIf(@NotNull Predicate<Player> predicate){
loggedPlayers.removeIf(uuid -> predicate.test(getProxy().getPlayer(uuid).orElse(null)));
loggedPlayers.removeIf(uuid -> predicate.test(proxy.getPlayer(uuid).orElse(null)));
}
@Override

View File

@ -17,6 +17,7 @@
package io.github._4drian3d.authmevelocity.velocity.commands;
import com.google.inject.Inject;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.velocitypowered.api.command.BrigadierCommand;
@ -29,14 +30,14 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
import org.slf4j.Logger;
public class AuthMeCommand {
private AuthMeCommand() {
}
@Inject
private AuthMeVelocityPlugin plugin;
@Inject
private CommandManager manager;
@Inject
private Logger logger;
public static void register(
final AuthMeVelocityPlugin plugin,
final CommandManager manager,
final Logger logger
) {
public void register() {
final var command = LiteralArgumentBuilder.<CommandSource>literal("authmevelocity")
.requires(src -> src.hasPermission("authmevelocity.commands"))
.then(LiteralArgumentBuilder.<CommandSource>literal("reload")

View File

@ -19,6 +19,7 @@ package io.github._4drian3d.authmevelocity.velocity.listener;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.google.inject.Inject;
import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe;
@ -35,19 +36,12 @@ import org.slf4j.Logger;
import java.util.Optional;
public final class ConnectListener {
private final ProxyServer proxy;
private final Logger logger;
private final AuthMeVelocityPlugin plugin;
public ConnectListener(
final AuthMeVelocityPlugin plugin,
final ProxyServer proxy,
final Logger logger
) {
this.plugin = plugin;
this.logger = logger;
this.proxy = proxy;
}
@Inject
private ProxyServer proxy;
@Inject
private Logger logger;
@Inject
private AuthMeVelocityPlugin plugin;
@Subscribe(order = PostOrder.LATE)
public void onInitialServer(

View File

@ -18,17 +18,17 @@
package io.github._4drian3d.authmevelocity.velocity.listener;
import com.github.games647.fastlogin.velocity.event.VelocityFastLoginAutoLoginEvent;
import com.google.inject.Inject;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.proxy.ProxyServer;
import io.github._4drian3d.authmevelocity.velocity.AuthMeVelocityPlugin;
public class FastLoginListener {
private final ProxyServer proxy;
private final AuthMeVelocityPlugin plugin;
public FastLoginListener(ProxyServer proxy, AuthMeVelocityPlugin plugin){
this.proxy = proxy;
this.plugin = plugin;
}
@Inject
private ProxyServer proxy;
@Inject
private AuthMeVelocityPlugin plugin;
@Subscribe
public void onAutoLogin(VelocityFastLoginAutoLoginEvent event){
plugin.logDebug("VelocityFastLoginAutoLoginEvent | Attempt to auto register player");

View File

@ -18,7 +18,9 @@
package io.github._4drian3d.authmevelocity.velocity.listener;
import com.google.common.io.ByteArrayDataInput;
import com.google.inject.Inject;
import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.connection.PluginMessageEvent;
import com.velocitypowered.api.proxy.Player;
@ -29,22 +31,20 @@ import io.github._4drian3d.authmevelocity.api.velocity.event.*;
import io.github._4drian3d.authmevelocity.common.MessageType;
import io.github._4drian3d.authmevelocity.velocity.AuthMeVelocityPlugin;
import io.github._4drian3d.authmevelocity.velocity.utils.AuthMeUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import java.util.Locale;
public class PluginMessageListener {
private final ProxyServer proxy;
private final Logger logger;
private final AuthMeVelocityPlugin plugin;
public PluginMessageListener(@NotNull ProxyServer proxy, @NotNull Logger logger, AuthMeVelocityPlugin plugin) {
this.proxy = proxy;
this.logger = logger;
this.plugin = plugin;
}
@Inject
private ProxyServer proxy;
@Inject
private EventManager eventManager;
@Inject
private Logger logger;
@Inject
private AuthMeVelocityPlugin plugin;
@Subscribe
public void onPluginMessage(final PluginMessageEvent event, Continuation continuation) {
@ -73,7 +73,7 @@ public class PluginMessageListener {
case LOGIN -> {
plugin.logDebug("PluginMessageEvent | Login type");
if (player != null && plugin.addPlayer(player)) {
proxy.getEventManager().fireAndForget(new ProxyLoginEvent(player));
eventManager.fireAndForget(new ProxyLoginEvent(player));
if (plugin.config().get().sendOnLogin().sendToServerOnLogin()) {
this.createServerConnectionRequest(player, connection);
}
@ -83,14 +83,14 @@ public class PluginMessageListener {
case LOGOUT -> {
plugin.logDebug("PluginMessageEvent | Logout type");
if (player != null && plugin.removePlayer(player)){
proxy.getEventManager().fireAndForget(new ProxyLogoutEvent(player));
eventManager.fireAndForget(new ProxyLogoutEvent(player));
plugin.logDebug("PluginMessageEvent | Player not null");
}
}
case REGISTER -> {
plugin.logDebug("PluginMessageEvent | Register");
if (player != null) {
proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(player));
eventManager.fireAndForget(new ProxyRegisterEvent(player));
plugin.logDebug("PluginMessageEvent | Player not null");
}
}
@ -98,11 +98,11 @@ public class PluginMessageListener {
plugin.logDebug("PluginMessageEvent | Unregister type");
if (player != null) {
plugin.logDebug("PluginMessageEvent | Player not null");
proxy.getEventManager().fireAndForget(new ProxyUnregisterEvent(player));
eventManager.fireAndForget(new ProxyUnregisterEvent(player));
}
}
case FORCE_UNREGISTER -> {
proxy.getEventManager().fireAndForget(new ProxyForcedUnregisterEvent(player));
eventManager.fireAndForget(new ProxyForcedUnregisterEvent(player));
plugin.logDebug("PluginMessageEvent | Forced Unregister type");
}
@ -127,7 +127,7 @@ public class PluginMessageListener {
return;
}
proxy.getEventManager().fire(new PreSendOnLoginEvent(player, loginServer, toSend.object()))
eventManager.fire(new PreSendOnLoginEvent(player, loginServer, toSend.object()))
.thenAccept(event -> {
if (!event.getResult().isAllowed()) {
return;

View File

@ -17,6 +17,7 @@
package io.github._4drian3d.authmevelocity.velocity.listener;
import com.google.inject.Inject;
import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.EventTask;
import com.velocitypowered.api.event.PostOrder;
@ -31,11 +32,8 @@ import io.github._4drian3d.authmevelocity.velocity.utils.AuthMeUtils;
import net.kyori.adventure.text.minimessage.MiniMessage;
public final class ProxyListener {
private final AuthMeVelocityPlugin plugin;
public ProxyListener(AuthMeVelocityPlugin plugin) {
this.plugin = plugin;
}
@Inject
private AuthMeVelocityPlugin plugin;
@Subscribe
public EventTask onDisconnect(final DisconnectEvent event) {