Flectone LogoFlectonePulse

Игроки

Модели FEntity и FPlayer, сервис FPlayerService для поиска игроков и SocialService для настроек чата, игнора и почты

FlectonePulse не работает с платформенными объектами напрямую. Вместо org.bukkit.entity.Player он использует свою модель, одинаковую на всех платформах

МодельЧто описывает
FEntityЛюбого отправителя сообщения, будь то игрок, моб, командный блок, консоль или пользователь Discord
FPlayerИгрока или консоль, расширяет FEntity данными из базы

FEntity

Пакет net.flectone.pulse.model.entity
МетодВозвращаетЧто отдаёт
name()StringОтображаемое имя
uuid()UUIDИдентификатор
type()StringТип сущности
showEntityName()ComponentИмя для всплывающей подсказки, может быть null
isUnknown()booleanПризнак заглушки

Ещё есть константы FEntity.UNKNOWN_UUID, FEntity.UNKNOWN_NAME, FEntity.UNKNOWN_TYPE и фабрика FEntity.unknown()


FPlayer

МетодВозвращаетЧто отдаёт
id()IntegerИдентификатор в базе данных
isConsole()booleanПризнак консоли
isIntegration()booleanПризнак отправителя из Discord, Telegram или Twitch
isOnline()booleanНаходится ли игрок на сервере прямо сейчас
ip()StringАдрес подключения, может быть null
constants()List<Component>Заранее посчитанные части имени, которые едут между серверами

Полезные константы

КонстантаЗначение
FPlayer.UNKNOWNЗаглушка, когда настоящий игрок неизвестен
FPlayer.UNKNOWN_IDInteger.MIN_VALUE
FPlayer.CONSOLE_ID-1
FPlayer.PLAYER_TYPEPLAYER
FPlayer.CONSOLE_TYPECONSOLE
FPlayer.INTEGRATION_TYPEINTEGRATION
Информация

Заглушка FPlayer.UNKNOWN нужна, когда получатель ещё не известен. Например так берут локализацию по умолчанию, module.localization(FPlayer.UNKNOWN)

Неизменяемость

FPlayer тоже неизменяем. Методы withName(), withUuid(), withOnline(), withId(), withIp() и withConstants() отдают копию, а toBuilder() открывает заполненный билдер

FPlayer renamed = fPlayer.withName("NewName");
Предупреждение

Изменённая копия живёт только в твоей переменной. Чтобы она попала в кэш FlectonePulse, передай её в fPlayerService.updateCache(fPlayer)


FPlayerService

Пакет net.flectone.pulse.service
import net.flectone.pulse.service.FPlayerService;

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

Поиск игрока

МетодЧто ищет
getFPlayer(UUID)По идентификатору аккаунта
getFPlayer(String name)По нику
getFPlayer(int id)По идентификатору в базе
getFPlayer(InetAddress)По адресу подключения
getFPlayer(FEntity)Превращает сущность в игрока
getFPlayer(Object platformPlayer)Из платформенного объекта, например Player в Bukkit
getConsole()Отдаёт консоль как FPlayer
getRandomFPlayer()Отдаёт случайного игрока
Player bukkitPlayer = Bukkit.getPlayer("TheFaser");

// Bukkit
FPlayer fPlayer = fPlayerService.getFPlayer(bukkitPlayer);

// или через UUID
FPlayer byUuid = fPlayerService.getFPlayer(bukkitPlayer.getUniqueId());
Внимание

Если игрок не нашёлся, вернётся FPlayer.UNKNOWN. Проверяй результат через fPlayer.isUnknown(), прежде чем что то с ним делать

Списки игроков

МетодЧто отдаёт
getOnlineFPlayers()Всех игроков онлайн
getPlatformFPlayers()Игроков, которых видит платформа
getFPlayersWithConsole()Игроков онлайн вместе с консолью
findAllFPlayers()Всех игроков из базы данных
getFPlayersByIp(String ip, int limit, int offset)Игроков с одного адреса постранично
getTotalFPlayersCountByIp(String ip)Количество игроков с одного адреса

Кэш и сохранение

МетодЧто делает
saveOrUpdate(UUID, String name, String ip, boolean online)Создаёт или обновляет игрока в базе
addCache(FPlayer)Кладёт игрока в кэш онлайна
updateCache(FPlayer)Обновляет игрока в кэше
clearAndSave(FPlayer)Помечает игрока офлайн и сохраняет в базу
invalidate(UUID)Сбрасывает кэш одного игрока
invalidateCache()Чистит весь кэш
loadOnlineCache()Загружает игроков онлайн из базы
Предупреждение

Полный сброс кэша заставит перечитать данные всех игроков из базы. В обычном коде хватает invalidate(uuid) для одного игрока


SocialService

Хранит настройки чата, цвета, игнор, почту и режим невидимости

import net.flectone.pulse.constant.SettingText;
import net.flectone.pulse.service.SocialService;

SocialService socialService = flectonePulse.get(SocialService.class);

// язык игрока
String locale = socialService.getSetting(fPlayer, SettingText.LOCALE);

Настройки

МетодЧто делает
getSetting(FPlayer, SettingText)Отдаёт текстовую настройку игрока
getSetting(FPlayer, ModuleName)Отдаёт настройку, привязанную к модулю
isSetting(FPlayer, ModuleName)Проверяет, включена ли настройка модуля
saveSetting(FPlayer, SettingText, String)Сохраняет текстовую настройку
saveSetting(FPlayer, String, boolean)Сохраняет переключатель
loadSettings(FPlayer)Загружает все настройки игрока
updateLocale(FPlayer, String)Меняет язык игрока

Доступные значения SettingText

КонстантаЧто хранит
LOCALEВыбранный язык
CHAT_NAMEАктивный чат
NICKNAMEУстановленный никнейм
WORLD_PREFIXПрефикс мира
STREAM_PREFIXПрефикс стримера
SERVERСервер в сети прокси
SPY_STATUSСостояние режима слежки
VANISH_STATUSСостояние невидимости
AFK_SUFFIXСуффикс AFK

Цвета, игнор и почта

МетодЧто делает
loadColors(FPlayer)Отдаёт личные цвета игрока
saveColors(FPlayer, FColor.Type, Set<FColor>)Сохраняет цвета выбранного типа
isIgnored(FPlayer, FPlayer target)Проверяет, игнорирует ли игрок другого
loadIgnores(FPlayer)Отдаёт список игнора
saveIgnore(FPlayer, FPlayer target)Добавляет игрока в игнор
deleteIgnore(FPlayer, Ignore)Убирает игрока из игнора
getReceiverMails(FPlayer)Отдаёт полученную почту
getSenderMails(FPlayer)Отдаёт отправленную почту
saveMail(FPlayer, FPlayer target, String message)Отправляет письмо
deleteMail(Mail)Удаляет письмо

Невидимость

МетодЧто делает
isVanished(FEntity)Проверяет, скрыта ли сущность
isVanished(FEntity, boolean checkVanishIntegration)То же самое, но с учётом сторонних vanish плагинов
canSeeVanished(FEntity target, FEntity viewer)Проверяет, видит ли наблюдатель скрытую сущность
// не отправляем сообщение о скрытом игроке
if (socialService.isVanished(fPlayer)) return;

Время игры и скины

PlaytimeService считает наигранное время и AFK сессии

МетодЧто делает
getPlayTime(FPlayer)Отдаёт статистику игрового времени, может вернуть null
getAllPlayTimes(int limit, int offset)Отдаёт топ по времени игры постранично
getPlayTimesCount()Отдаёт количество записей
saveAfkSession(FPlayer, boolean afk)Отмечает вход или выход из AFK

SkinService отдаёт ссылки на внешний вид игрока

МетодЧто отдаёт
getSkin(FEntity)Текстуру скина
getAvatarUrl(FEntity)Ссылку на аватар
getBodyUrl(FEntity)Ссылку на изображение тела

Пример

import net.flectone.pulse.annotation.Pulse;
import net.flectone.pulse.constant.SettingText;
import net.flectone.pulse.listener.PulseListener;
import net.flectone.pulse.model.entity.FPlayer;
import net.flectone.pulse.model.event.player.PlayerLoadEvent;
import net.flectone.pulse.service.SocialService;

public class WelcomeListener implements PulseListener {

    private final SocialService socialService;

    public WelcomeListener(SocialService socialService) {
        this.socialService = socialService;
    }

    @Pulse
    public void onLoad(PlayerLoadEvent event) {
        if (event.reload()) return;

        FPlayer fPlayer = event.player();
        if (fPlayer.isUnknown() || fPlayer.isConsole()) return;

        String locale = socialService.getSetting(fPlayer, SettingText.LOCALE);
        getLogger().info(fPlayer.name() + " зашёл с языком " + locale);
    }

}
Примечание

FPlayer описывает и обычных игроков, и консоль, поэтому перед действиями проверяй isConsole(). Обращения к базе вроде findAllFPlayers() вызывай в асинхронной задаче планировщика

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

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