Flectone LogoFlectonePulse

Справочник компонентов

Все сервисы, реестры, адаптеры, планировщик и утилиты FlectonePulse API и то, где они лежат

Любой компонент берётся через инжектор, создавать реализации руками нельзя

FlectonePulse flectonePulse = FlectonePulseAPI.getInstance();

FPlayerService fPlayerService = flectonePulse.get(FPlayerService.class);

Все компоненты живут в одном экземпляре, поэтому повторный get() отдаст тот же самый объект


Карта пакетов

ПакетЧто внутри
net.flectone.pulseFlectonePulse и FlectonePulseAPI
net.flectone.pulse.annotationАннотация @Pulse
net.flectone.pulse.listenerИнтерфейс PulseListener
net.flectone.pulse.dispatcherEventDispatcher и MessageDispatcher
net.flectone.pulse.model.eventВсе события и EventMetadata
net.flectone.pulse.model.entityFEntity и FPlayer
net.flectone.pulse.model.valueRange, Destination, Sound, Moderation, Cooldown, FColor и другие значения
net.flectone.pulse.constantModuleName, MessageFlag, SettingText, HookType, PlatformType
net.flectone.pulse.serviceСервисы данных
net.flectone.pulse.platform.registryРеестры слушателей, команд, прав, кэшей и прокси
net.flectone.pulse.platform.controllerУправление модулями и командами
net.flectone.pulse.platform.senderГотовые отправители и проверки
net.flectone.pulse.platform.adapterДоступ к платформе
net.flectone.pulse.platform.formatterФорматирование времени, ссылок и наказаний
net.flectone.pulse.pipelineMessagePipeline
net.flectone.pulse.checkerТочечные проверки
net.flectone.pulse.schedulerTaskScheduler
net.flectone.pulse.moduleИнтерфейсы модулей
net.flectone.pulse.fileFileFacade
net.flectone.pulse.loggingFLogger
net.flectone.pulse.exceptionИсключения

Сервисы

Пакет net.flectone.pulse.service
СервисЗачем нужен
FPlayerServiceПоиск, кэш и сохранение игроков, описан на странице игроков
SocialServiceНастройки чата, цвета, игнор, почта и невидимость
ModerationServiceБаны, муты, варны, кики, вайтлист и нарушения
PlaytimeServiceНаигранное время и AFK сессии
SkinServiceСкины, аватары и изображения тела
TranslationServiceЗагрузка переводов платформы
MetricsServiceСбор и отправка статистики

ModerationService

Одна точка для всей работы с наказаниями

import net.flectone.pulse.model.value.Moderation;
import net.flectone.pulse.service.ModerationService;

ModerationService moderationService = flectonePulse.get(ModerationService.class);

// выдать мут на час
moderationService.mute(fPlayer, System.currentTimeMillis() + 3_600_000L, "Спам", moderatorId);

// проверить активный бан
boolean banned = moderationService.hasValid(fPlayer, Moderation.Type.BAN);

// получить активное наказание
Optional<Moderation> mute = moderationService.getValid(fPlayer, Moderation.Type.MUTE);
Группа методовПримеры
Выдачаban, mute, warn, kick, maintenance, whitelist, add
ПроверкаhasValid, getValid, getValidNames, getTotalValidCount
Снятиеremove
НарушенияaddViolation, isViolationRestricted, getFirstViolationTimestamp
ОграниченияisAllowedTime, hasHigherGroupThan
Кэшinvalidate

Типы наказаний в Moderation.Type это BAN, MUTE, WARN, KICK, WHITELIST, MAINTENANCE и парные им снятия UNBAN, UNMUTE, UNWARN, UNWHITELIST, UNMAINTENANCE


Реестры

Пакет net.flectone.pulse.platform.registry
РеестрЗачем нужен
ListenerRegistryРегистрирует слушателей, описан на странице событий
CommandRegistryРегистрирует команды, описан на странице модулей
PermissionRegistryРегистрирует права в платформе
ProxyRegistryДержит транспорты сети, описан на странице прокси
CacheRegistryДержит внутренние кэши проекта

Контроллеры

Пакет net.flectone.pulse.platform.controller
КонтроллерЗачем нужен
ModuleControllerВключает, выключает и проверяет модули
ModuleCommandControllerРегистрирует команды модулей и переводимые имена аргументов

Отправители

Пакет net.flectone.pulse.platform.sender
КомпонентЗачем нужен
MessageSenderОтправляет готовый компонент игроку или в консоль
ProxySenderОтправляет данные на другие серверы
SoundPlayerПроигрывает звук с проверкой права
CooldownSenderПроверяет кулдаун и пишет игроку
MuteSenderПроверяет мут и пишет игроку
DisableSenderПроверяет выключенный модуль и пишет игроку
IgnoreSenderПроверяет игнор и пишет игроку
ModerationListSenderВыводит списки наказаний
MetricsSenderОтправляет статистику

Проверки

Пакет net.flectone.pulse.checker
КомпонентМетодЧто проверяет
PermissionCheckercheck(FEntity, String)Есть ли право у сущности
CooldownCheckercheck(UUID, Cooldown, String)Истёк ли кулдаун
MuteCheckercheck(FPlayer)Заглушён ли игрок
ValidNameCheckercheck(String)Правильный ли ник

Адаптеры платформы

Пакет net.flectone.pulse.platform.adapter

Дают одинаковый доступ к данным сервера и игроков на всех платформах

PlatformPlayerAdapter

МетодЧто отдаёт
getName(UUID)Ник игрока
getPing(FPlayer)Задержку
getWorldName(UUID)Название мира
getWorldEnvironment(UUID)Тип мира
getLocale(UUID)Язык клиента
getIp(UUID)Адрес подключения
getGamemode(UUID)Игровой режим
getCoordinates(UUID)Координаты
distance(UUID, UUID)Расстояние между игроками
getStatistics(UUID)Статистику игрока
getPlayedTime(FPlayer)Наигранное время
getOnlinePlayers()Всех игроков онлайн
findPlayersWhoCanSee(UUID, double, double, double)Тех, кто видит точку
convertToPlatformPlayer(UUID)Платформенный объект игрока
kick(FPlayer, Component)Отключает игрока

Ещё есть проверки состояния, isOnline, isDead, isSneaking, isOperator, hasPlayedBefore и hasPotionEffect

PlatformServerAdapter

МетодЧто отдаёт
getPlatformType()Текущую платформу
getServerCore()Ядро сервера
getServerVersionName()Версию сервера
getTPS(FEntity)Текущий TPS
getMaxPlayers()Лимит игроков
getOnlinePlayerCount()Количество игроков онлайн
isOnlineMode()Включена ли лицензионная проверка
isPrimaryThread()Идёт ли код в основном потоке
hasProject(String)Стоит ли указанный плагин или мод
dispatchCommand(String)Выполняет команду от имени консоли
getMOTD()Данные для status ответа
getIcon()Иконку сервера
getItemName(Object)Имя предмета
import net.flectone.pulse.platform.adapter.PlatformServerAdapter;

PlatformServerAdapter serverAdapter = flectonePulse.get(PlatformServerAdapter.class);

if (serverAdapter.hasProject("LuckPerms")) {
    // LuckPerms стоит на сервере
}

Форматировщики

Пакет net.flectone.pulse.platform.formatter
КомпонентЗачем нужен
TimeFormatterФорматирует длительность и дату на языке игрока
UrlFormatterЭкранирует и преобразует ссылки
ModerationMessageFormatterСобирает тексты сообщений о наказаниях
IntegrationFormatterФорматирует текст для Discord, Telegram и Twitch
import net.flectone.pulse.platform.formatter.TimeFormatter;

TimeFormatter timeFormatter = flectonePulse.get(TimeFormatter.class);

String duration = timeFormatter.format(fPlayer, 3_600_000L);
String date = timeFormatter.formatDate(System.currentTimeMillis());

Планировщик

Пакет net.flectone.pulse.scheduler

TaskScheduler работает одинаково на всех платформах, включая Folia. Время задаётся в тиках

import net.flectone.pulse.scheduler.TaskScheduler;

TaskScheduler taskScheduler = flectonePulse.get(TaskScheduler.class);

// асинхронно прямо сейчас
taskScheduler.runAsync(() -> loadDataFromDatabase());

// асинхронно через 5 секунд
taskScheduler.runAsyncLater(() -> sendDelayedMessage(), 100L);

// каждые 30 секунд
taskScheduler.runAsyncTimer(() -> updateStatistics(), 600L);
МетодЧто делает
runAsync(SchedulerRunnable)Выполняет задачу асинхронно
runAsync(SchedulerRunnable, boolean independent)То же самое, но со значением false выполнит сразу, если поток уже асинхронный
runAsyncLater(SchedulerRunnable, long delay)Выполняет асинхронно с задержкой, по умолчанию 20 тиков
runAsyncTimer(SchedulerRunnable, long period)Выполняет асинхронно по расписанию
runSync(SchedulerRunnable)Выполняет задачу синхронно
runSyncLater(SchedulerRunnable, long delay)Выполняет синхронно с задержкой
getExecutorService()Отдаёт пул потоков планировщика

Все методы отдают CompletableFuture<Void>. У повторяющихся задач он никогда не завершается сам, поэтому отменяй его, когда задача больше не нужна

Внимание

Не блокируй основной поток. Любые обращения к базе и сетевые запросы делай через runAsync, потому что обработчики событий вызываются синхронно относительно конвейера сообщений


Конфигурация

Пакет net.flectone.pulse.file

FileFacade даёт доступ ко всем файлам настроек

import net.flectone.pulse.file.FileFacade;

FileFacade fileFacade = flectonePulse.get(FileFacade.class);

// config.yml
var config = fileFacade.config();
// message.yml
var message = fileFacade.message();
// command.yml
var command = fileFacade.command();
// integration.yml
var integration = fileFacade.integration();
// permission.yml
var permission = fileFacade.permission();
// localizations/ru_ru.yml
var localization = fileFacade.localization("ru_ru");
МетодЧто отдаёт
config(), message(), command(), integration(), permission()Секции своих файлов
localization()Локализацию по умолчанию
localization(String locale)Локализацию конкретного языка
localizations()Все загруженные локализации
saveFiles(), updateFiles()Сохраняют и обновляют файлы
Предупреждение

Считай конфигурацию доступной только для чтения. Менять настройки FlectonePulse из своего плагина не рекомендуется


Логирование

Пакет net.flectone.pulse.logging

FLogger умеет писать цветной текст в консоль

import net.flectone.pulse.logging.FLogger;

FLogger fLogger = flectonePulse.get(FLogger.class);

fLogger.info("Сообщение");
fLogger.warning("Предупреждение");

if (FLogger.DEBUG_ENABLED) {
    // debug режим включён через -Dflectonepulse.debug=true
}

Утилиты

КомпонентЗачем нужен
net.flectone.pulse.util.payload.ProxyPayloadЧитает данные прокси сообщения
net.flectone.pulse.util.random.RandomGeneratorГенерирует случайные значения
net.flectone.pulse.util.WebUtilДелает HTTP запросы
net.flectone.pulse.decorator.ComponentDecoratorБезопасно добавляет подсказки и декорации к компонентам
net.flectone.pulse.resolver.ReflectionResolverРаботает с платформенными классами через рефлексию
net.flectone.pulse.resolver.SystemVariableResolverЧитает переменные окружения и системные свойства
net.flectone.pulse.resolver.ProfileResolverДостаёт профили игроков Mojang
net.flectone.pulse.resolver.LibraryResolverСкачивает внешние библиотеки
Примечание

В артефакт входят только интерфейсы, их реализации закрыты и отличаются на разных платформах. Javadoc публикуется вместе с артефактом, поэтому описание любого метода видно прямо в IDE

Последнее изменение 11 августа 2026 г.
Редактировать на GitHub

На этой странице