Skip to content

g4vrk/FunctionalLib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FunctionalLib

JitPack version Supported versions Platform Java

FunctionalLib

Лёгкая и удобная утилитная библиотека для создания современных плагинов под Paper / Spigot

УстановкаВозможностиПримерыЛицензия

Установка

Maven (JitPack)

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.github.g4vrk</groupId>
        <artifactId>FunctionalLib</artifactId>
        <version>ПОСЛЕДНЯЯ_ВЕРСИЯ</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

plugin.yml:

depend: [FunctionalLib]

Основные возможности

  • 🎨 Гибкое форматирование текста (TextFormatter) — MiniMessage / Legacy / Mixed
  • 📋 Красивые цветные логи с поддержкой Adventure Component (PluginLogger)
  • 🛍 Мощный билдер предметов + загрузка из конфига (ItemBuilder)
  • 🗄 Простое подключение к MySQL / SQLite с пулом соединений
  • ⚙ Удобное управление несколькими yaml-конфигами (YamlConfigManager)
  • 🎬 Система действий из конфига (ActionExecutor) — message, title, sound, console, actionbar и др.
  • 🖥 Умные команды с субкомандами, требованиями, асинхронностью (SmartCommand)

Примеры

Форматировка текста:

public class Example {

    private TextFormatter textFormatter = TextFormatter.builder()
            .cache(true) // кешировать ли строки или нет?
            .type(TextFormatType.MIXED) //Форматы: MIXED, MINI_MESSAGE, LEGACY
            .build();

    public void example(String text) {

        // форматирует по выбранному формату, возвращает Component
        textFormatter.format(text); 

        // форматирует по выбранному формату + переводит в String с форматами legacy
        textFormatter.legacy(text); 

        // полностью убирает все форматирование текста
        textFormatter.plain(text); 
    }
}

Логирование:

public class Example {

    // поддерживает цветное логирование с помощью Component 
    private PluginLogger logger = PluginLoggerFactory.getLogger("<название>");

    public void example() {
        
        // пример логирования с цветами
        logger.info(Component.text("Логирование зеленым!").color(NamedTextColor.GREEN));

        // пример логирования обычной строки, есть поддержка {} как у slf4j Logger 
        logger.info("пример обычного сообщения");
    }
}

Билдер предметов:

public class Example {

    public void example() {
        // ItemBuilder.fromConfiguration(ConfigurationSection);
        // возвращает предмет сделанный по отправленной секции
        
        // простой пример 
        // Действий есть на много больше, я использовал их для примера
        new ItemBuilder("DIRT")
                .customModelData(1)
                .allFlags(true)
                .glow(true)
                .hideEnchantments(true)
                .name("предмет")
                .lore(List.of("описание предмета"))
                .itemStack();
    }

}

Получение соединений с базами данных:

public class Example {

    public void example() {
        // создание конфигурации базы данных, используя ваши секции
        DatabaseConfig config = DatabaseConfigLoader.load(yourConfigurationSection, yourSqliteFile);

        // создание фабрики подключений
        DatabaseConnectionFactory connectionFactory = switch (DatabaseType.valueOf(youDatabaseType)) {
            case MYSQL -> new MySQLConnectionFactory(config);
            case SQLITE -> new SQLiteConnectionFactory(config);
        };

        // создание сервиса для подключения в выбранную базу данных
        DatabaseService databaseService = new DatabaseService(connectionFactory);

        try (Connection connection = databaseService.connect("yourPoolName")) {
            // ваша логика с подключением!
        } catch (SQLException ignored) {
            // по хорошему нужно логировать любые ошибки
        }
    }
}

Работа с конфигурациями:

public class YourPlugin extends JavaPlugin {

    private YamlConfigManager configManager;

    public void example() {
        // в конструктор нужно передать JavaPlugin
        configManager = new YamlConfigManager(this);

        // получение конфига по имени
        Configuration config = configManager.getConfig("main-config.yml");

        // перезагрузка конфига по имени
        configManager.reload("main-config.yml");

        // перезагрузка всех конфигураций
        configManager.reloadAll();
    }
}

Работа с Actions:

public class YourPlugin extends JavaPlugin {

    private ActionExecutor actionExecutor;

    public void example() {
        actionExecutor = new ActionExecutor();

        // регистрация действий
        actionExecutor.registerAction(new Action() {
            @Override
            public void execute(ActionContext context, String args) {
                context.player().sendMessage("пример действия");
            }

            @Override
            public String getActionKey() {
                return "example";
            }
        });

        actionExecutor.runActions(yourPlayer, List.of("[message] тест", "[actionbar] проверка"));

        // стандартные действия:
        // [actionbar] сообщение
        // [message] сообщение
        // [close-menu]
        // [update-inventory]
        // [console] команда
        // [title] верхний_текст;нижний_текст(необязателен)
        // [sound] айди;громкость;высота
    }
}

Регистрация комманд:

public class Example {
    public void example() {
        // Билдер SmartCommand
        SmartCommand smartAbstractCommand = SmartCommand.builder()
                .name()
                // Требования, можете создавать свои
                .requirement(new CommandRequirement() {
                    @Override
                    public boolean test(CommandSender sender, String[] args) {
                        return sender.hasPermission("example.perm");
                    }

                    @Override
                    public void onFail(CommandSender sender, String[] args) {
                        sender.sendMessage("ты ахуел");
                    }
                })
                // алиасы
                .alias("example")
                // выполнять ли асинхронно
                .runAsync(false)
                // субкомманды
                .argument(new SubCommand() {
                    @Override
                    public String getName() {
                        return "reload";
                    }

                    @Override
                    public List<String> getAliases() {
                        return List.of("reboot");
                    }

                    @Override
                    public Collection<CommandRequirement> getRequirements() {
                        return List.of(new CommandRequirement() {
                            @Override
                            public boolean test(CommandSender sender, String[] args) {
                                return sender.hasPermission("reload");
                            }

                            @Override
                            public void onFail(CommandSender sender, String[] args) {
                                sender.sendMessage("no perms");
                            }
                        });
                    }

                    @Override
                    public void execute(CommandSender sender, String[] args) {
                        reloadLogic();
                    }

                    @Override
                    public List<String> tabComplete(CommandSender sender, String[] args) {
                        return List.of();
                    }
                });
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages