Skip to content
This repository was archived by the owner on Jul 4, 2026. It is now read-only.

Repository files navigation

FunctionalLib

JitPack versionSupported versionsPlatformJava

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)

Примеры

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

publicclassExample {
privateTextFormattertextFormatter = TextFormatter.builder()
.cache(true) // кешировать ли строки или нет?
.type(TextFormatType.MIXED) //Форматы: MIXED, MINI_MESSAGE, LEGACY
.build();
publicvoidexample(Stringtext) {
// форматирует по выбранному формату, возвращает ComponenttextFormatter.format(text); // форматирует по выбранному формату + переводит в String с форматами legacytextFormatter.legacy(text); // полностью убирает все форматирование текстаtextFormatter.plain(text); }
}

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

publicclassExample {
// поддерживает цветное логирование с помощью Component privatePluginLoggerlogger = PluginLoggerFactory.getLogger("<название>");
publicvoidexample() {
// пример логирования с цветамиlogger.info(Component.text("Логирование зеленым!").color(NamedTextColor.GREEN));
// пример логирования обычной строки, есть поддержка {} как у slf4j Logger logger.info("пример обычного сообщения");
}
}

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

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

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

publicclassExample {
publicvoidexample() {
// создание конфигурации базы данных, используя ваши секцииDatabaseConfigconfig = DatabaseConfigLoader.load(yourConfigurationSection, yourSqliteFile);
// создание фабрики подключенийDatabaseConnectionFactoryconnectionFactory = switch (DatabaseType.valueOf(youDatabaseType)) {
caseMYSQL -> newMySQLConnectionFactory(config);
caseSQLITE -> newSQLiteConnectionFactory(config);
};
// создание сервиса для подключения в выбранную базу данныхDatabaseServicedatabaseService = newDatabaseService(connectionFactory);
try (Connectionconnection = databaseService.connect("yourPoolName")) {
// ваша логика с подключением!
} catch (SQLExceptionignored) {
// по хорошему нужно логировать любые ошибки
}
}
}

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

publicclassYourPluginextendsJavaPlugin {
privateYamlConfigManagerconfigManager;
publicvoidexample() {
// в конструктор нужно передать JavaPluginconfigManager = newYamlConfigManager(this);
// получение конфига по имениConfigurationconfig = configManager.getConfig("main-config.yml");
// перезагрузка конфига по имениconfigManager.reload("main-config.yml");
// перезагрузка всех конфигурацийconfigManager.reloadAll();
}
}

Работа с Actions:

publicclassYourPluginextendsJavaPlugin {
privateActionExecutoractionExecutor;
publicvoidexample() {
actionExecutor = newActionExecutor();
// регистрация действийactionExecutor.registerAction(newAction() {
@Overridepublicvoidexecute(ActionContextcontext, Stringargs) {
context.player().sendMessage("пример действия");
}
@OverridepublicStringgetActionKey() {
return"example";
}
});
actionExecutor.runActions(yourPlayer, List.of("[message] тест", "[actionbar] проверка"));
// стандартные действия:// [actionbar] сообщение// [message] сообщение// [close-menu]// [update-inventory]// [console] команда// [title] верхний_текст;нижний_текст(необязателен)// [sound] айди;громкость;высота
}
}

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

publicclassExample {
publicvoidexample() {
// Билдер SmartCommandSmartCommandsmartAbstractCommand = SmartCommand.builder()
.name()
// Требования, можете создавать свои
.requirement(newCommandRequirement() {
@Overridepublicbooleantest(CommandSendersender, String[] args) {
returnsender.hasPermission("example.perm");
}
@OverridepublicvoidonFail(CommandSendersender, String[] args) {
sender.sendMessage("ты ахуел");
}
})
// алиасы
.alias("example")
// выполнять ли асинхронно
.runAsync(false)
// субкомманды
.argument(newSubCommand() {
@OverridepublicStringgetName() {
return"reload";
}
@OverridepublicList<String> getAliases() {
returnList.of("reboot");
}
@OverridepublicCollection<CommandRequirement> getRequirements() {
returnList.of(newCommandRequirement() {
@Overridepublicbooleantest(CommandSendersender, String[] args) {
returnsender.hasPermission("reload");
}
@OverridepublicvoidonFail(CommandSendersender, String[] args) {
sender.sendMessage("no perms");
}
});
}
@Overridepublicvoidexecute(CommandSendersender, String[] args) {
reloadLogic();
}
@OverridepublicList<String> tabComplete(CommandSendersender, String[] args) {
returnList.of();
}
});
}
}

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages