Search in sources :

Example 1 with Plugin

use of com.velocitypowered.api.plugin.Plugin in project AntiVPN by funkemunky.

the class VelocityPlugin method onInit.

@Subscribe
public void onInit(ProxyInitializeEvent event) {
    INSTANCE = this;
    logger.info("Loading config...");
    config = new Config();
    // Loading plugin
    logger.info("Starting AntiVPN services...");
    AntiVPN.start(new VelocityConfig(), new VelocityListener(), new VelocityPlayerExecutor(), configDir.toFile());
    if (AntiVPN.getInstance().getConfig().metrics()) {
        logger.info("Starting metrics...");
        Metrics metrics = metricsFactory.make(this, 12791);
    }
    logger.info("Registering commands...");
    for (Command command : AntiVPN.getInstance().getCommands()) {
        server.getCommandManager().register(server.getCommandManager().metaBuilder(command.name()).aliases(command.aliases()).build(), (SimpleCommand) invocation -> {
            CommandSource sender = invocation.source();
            if (!invocation.source().hasPermission("antivpn.command.*") && !invocation.source().hasPermission(command.permission())) {
                invocation.source().sendMessage(Component.text("No permission").toBuilder().color(TextColor.color(255, 0, 0)).build());
                return;
            }
            val children = command.children();
            String[] args = invocation.arguments();
            if (children.length > 0 && args.length > 0) {
                for (Command child : children) {
                    if (child.name().equalsIgnoreCase(args[0]) || Arrays.stream(child.aliases()).anyMatch(alias -> alias.equalsIgnoreCase(args[0]))) {
                        if (!sender.hasPermission("antivpn.command.*") && !sender.hasPermission(child.permission())) {
                            invocation.source().sendMessage(Component.text("No permission").toBuilder().color(TextColor.color(255, 0, 0)).build());
                            return;
                        }
                        sender.sendMessage(LegacyComponentSerializer.builder().character('&').build().deserialize(child.execute(new VelocityCommandExecutor(sender), IntStream.range(0, args.length - 1).mapToObj(i -> args[i + 1]).toArray(String[]::new))));
                        return;
                    }
                }
            }
            sender.sendMessage(LegacyComponentSerializer.builder().character('&').build().deserialize(command.execute(new VelocityCommandExecutor(sender), args)));
        });
    }
}
Also used : IntStream(java.util.stream.IntStream) Plugin(com.velocitypowered.api.plugin.Plugin) Arrays(java.util.Arrays) SimpleCommand(com.velocitypowered.api.command.SimpleCommand) Getter(lombok.Getter) TextColor(net.kyori.adventure.text.format.TextColor) Command(dev.brighten.antivpn.command.Command) Inject(com.google.inject.Inject) lombok.val(lombok.val) Logger(java.util.logging.Logger) DataDirectory(com.velocitypowered.api.plugin.annotation.DataDirectory) Config(dev.brighten.antivpn.velocity.util.Config) AntiVPN(dev.brighten.antivpn.AntiVPN) Metrics(org.bstats.velocity.Metrics) Component(net.kyori.adventure.text.Component) ProxyServer(com.velocitypowered.api.proxy.ProxyServer) Subscribe(com.velocitypowered.api.event.Subscribe) ProxyInitializeEvent(com.velocitypowered.api.event.proxy.ProxyInitializeEvent) CommandSource(com.velocitypowered.api.command.CommandSource) LegacyComponentSerializer(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer) Path(java.nio.file.Path) lombok.val(lombok.val) Metrics(org.bstats.velocity.Metrics) SimpleCommand(com.velocitypowered.api.command.SimpleCommand) Command(dev.brighten.antivpn.command.Command) Config(dev.brighten.antivpn.velocity.util.Config) CommandSource(com.velocitypowered.api.command.CommandSource) Subscribe(com.velocitypowered.api.event.Subscribe)

Example 2 with Plugin

use of com.velocitypowered.api.plugin.Plugin in project LimboAuth by Elytrium.

the class LimboAuth method reload.

@SuppressWarnings("SwitchStatementWithTooFewBranches")
public void reload() throws Exception {
    Settings.IMP.reload(new File(this.dataDirectory.toFile().getAbsoluteFile(), "config.yml"));
    if (this.floodgateApi == null && !Settings.IMP.MAIN.FLOODGATE_NEED_AUTH) {
        throw new IllegalStateException("If you don't need to auth floodgate players please install floodgate plugin.");
    }
    if (Settings.IMP.MAIN.CHECK_PASSWORD_STRENGTH) {
        this.unsafePasswords.clear();
        Path unsafePasswordsPath = Paths.get(this.dataDirectory.toFile().getAbsolutePath(), Settings.IMP.MAIN.UNSAFE_PASSWORDS_FILE);
        if (!unsafePasswordsPath.toFile().exists()) {
            Files.copy(Objects.requireNonNull(this.getClass().getResourceAsStream("/unsafe_passwords.txt")), unsafePasswordsPath);
        }
        this.unsafePasswords.addAll(Files.lines(unsafePasswordsPath).collect(Collectors.toSet()));
    }
    this.cachedAuthChecks.clear();
    Settings.DATABASE dbConfig = Settings.IMP.DATABASE;
    // requireNonNull prevents the shade plugin from excluding the drivers in minimized jar.
    switch(dbConfig.STORAGE_TYPE.toLowerCase(Locale.ROOT)) {
        case "h2":
            {
                Objects.requireNonNull(org.h2.Driver.class);
                Objects.requireNonNull(org.h2.engine.Engine.class);
                this.connectionSource = new JdbcPooledConnectionSource("jdbc:h2:" + this.dataDirectory.toFile().getAbsoluteFile() + "/limboauth");
                break;
            }
        case "mysql":
            {
                Objects.requireNonNull(com.mysql.cj.jdbc.Driver.class);
                Objects.requireNonNull(com.mysql.cj.conf.url.SingleConnectionUrl.class);
                this.connectionSource = new JdbcPooledConnectionSource("jdbc:mysql://" + dbConfig.HOSTNAME + "/" + dbConfig.DATABASE + dbConfig.CONNECTION_PARAMETERS, dbConfig.USER, dbConfig.PASSWORD);
                break;
            }
        case "postgresql":
            {
                Objects.requireNonNull(org.postgresql.Driver.class);
                this.connectionSource = new JdbcPooledConnectionSource("jdbc:postgresql://" + dbConfig.HOSTNAME + "/" + dbConfig.DATABASE + dbConfig.CONNECTION_PARAMETERS, dbConfig.USER, dbConfig.PASSWORD);
                break;
            }
        default:
            {
                this.getLogger().error("WRONG DATABASE TYPE.");
                this.server.shutdown();
                return;
            }
    }
    TableUtils.createTableIfNotExists(this.connectionSource, RegisteredPlayer.class);
    this.playerDao = DaoManager.createDao(this.connectionSource, RegisteredPlayer.class);
    this.nicknameValidationPattern = Pattern.compile(Settings.IMP.MAIN.ALLOWED_NICKNAME_REGEX);
    this.migrateDb(this.playerDao);
    CommandManager manager = this.server.getCommandManager();
    manager.unregister("unregister");
    manager.unregister("premium");
    manager.unregister("forceunregister");
    manager.unregister("changepassword");
    manager.unregister("forcechangepassword");
    manager.unregister("destroysession");
    manager.unregister("2fa");
    manager.unregister("limboauth");
    manager.register("unregister", new UnregisterCommand(this, this.playerDao), "unreg");
    manager.register("premium", new PremiumCommand(this, this.playerDao));
    manager.register("forceunregister", new ForceUnregisterCommand(this, this.server, this.playerDao), "forceunreg");
    manager.register("changepassword", new ChangePasswordCommand(this.playerDao), "changepass");
    manager.register("forcechangepassword", new ForceChangePasswordCommand(this.server, this.playerDao), "forcechangepass");
    manager.register("destroysession", new DestroySessionCommand(this));
    if (Settings.IMP.MAIN.ENABLE_TOTP) {
        manager.register("2fa", new TotpCommand(this.playerDao), "totp");
    }
    manager.register("limboauth", new LimboAuthCommand(this), "la", "auth", "lauth");
    Settings.MAIN.AUTH_COORDS authCoords = Settings.IMP.MAIN.AUTH_COORDS;
    VirtualWorld authWorld = this.factory.createVirtualWorld(Dimension.valueOf(Settings.IMP.MAIN.DIMENSION), authCoords.X, authCoords.Y, authCoords.Z, (float) authCoords.YAW, (float) authCoords.PITCH);
    if (Settings.IMP.MAIN.LOAD_WORLD) {
        try {
            Path path = this.dataDirectory.resolve(Settings.IMP.MAIN.WORLD_FILE_PATH);
            WorldFile file;
            switch(Settings.IMP.MAIN.WORLD_FILE_TYPE) {
                case "schematic":
                    {
                        file = new SchematicFile(path);
                        break;
                    }
                default:
                    {
                        this.getLogger().error("Incorrect world file type.");
                        this.server.shutdown();
                        return;
                    }
            }
            Settings.MAIN.WORLD_COORDS coords = Settings.IMP.MAIN.WORLD_COORDS;
            file.toWorld(this.factory, authWorld, coords.X, coords.Y, coords.Z);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    this.authServer = this.factory.createLimbo(authWorld).setName("LimboAuth").registerCommand(new AuthCommandMeta(this, this.filterCommands(Settings.IMP.MAIN.REGISTER_COMMAND)), new AuthCommand()).registerCommand(new AuthCommandMeta(this, this.filterCommands(Settings.IMP.MAIN.LOGIN_COMMAND)), new AuthCommand()).registerCommand(new AuthCommandMeta(this, this.filterCommands(Settings.IMP.MAIN.TOTP_COMMAND)), new AuthCommand());
    this.server.getEventManager().unregisterListeners(this);
    this.server.getEventManager().register(this, new AuthListener(this, this.playerDao, this.floodgateApi));
    Executors.newScheduledThreadPool(1, task -> new Thread(task, "purge-cache")).scheduleAtFixedRate(() -> this.checkCache(this.cachedAuthChecks, Settings.IMP.MAIN.PURGE_CACHE_MILLIS), Settings.IMP.MAIN.PURGE_CACHE_MILLIS, Settings.IMP.MAIN.PURGE_CACHE_MILLIS, TimeUnit.MILLISECONDS);
    this.server.getEventManager().fireAndForget(new AuthPluginReloadEvent());
}
Also used : WorldFile(net.elytrium.limboapi.api.file.WorldFile) DestroySessionCommand(net.elytrium.limboauth.command.DestroySessionCommand) SimpleCommand(com.velocitypowered.api.command.SimpleCommand) Inject(com.google.inject.Inject) JdbcPooledConnectionSource(com.j256.ormlite.jdbc.JdbcPooledConnectionSource) PreEvent(net.elytrium.limboauth.event.PreEvent) TaskEvent(net.elytrium.limboauth.event.TaskEvent) SimplePie(org.bstats.charts.SimplePie) Dependency(com.velocitypowered.api.plugin.Dependency) FloodgateApiHolder(net.elytrium.limboauth.floodgate.FloodgateApiHolder) InetAddress(java.net.InetAddress) LimboAuthCommand(net.elytrium.limboauth.command.LimboAuthCommand) UpdatesChecker(net.elytrium.limboauth.utils.UpdatesChecker) FieldType(com.j256.ormlite.field.FieldType) Locale(java.util.Locale) Player(com.velocitypowered.api.proxy.Player) Map(java.util.Map) Limbo(net.elytrium.limboapi.api.Limbo) ProxyInitializeEvent(com.velocitypowered.api.event.proxy.ProxyInitializeEvent) TableUtils(com.j256.ormlite.table.TableUtils) PluginContainer(com.velocitypowered.api.plugin.PluginContainer) DaoManager(com.j256.ormlite.dao.DaoManager) URI(java.net.URI) Path(java.nio.file.Path) HttpResponse(java.net.http.HttpResponse) CommandMeta(com.velocitypowered.api.command.CommandMeta) Plugin(com.velocitypowered.api.plugin.Plugin) AuthListener(net.elytrium.limboauth.listener.AuthListener) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) UUID(java.util.UUID) Dao(com.j256.ormlite.dao.Dao) PremiumCommand(net.elytrium.limboauth.command.PremiumCommand) SingleLineChart(org.bstats.charts.SingleLineChart) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) Executors(java.util.concurrent.Executors) Objects(java.util.Objects) PreAuthorizationEvent(net.elytrium.limboauth.event.PreAuthorizationEvent) List(java.util.List) LimboFactory(net.elytrium.limboapi.api.LimboFactory) QueryBuilder(com.j256.ormlite.stmt.QueryBuilder) Subscribe(com.velocitypowered.api.event.Subscribe) ForceChangePasswordCommand(net.elytrium.limboauth.command.ForceChangePasswordCommand) RegisteredPlayer(net.elytrium.limboauth.model.RegisteredPlayer) Pattern(java.util.regex.Pattern) AuthSessionHandler(net.elytrium.limboauth.handler.AuthSessionHandler) HttpRequest(java.net.http.HttpRequest) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) SchematicFile(net.elytrium.limboapi.api.file.SchematicFile) AuthPluginReloadEvent(net.elytrium.limboauth.event.AuthPluginReloadEvent) SQLException(java.sql.SQLException) Title(net.kyori.adventure.title.Title) Metrics(org.bstats.velocity.Metrics) ProxyServer(com.velocitypowered.api.proxy.ProxyServer) HttpClient(java.net.http.HttpClient) LegacyComponentSerializer(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer) Nullable(org.checkerframework.checker.nullness.qual.Nullable) Logger(org.slf4j.Logger) Files(java.nio.file.Files) Dimension(net.elytrium.limboapi.api.chunk.Dimension) VirtualWorld(net.elytrium.limboapi.api.chunk.VirtualWorld) IOException(java.io.IOException) UnregisterCommand(net.elytrium.limboauth.command.UnregisterCommand) File(java.io.File) DataDirectory(com.velocitypowered.api.plugin.annotation.DataDirectory) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) PreRegisterEvent(net.elytrium.limboauth.event.PreRegisterEvent) URLEncoder(java.net.URLEncoder) CommandManager(com.velocitypowered.api.command.CommandManager) Paths(java.nio.file.Paths) TotpCommand(net.elytrium.limboauth.command.TotpCommand) ChangePasswordCommand(net.elytrium.limboauth.command.ChangePasswordCommand) CommandNode(com.mojang.brigadier.tree.CommandNode) CommandSource(com.velocitypowered.api.command.CommandSource) ForceUnregisterCommand(net.elytrium.limboauth.command.ForceUnregisterCommand) Collections(java.util.Collections) VirtualWorld(net.elytrium.limboapi.api.chunk.VirtualWorld) DestroySessionCommand(net.elytrium.limboauth.command.DestroySessionCommand) UnregisterCommand(net.elytrium.limboauth.command.UnregisterCommand) ForceUnregisterCommand(net.elytrium.limboauth.command.ForceUnregisterCommand) ForceUnregisterCommand(net.elytrium.limboauth.command.ForceUnregisterCommand) SchematicFile(net.elytrium.limboapi.api.file.SchematicFile) AuthListener(net.elytrium.limboauth.listener.AuthListener) CommandManager(com.velocitypowered.api.command.CommandManager) PremiumCommand(net.elytrium.limboauth.command.PremiumCommand) WorldFile(net.elytrium.limboapi.api.file.WorldFile) LimboAuthCommand(net.elytrium.limboauth.command.LimboAuthCommand) Path(java.nio.file.Path) LimboAuthCommand(net.elytrium.limboauth.command.LimboAuthCommand) ForceChangePasswordCommand(net.elytrium.limboauth.command.ForceChangePasswordCommand) ChangePasswordCommand(net.elytrium.limboauth.command.ChangePasswordCommand) IOException(java.io.IOException) RegisteredPlayer(net.elytrium.limboauth.model.RegisteredPlayer) TotpCommand(net.elytrium.limboauth.command.TotpCommand) ForceChangePasswordCommand(net.elytrium.limboauth.command.ForceChangePasswordCommand) JdbcPooledConnectionSource(com.j256.ormlite.jdbc.JdbcPooledConnectionSource) WorldFile(net.elytrium.limboapi.api.file.WorldFile) SchematicFile(net.elytrium.limboapi.api.file.SchematicFile) File(java.io.File) AuthPluginReloadEvent(net.elytrium.limboauth.event.AuthPluginReloadEvent)

Aggregations

Inject (com.google.inject.Inject)2 CommandSource (com.velocitypowered.api.command.CommandSource)2 SimpleCommand (com.velocitypowered.api.command.SimpleCommand)2 Subscribe (com.velocitypowered.api.event.Subscribe)2 ProxyInitializeEvent (com.velocitypowered.api.event.proxy.ProxyInitializeEvent)2 Plugin (com.velocitypowered.api.plugin.Plugin)2 DataDirectory (com.velocitypowered.api.plugin.annotation.DataDirectory)2 ProxyServer (com.velocitypowered.api.proxy.ProxyServer)2 Path (java.nio.file.Path)2 Dao (com.j256.ormlite.dao.Dao)1 DaoManager (com.j256.ormlite.dao.DaoManager)1 FieldType (com.j256.ormlite.field.FieldType)1 JdbcPooledConnectionSource (com.j256.ormlite.jdbc.JdbcPooledConnectionSource)1 QueryBuilder (com.j256.ormlite.stmt.QueryBuilder)1 TableUtils (com.j256.ormlite.table.TableUtils)1 CommandNode (com.mojang.brigadier.tree.CommandNode)1 CommandManager (com.velocitypowered.api.command.CommandManager)1 CommandMeta (com.velocitypowered.api.command.CommandMeta)1 Dependency (com.velocitypowered.api.plugin.Dependency)1 PluginContainer (com.velocitypowered.api.plugin.PluginContainer)1