What Is FlectonePulse? 
FlectonePulse is a plugin and mod for Minecraft (and Hytale) servers that takes full control over chat, messages, and notifications. You decide what players see, when they see it, and how it looks. Clean defaults for beginners, deep configuration for everyone else
FlectonePulse was the subject of a university thesis and received top marks for its architecture, technical depth, and practical value. The full thesis, presentation, and plagiarism report are publicly available
Why FlectonePulse instead of other message plugins?
| Feature | FlectonePulse | Typical message plugin |
|---|---|---|
| Fully async – no main thread impact | ✅ | ❌ |
| Supports 1.8.8 up to the latest Minecraft version | ✅ | ⚠️ (often limited) |
| Works on Bukkit, Spigot, Paper, Purpur, Folia, and Fabric | ✅ | ❌ (usually one platform) |
| Built‑in proxy support (BungeeCord, Velocity) | ✅ | ❌ (requires separate plugin) |
| Cross‑server message synchronization (via proxy or Redis) | ✅ | ❌ |
| Hytale support | ✅ | ❌ |
| Per‑player Minecraft client language detection | ✅ | ❌ |
Textures in chat without resource pack (<texture:name>) |
✅ | ❌ |
In‑line player heads and built‑in sprites (<player_head>, <sprite:name>) |
✅ | ❌ |
| Modular design – enable/disable any feature | ✅ | ⚠️ (rarely) |
| 40+ built‑in commands (chat, moderation, fun, polls, etc.) | ✅ | ❌ |
| Cross‑platform chat (Discord, Telegram, Twitch) | ✅ | ❌ |
| Legacy color codes + MiniMessage support in one system | ✅ | ⚠️ (usually one or the other) |
| Google Guice dependency injection for clean architecture | ✅ | ❌ |
| Open source & completely free | ✅ | ⚠️ (often freemium) |
Requirement
Java 17 or higher is REQUIRED. Older Minecraft versions, such as 1.8.8, can also run on Java 17 (check PandaSpigot)
| Platform | Supported Versions |
|---|---|
| Bukkit / Spigot / Paper / Purpur / Folia | 1.8.8 – Latest |
| Fabric | Latest Minecraft version |
| BungeeCord / Waterfall | Latest |
| Velocity | Latest |
| Hytale | Latest Hytale version |
| NeoForge | Planned |
Configuration Files
| File | Purpose |
|---|---|
config.yml |
Database, language, proxy mode, cache |
command.yml |
Enable/disable and configure commands |
message.yml |
All message modules, conditions and behavior |
integration.yml |
Third-party plugins and external platforms |
permission.yml |
Permissions for every feature |
localizations/*.yml |
Per-language message text |
🎨 Color Formatting
FlectonePulse understands every color system and converts them all to MiniMessage internally. Mix legacy codes and modern tags in the same line, it works
| Input | Result |
|---|---|
&0-&9, &a-&f |
<black>, <dark_blue>, ..., <white> |
&l / &m / &n / &o / &k / &r |
<b> / <st> / <u> / <i> / <obf> / <reset> |
&#rrggbb, #rrggbb |
<#rrggbb> |
| MiniMessage | <gradient>, <hover:...>, <click:...>, etc. |
join:
format: "<gradient:#FF0000:#00FF00>&lПривет</gradient> <rainbow><player></rainbow>!"
🧱 Textures in Chat – No Resource Pack Needed
Embed custom images directly into chat messages and the server MOTD with <texture:name>
Player skin avatars with <player_head>, Minecraft built-in sprites with <sprite:name>
🌍 Per-Player Language Detection
Enable by_player: true and every message is delivered in the player's own client language. If a translation is missing, the server default is used as fallback
💬 Multi-Channel Chat System
Multiple named chat channels with independent settings. Each channel has its own range, destination, cooldown, sound, trigger
Send any formatted message to any destination with admin command /emit. You can use destination CHAT ACTION_BAR BOSS_BAR TITLE SUBTITLE TOAST TAB_HEADER TAB_FOOTER BRAND
🌈 Per-Player Customization
Players open a full in-game menu /chatsetting to toggle messages, change colors, and disable whatever they don't want
✨ Everything is a Message and is Configurable
FlectonePulse takes control of virtually every event that produces text
Full list in documentation 🔗
🎮 40+ Built-In Commands
Already exist: /afk /anon /ban /banlist /broadcast /chatcolor /chatsetting /clearchat /clearmail /coin /deletemessage /dice /do /emit /geolocate /helper /ignore /ignorelist /kick /mail /maintenance /me /mute /mutelist /nickname /online /ping /reply /spy /tell /toponline /translateto /unban /unmute /unwarn /warn /warnlist /whitelist
Full list in documentation 🔗
🤝 Integration with Platforms
🤝 Integration with Plugins
| Plugin | What it adds |
|---|---|
| 🛡️ LuckPerms | Prefix, suffix, group display, TAB sorting by rank |
| 🧩 PlaceholderAPI / MiniPlaceholders | Any %placeholder% from other plugins |
| 🎙️ PlasmoVoice / SimpleVoice | Mute and ignore sync with voice chat |
| 🖼️ SkinsRestorer | Real player skins in chat and TAB |
| 👻 SuperVanish | Vanished players hidden automatically (even via proxy) |
| 💬 InteractiveChat | Enhanced interactive chat elements |
| 🔨 AdvancedBan / LibertyBans / LiteBans | Delegate ban commands to your existing system |
| 🌐 Vault | Permission compatibility |
| 🗣️ Floodgate / Geyser | Bedrock player support |
| 📦 ItemsAdder | Custom textures and items in messages |
Full list in documentation 🔗
🙏 Acknowledgments
FlectonePulse is built on these projects:
- 🏗️ Google Guice – dependency injection
- 📚 JDBI with HikariCP – database access
- 📦 Jackson – data serialization
- 🧙 PacketEvents – packet-level event handling
- 🎨 Adventure – text component formatting
- ⌨️ Cloud – commands with tab completion
- ⏱️ Universal Scheduler – cross-platform task scheduling
- 🔣 Symbol Chat – Unicode symbol picker
- 🌐 MiniTranslator – legacy to MiniMessage conversion
- 🌱 FlectoneChat – the predecessor
And thanks to the community! Every star on GitHub and review on platforms shows that FlectonePulse is genuinely useful ⭐
📊 Project Statistics
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 |
- Added module names in the message context in the API
- Added the ability to specify a link domain for url and image in the replacement module
- Added group weight check to the spy module
- Added support for custom permissions for
range, so that the message is shown only to those players who have this permission - Added a player collision option to the scoreboard module
## 🔧 Refactors
- In Discord and Telegram, manual executor management has been replaced with a proper resource release mechanism
- Optimized Discord client resource management
- Separated pet death messages for integrations. To display them, you need to use
DEATH_PETor add.petat the end of the localization key - Improved URL syntax validation
## 🐞 Bug Fixes
- Fixed recipient caching in MessageContext, now its
idalso affects the cache - Fixed error handling when downloading files
- Added item death messages for sulfur cube
- Telegram and Discord channel info updates have been moved to an asynchronous task scheduler
## 📦 Dependencies
- Hytale Server updated to 0.7.0
- Gradle updated to v9.8.1
- Fabric Loom updated to v1.18.3
- Triton API updated to v4.2.0
- PostgreSQL updated to v42.7.14
- Netty Buffer updated to v4.2.19.Final
- BuildConfig updated to v6.1.2
- NeoForge ModDev updated to v2.0.148
- Caffeine updated to v3.3.0
- Lettuce Core updated to v7.8.0.RELEASE
- Jdbi3 Core updated to v3.55.0
- PacketEvents Spigot updated to v2.14.0
- Lombok updated to v9.8.0
- VoiceChat API updated to v2.6.24
- Jackson Dataformat YAML updated to v3.2.3
- SkinsRestorer API updated to v15.12.6
- Vanish updated to v1.6.16+26.3
- H2 updated to v2.5.252
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.14.1...v1.14.2)
- Added module names in the message context in the API
- Added the ability to specify a link domain for url and image in the replacement module
- Added group weight check to the spy module
- Added support for custom permissions for
range, so that the message is shown only to those players who have this permission - Added a player collision option to the scoreboard module
## 🔧 Refactors
- In Discord and Telegram, manual executor management has been replaced with a proper resource release mechanism
- Optimized Discord client resource management
- Separated pet death messages for integrations. To display them, you need to use
DEATH_PETor add.petat the end of the localization key - Improved URL syntax validation
## 🐞 Bug Fixes
- Fixed recipient caching in MessageContext, now its
idalso affects the cache - Fixed error handling when downloading files
- Added item death messages for sulfur cube
- Telegram and Discord channel info updates have been moved to an asynchronous task scheduler
## 📦 Dependencies
- Hytale Server updated to 0.7.0
- Gradle updated to v9.8.1
- Fabric Loom updated to v1.18.3
- Triton API updated to v4.2.0
- PostgreSQL updated to v42.7.14
- Netty Buffer updated to v4.2.19.Final
- BuildConfig updated to v6.1.2
- NeoForge ModDev updated to v2.0.148
- Caffeine updated to v3.3.0
- Lettuce Core updated to v7.8.0.RELEASE
- Jdbi3 Core updated to v3.55.0
- PacketEvents Spigot updated to v2.14.0
- Lombok updated to v9.8.0
- VoiceChat API updated to v2.6.24
- Jackson Dataformat YAML updated to v3.2.3
- SkinsRestorer API updated to v15.12.6
- Vanish updated to v1.6.16+26.3
- H2 updated to v2.5.252
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.14.1...v1.14.2)
- Added module names in the message context in the API
- Added the ability to specify a link domain for url and image in the replacement module
- Added group weight check to the spy module
- Added support for custom permissions for
range, so that the message is shown only to those players who have this permission - Added a player collision option to the scoreboard module
## 🔧 Refactors
- In Discord and Telegram, manual executor management has been replaced with a proper resource release mechanism
- Optimized Discord client resource management
- Separated pet death messages for integrations. To display them, you need to use
DEATH_PETor add.petat the end of the localization key - Improved URL syntax validation
## 🐞 Bug Fixes
- Fixed recipient caching in MessageContext, now its
idalso affects the cache - Fixed error handling when downloading files
- Added item death messages for sulfur cube
- Telegram and Discord channel info updates have been moved to an asynchronous task scheduler
## 📦 Dependencies
- Hytale Server updated to 0.7.0
- Gradle updated to v9.8.1
- Fabric Loom updated to v1.18.3
- Triton API updated to v4.2.0
- PostgreSQL updated to v42.7.14
- Netty Buffer updated to v4.2.19.Final
- BuildConfig updated to v6.1.2
- NeoForge ModDev updated to v2.0.148
- Caffeine updated to v3.3.0
- Lettuce Core updated to v7.8.0.RELEASE
- Jdbi3 Core updated to v3.55.0
- PacketEvents Spigot updated to v2.14.0
- Lombok updated to v9.8.0
- VoiceChat API updated to v2.6.24
- Jackson Dataformat YAML updated to v3.2.3
- SkinsRestorer API updated to v15.12.6
- Vanish updated to v1.6.16+26.3
- H2 updated to v2.5.252
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.14.1...v1.14.2)
- Added support for Minecraft 26.3
- Added support for Hytale 0.6.8
- Added role tag support in Discord
- Added anonymous admin and role tag support in Telegram
- Added date formatting with player-specific localization
## 🔧 Refactors
- Replaced platform world checking with ticker
## 🐞 Bug Fixes
- Fixed handling of invalid player playtime data
- Fixed Micrometer relocation in Discord integration [#474](https://github.com/Flectone/FlectonePulse/issues/474)
## 📦 Dependencies
- Cloud Fabric updated to v2.1.0
- Cloud NeoForge updated to v2.1.0
- Cloud Paper updated to v2.0.1
- Fabric Loom updated to v1.18.2
- Velocity API updated to v4.2.0
- Placeholder API updated to v3.2.0+26.3
- PlasmoVoice API updated to v2.1.17
- TelegramBots updated to v10.3.0
- Lombok updated to v1.18.48
- H2 updated to v2.5.250
- BuildConfig updated to v6.1.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.13.1...v1.14.0)
- Added support for Minecraft 26.3
- Added support for Hytale 0.6.8
- Added role tag support in Discord
- Added anonymous admin and role tag support in Telegram
- Added date formatting with player-specific localization
## 🔧 Refactors
- Replaced platform world checking with ticker
## 🐞 Bug Fixes
- Fixed handling of invalid player playtime data
- Fixed Micrometer relocation in Discord integration [#474](https://github.com/Flectone/FlectonePulse/issues/474)
## 📦 Dependencies
- Cloud Fabric updated to v2.1.0
- Cloud NeoForge updated to v2.1.0
- Cloud Paper updated to v2.0.1
- Fabric Loom updated to v1.18.2
- Velocity API updated to v4.2.0
- Placeholder API updated to v3.2.0+26.3
- PlasmoVoice API updated to v2.1.17
- TelegramBots updated to v10.3.0
- Lombok updated to v1.18.48
- H2 updated to v2.5.250
- BuildConfig updated to v6.1.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.13.1...v1.14.0)
- Added support for Minecraft 26.3
- Added support for Hytale 0.6.8
- Added role tag support in Discord
- Added anonymous admin and role tag support in Telegram
- Added date formatting with player-specific localization
## 🔧 Refactors
- Replaced platform world checking with ticker
## 🐞 Bug Fixes
- Fixed handling of invalid player playtime data
- Fixed Micrometer relocation in Discord integration [#474](https://github.com/Flectone/FlectonePulse/issues/474)
## 📦 Dependencies
- Cloud Fabric updated to v2.1.0
- Cloud NeoForge updated to v2.1.0
- Cloud Paper updated to v2.0.1
- Fabric Loom updated to v1.18.2
- Velocity API updated to v4.2.0
- Placeholder API updated to v3.2.0+26.3
- PlasmoVoice API updated to v2.1.17
- TelegramBots updated to v10.3.0
- Lombok updated to v1.18.48
- H2 updated to v2.5.250
- BuildConfig updated to v6.1.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.13.1...v1.14.0)
- Reason keys now carry a time, it is set by
reason_timesin the settings ofban,mute,warn,maintenanceandwhitelist. If no time is entered in the command, it is taken by the reason, anddefaultis used when the reason is not listed - Added
group_orderto the LuckPerms integration, to sort TAB by your own group order instead of the group weight - Added
check_group_weightto the/whoiscommand, a player with the same or higher permissions cannot be viewed and is hidden from the list - The punishment lists got the
line_not_activeformat, the list of a player now also shows the inactive punishments - The
conditiontag now works in sidebar messages with string list - Added sequential execution of the async tasks of one module, they no longer overtake each other
## 🔧 Refactors
- TAB, scoreboard and objectives send packets only when something has changed, what was sent is remembered
- The name updates in TAB now go player by player instead of everyone at once
- Name constants are updated always, not only in proxy mode
- The signature is removed from the
player_headtextures - Database queries and indexes are optimized,
/whoisnow makes one query instead of two - The punishment cache is reworked
- The
runAsyncwithindependentis removed from the scheduler - Vanish handling is simplified, a separate SuperVanish check is no longer needed
- The priorities of the join and quit events on Bukkit are changed
## 🐞 Bug Fixes
player_headtakes the head byuuidinstead of the name, which crashed the client of the players- Join and quit messages no longer reach the integrations several times in proxy mode
- Discord, Telegram and Twitch no longer connect several times on a fast
/flectonepulse reload - A player who is not in the database yet no longer gets into the online cache, which broke saving their settings
- Broken yaml no longer stays on disk after saving through the editor, the file is restored to the previous one
- The dump is validated before the import, an empty file no longer wipes the database
- A busy editor port no longer shuts the server down
- The stuck queue detection no longer clears it, because of this the async tasks of a module stopped forever
- The executor overload warning no longer appears on shutdown
- A permanent mute is detected in CMI
- The online status of a player is updated correctly in the database
- Negative time is no longer shown
- Updated the metrics link in config.yml
## 📦 Dependencies
- Hytale Server updated to 0.6.3
- Velocity API updated to v4.1.0
- Fabric Loader updated to v0.19.5
- Fabric Loom updated to v1.17.20
- Discord4J updated to v3.3.3
- TelegramBots updated to v10.2.1
- PlasmoVoice updated to v2.1.16
- Lettuce updated to v7.7.0
- SQLite driver updated to v3.53.4.0
- Gradle updated to v9.7.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.13.0...v1.13.1)
- Reason keys now carry a time, it is set by
reason_timesin the settings ofban,mute,warn,maintenanceandwhitelist. If no time is entered in the command, it is taken by the reason, anddefaultis used when the reason is not listed - Added
group_orderto the LuckPerms integration, to sort TAB by your own group order instead of the group weight - Added
check_group_weightto the/whoiscommand, a player with the same or higher permissions cannot be viewed and is hidden from the list - The punishment lists got the
line_not_activeformat, the list of a player now also shows the inactive punishments - The
conditiontag now works in sidebar messages with string list - Added sequential execution of the async tasks of one module, they no longer overtake each other
## 🔧 Refactors
- TAB, scoreboard and objectives send packets only when something has changed, what was sent is remembered
- The name updates in TAB now go player by player instead of everyone at once
- Name constants are updated always, not only in proxy mode
- The signature is removed from the
player_headtextures - Database queries and indexes are optimized,
/whoisnow makes one query instead of two - The punishment cache is reworked
- The
runAsyncwithindependentis removed from the scheduler - Vanish handling is simplified, a separate SuperVanish check is no longer needed
- The priorities of the join and quit events on Bukkit are changed
## 🐞 Bug Fixes
player_headtakes the head byuuidinstead of the name, which crashed the client of the players- Join and quit messages no longer reach the integrations several times in proxy mode
- Discord, Telegram and Twitch no longer connect several times on a fast
/flectonepulse reload - A player who is not in the database yet no longer gets into the online cache, which broke saving their settings
- Broken yaml no longer stays on disk after saving through the editor, the file is restored to the previous one
- The dump is validated before the import, an empty file no longer wipes the database
- A busy editor port no longer shuts the server down
- The stuck queue detection no longer clears it, because of this the async tasks of a module stopped forever
- The executor overload warning no longer appears on shutdown
- A permanent mute is detected in CMI
- The online status of a player is updated correctly in the database
- Negative time is no longer shown
- Updated the metrics link in config.yml
## 📦 Dependencies
- Hytale Server updated to 0.6.3
- Velocity API updated to v4.1.0
- Fabric Loader updated to v0.19.5
- Fabric Loom updated to v1.17.20
- Discord4J updated to v3.3.3
- TelegramBots updated to v10.2.1
- PlasmoVoice updated to v2.1.16
- Lettuce updated to v7.7.0
- SQLite driver updated to v3.53.4.0
- Gradle updated to v9.7.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.13.0...v1.13.1)
- Reason keys now carry a time, it is set by
reason_timesin the settings ofban,mute,warn,maintenanceandwhitelist. If no time is entered in the command, it is taken by the reason, anddefaultis used when the reason is not listed - Added
group_orderto the LuckPerms integration, to sort TAB by your own group order instead of the group weight - Added
check_group_weightto the/whoiscommand, a player with the same or higher permissions cannot be viewed and is hidden from the list - The punishment lists got the
line_not_activeformat, the list of a player now also shows the inactive punishments - The
conditiontag now works in sidebar messages with string list - Added sequential execution of the async tasks of one module, they no longer overtake each other
## 🔧 Refactors
- TAB, scoreboard and objectives send packets only when something has changed, what was sent is remembered
- The name updates in TAB now go player by player instead of everyone at once
- Name constants are updated always, not only in proxy mode
- The signature is removed from the
player_headtextures - Database queries and indexes are optimized,
/whoisnow makes one query instead of two - The punishment cache is reworked
- The
runAsyncwithindependentis removed from the scheduler - Vanish handling is simplified, a separate SuperVanish check is no longer needed
- The priorities of the join and quit events on Bukkit are changed
## 🐞 Bug Fixes
player_headtakes the head byuuidinstead of the name, which crashed the client of the players- Join and quit messages no longer reach the integrations several times in proxy mode
- Discord, Telegram and Twitch no longer connect several times on a fast
/flectonepulse reload - A player who is not in the database yet no longer gets into the online cache, which broke saving their settings
- Broken yaml no longer stays on disk after saving through the editor, the file is restored to the previous one
- The dump is validated before the import, an empty file no longer wipes the database
- A busy editor port no longer shuts the server down
- The stuck queue detection no longer clears it, because of this the async tasks of a module stopped forever
- The executor overload warning no longer appears on shutdown
- A permanent mute is detected in CMI
- The online status of a player is updated correctly in the database
- Negative time is no longer shown
- Updated the metrics link in config.yml
## 📦 Dependencies
- Hytale Server updated to 0.6.3
- Velocity API updated to v4.1.0
- Fabric Loader updated to v0.19.5
- Fabric Loom updated to v1.17.20
- Discord4J updated to v3.3.3
- TelegramBots updated to v10.2.1
- PlasmoVoice updated to v2.1.16
- Lettuce updated to v7.7.0
- SQLite driver updated to v3.53.4.0
- Gradle updated to v9.7.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.13.0...v1.13.1)
Migrations from versions
1.4.3 to 1.11.0 are removed, as promised in 1.12.2. If you are updating from one of them, install 1.12.2 first, let it start once, and only then install 1.13.0## ✨ Features
- Added NeoForge platform support
- The core is split into the
apiandcommonmodules, so addons now depend onapialone - Added the
fadingmodule for fading a message with distance and the<fading>tag - Added a cache for the punishments the integrations with other punishment plugins report, so every punishment is no longer asked about on every lookup
- Added database export and import to the
/flectonepulsecommand, along with file suggestions forimportanddatabase_import - Added H2 database migration from legacy store formats
- Added database connection pool settings
- Added notification and content protection options to the Telegram integration
- Added an allowed mentions option to the Discord integration
- Added a name pattern regex to the
mentionmodule - Added a maintenance placeholder to PlaceholderAPI and MiniPlaceholders
- Added multiline support to
motd - Added stall detection and recovery for the task queue
- Added async task awaiting with a timeout
- Added caching and lazy loading for tag resolvers
- Improved error handling and type conversion when reading yml
## 🔧 Refactors
- Name constants are now worked out on the player's own server and kept in the database, so they also work in the player list across a proxy. How often to work them out again is set by the new
tickerin thenamesmodule settings - Player settings storage is unified, and
getSetting,isSettingandsaveSettingnow also take the key a setting is stored under ExternalMuteServicerenamed toExternalModerationService- Caches moved from Guava to Caffeine
- PacketEvents replaced with packeteventsmodern
- Every platform is now built with Jar in Jar
- The fastutil library is dropped in favour of the standard collections
- Logging moved to platform adapters
- The Vault integration is disabled by default
- A mention is now always formatted, but the sound only reaches those who are not vanished
randreplyare added tospyby default- The reload events are merged into a single
ReloadEventwith a type - Adjusted the default cache sizes
- Simplified the CMI integration logic
- Added timeouts for https requests
- The database backup is now taken with DatabaseExporter
## 🐞 Bug Fixes
- The vanish state of SuperVanish is now handled, so it changes along with the plugin
- Added timeouts for Discord, Telegram and Twitch, so a stuck integration no longer holds up the startup
- A failed H2 database migration no longer breaks the startup
- The Bukkit scheduler now validates an entity before processing it
- Bubbles are no longer rendered for dead players and are cleaned up on teleport
- The player's world is only updated on a real teleport
- Fixed duplicate objectives being created for the scoreboard
- The plugin no longer forwards its own messages to clients on Velocity and proxies
- Fixed command suggestions and parsers
tictactoenow handles empty input and validates move coordinates- A rock paper scissors game is cleaned up when a player disconnects
swearnow handles an empty trigger and no longer allows apostrophe injection- The sidebar drops the leftover line when the new content is shorter
## 📦 Dependencies
- Hytale Server updated to 0.5.8
- Fabric Loom updated to v1.17.19
- TelegramBots updated to v10.2.0
- DeepL updated to v1.17.0
- Jackson updated to v3.2.2
- Log4j API updated to v2.26.1
- Netty updated to v4.2.17
- MariaDB driver updated to v3.5.10
- Commons IO updated to v2.22.0
- JSpecify updated to v1.0.1
- CodeMirror updated to v5.65.21
- Gradle updated to v9.7.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.2...v1.13.0)
Migrations from versions
1.4.3 to 1.11.0 are removed, as promised in 1.12.2. If you are updating from one of them, install 1.12.2 first, let it start once, and only then install 1.13.0## ✨ Features
- Added NeoForge platform support
- The core is split into the
apiandcommonmodules, so addons now depend onapialone - Added the
fadingmodule for fading a message with distance and the<fading>tag - Added a cache for the punishments the integrations with other punishment plugins report, so every punishment is no longer asked about on every lookup
- Added database export and import to the
/flectonepulsecommand, along with file suggestions forimportanddatabase_import - Added H2 database migration from legacy store formats
- Added database connection pool settings
- Added notification and content protection options to the Telegram integration
- Added an allowed mentions option to the Discord integration
- Added a name pattern regex to the
mentionmodule - Added a maintenance placeholder to PlaceholderAPI and MiniPlaceholders
- Added multiline support to
motd - Added stall detection and recovery for the task queue
- Added async task awaiting with a timeout
- Added caching and lazy loading for tag resolvers
- Improved error handling and type conversion when reading yml
## 🔧 Refactors
- Name constants are now worked out on the player's own server and kept in the database, so they also work in the player list across a proxy. How often to work them out again is set by the new
tickerin thenamesmodule settings - Player settings storage is unified, and
getSetting,isSettingandsaveSettingnow also take the key a setting is stored under ExternalMuteServicerenamed toExternalModerationService- Caches moved from Guava to Caffeine
- PacketEvents replaced with packeteventsmodern
- Every platform is now built with Jar in Jar
- The fastutil library is dropped in favour of the standard collections
- Logging moved to platform adapters
- The Vault integration is disabled by default
- A mention is now always formatted, but the sound only reaches those who are not vanished
randreplyare added tospyby default- The reload events are merged into a single
ReloadEventwith a type - Adjusted the default cache sizes
- Simplified the CMI integration logic
- Added timeouts for https requests
- The database backup is now taken with DatabaseExporter
## 🐞 Bug Fixes
- The vanish state of SuperVanish is now handled, so it changes along with the plugin
- Added timeouts for Discord, Telegram and Twitch, so a stuck integration no longer holds up the startup
- A failed H2 database migration no longer breaks the startup
- The Bukkit scheduler now validates an entity before processing it
- Bubbles are no longer rendered for dead players and are cleaned up on teleport
- The player's world is only updated on a real teleport
- Fixed duplicate objectives being created for the scoreboard
- The plugin no longer forwards its own messages to clients on Velocity and proxies
- Fixed command suggestions and parsers
tictactoenow handles empty input and validates move coordinates- A rock paper scissors game is cleaned up when a player disconnects
swearnow handles an empty trigger and no longer allows apostrophe injection- The sidebar drops the leftover line when the new content is shorter
## 📦 Dependencies
- Hytale Server updated to 0.5.8
- Fabric Loom updated to v1.17.19
- TelegramBots updated to v10.2.0
- DeepL updated to v1.17.0
- Jackson updated to v3.2.2
- Log4j API updated to v2.26.1
- Netty updated to v4.2.17
- MariaDB driver updated to v3.5.10
- Commons IO updated to v2.22.0
- JSpecify updated to v1.0.1
- CodeMirror updated to v5.65.21
- Gradle updated to v9.7.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.2...v1.13.0)
Migrations from versions
1.4.3 to 1.11.0 are removed, as promised in 1.12.2. If you are updating from one of them, install 1.12.2 first, let it start once, and only then install 1.13.0## ✨ Features
- Added NeoForge platform support
- The core is split into the
apiandcommonmodules, so addons now depend onapialone - Added the
fadingmodule for fading a message with distance and the<fading>tag - Added a cache for the punishments the integrations with other punishment plugins report, so every punishment is no longer asked about on every lookup
- Added database export and import to the
/flectonepulsecommand, along with file suggestions forimportanddatabase_import - Added H2 database migration from legacy store formats
- Added database connection pool settings
- Added notification and content protection options to the Telegram integration
- Added an allowed mentions option to the Discord integration
- Added a name pattern regex to the
mentionmodule - Added a maintenance placeholder to PlaceholderAPI and MiniPlaceholders
- Added multiline support to
motd - Added stall detection and recovery for the task queue
- Added async task awaiting with a timeout
- Added caching and lazy loading for tag resolvers
- Improved error handling and type conversion when reading yml
## 🔧 Refactors
- Name constants are now worked out on the player's own server and kept in the database, so they also work in the player list across a proxy. How often to work them out again is set by the new
tickerin thenamesmodule settings - Player settings storage is unified, and
getSetting,isSettingandsaveSettingnow also take the key a setting is stored under ExternalMuteServicerenamed toExternalModerationService- Caches moved from Guava to Caffeine
- PacketEvents replaced with packeteventsmodern
- Every platform is now built with Jar in Jar
- The fastutil library is dropped in favour of the standard collections
- Logging moved to platform adapters
- The Vault integration is disabled by default
- A mention is now always formatted, but the sound only reaches those who are not vanished
randreplyare added tospyby default- The reload events are merged into a single
ReloadEventwith a type - Adjusted the default cache sizes
- Simplified the CMI integration logic
- Added timeouts for https requests
- The database backup is now taken with DatabaseExporter
## 🐞 Bug Fixes
- The vanish state of SuperVanish is now handled, so it changes along with the plugin
- Added timeouts for Discord, Telegram and Twitch, so a stuck integration no longer holds up the startup
- A failed H2 database migration no longer breaks the startup
- The Bukkit scheduler now validates an entity before processing it
- Bubbles are no longer rendered for dead players and are cleaned up on teleport
- The player's world is only updated on a real teleport
- Fixed duplicate objectives being created for the scoreboard
- The plugin no longer forwards its own messages to clients on Velocity and proxies
- Fixed command suggestions and parsers
tictactoenow handles empty input and validates move coordinates- A rock paper scissors game is cleaned up when a player disconnects
swearnow handles an empty trigger and no longer allows apostrophe injection- The sidebar drops the leftover line when the new content is shorter
## 📦 Dependencies
- Hytale Server updated to 0.5.8
- Fabric Loom updated to v1.17.19
- TelegramBots updated to v10.2.0
- DeepL updated to v1.17.0
- Jackson updated to v3.2.2
- Log4j API updated to v2.26.1
- Netty updated to v4.2.17
- MariaDB driver updated to v3.5.10
- Commons IO updated to v2.22.0
- JSpecify updated to v1.0.1
- CodeMirror updated to v5.65.21
- Gradle updated to v9.7.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.2...v1.13.0)
This is the last version that supports migration from versions
1.4.3 to 1.11.0. In future updates, migrations from old versions will be removed## 🐞 Bug Fixes
- Reverted message placeholders in integrations
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.1...v1.12.2)
This is the last version that supports migration from versions
1.4.3 to 1.11.0. In future updates, migrations from old versions will be removed## 🐞 Bug Fixes
- Reverted message placeholders in integrations
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.1...v1.12.2)
This is the last version that supports migration from versions
1.4.3 to 1.11.0. In future updates, migrations from old versions will be removed## ✨ Features
- Classes that inherited from
EventMetadatahave been removed and replaced withMessageContextcomposition. This allows creating cache keys that depend on context, fixing message duplication caused by formatting cache
## 🔧 Refactors
- Localization modules no longer contain generics
- Added duplicate game check in minesweeper
- VanishMetadata replaced with VanishMessageContext
- IntegrationMetadata replaced with IntegrationMessageFormat
- Some dependencies changed from compileOnly to compileOnlyApi for proper FlectonePulse API functionality
- Whois command is now disabled by default in Hytale
## 🐞 Bug Fixes
- Unknown UUID no longer breaks login state tracking on proxy
- Minesweeper game is now properly removed after win or loss
- Handled vanish status initialization for players
- Player synchronization between cache and database fixed
- Prevented world update for unknown players
- Overhead messages no longer render during plugin shutdown
- Unknown players are now properly handled in proxy messages
- Nickname is now sent via proxy
/chatcoloris now sent locally if proxy is not enabled- Added user message indicator in overhead messages to distinguish cache (fix for duplicates)
- Legacy color conversion in
/streamreplaced with new tag resolver approach
## 📦 Dependencies
- Updated TelegramBots to v10.1.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.0...v1.12.1)
This is the last version that supports migration from versions
1.4.3 to 1.11.0. In future updates, migrations from old versions will be removed## ✨ Features
- Classes that inherited from
EventMetadatahave been removed and replaced withMessageContextcomposition. This allows creating cache keys that depend on context, fixing message duplication caused by formatting cache
## 🔧 Refactors
- Localization modules no longer contain generics
- Added duplicate game check in minesweeper
- VanishMetadata replaced with VanishMessageContext
- IntegrationMetadata replaced with IntegrationMessageFormat
- Some dependencies changed from compileOnly to compileOnlyApi for proper FlectonePulse API functionality
- Whois command is now disabled by default in Hytale
## 🐞 Bug Fixes
- Unknown UUID no longer breaks login state tracking on proxy
- Minesweeper game is now properly removed after win or loss
- Handled vanish status initialization for players
- Player synchronization between cache and database fixed
- Prevented world update for unknown players
- Overhead messages no longer render during plugin shutdown
- Unknown players are now properly handled in proxy messages
- Nickname is now sent via proxy
/chatcoloris now sent locally if proxy is not enabled- Added user message indicator in overhead messages to distinguish cache (fix for duplicates)
- Legacy color conversion in
/streamreplaced with new tag resolver approach
## 📦 Dependencies
- Updated TelegramBots to v10.1.1
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.12.0...v1.12.1)
- Added whois module for searching players by IP
- Added Minesweeper game with flag mode
- Added padding module for centering and aligning text with characters
- Added message context cache with expireAfterWrite option
- Added duplicate check setting for bans and mutes
- Added offline event handling in Twitch integration
- Added timeout setting for main executor threads
## 🔧 Refactors
- Player inventory on Hytale now uses hotbar component
- Task queue changed from SYNCHRONOUS to LINKED_BLOCKING executor
- Player head placeholder replaced with optional format
- Simplified translation argument handling in ComponentDecorator
- Added flag to control message caching
## 🐞 Bug Fixes
- Fixed UUID and nickname mismatch on login in whitelist module
- Added disconnect check in proxy mode in quit module
- Disabled legacy color conversion and removed query parameters from URLs in stream module
- Fixed message sending in Twitch (replaced telegram with twitch sender)
- Player tag no longer auto-resolves in usage messages
- Fixed hints in mutelist and dice
- Online status now correctly updates in cache without race conditions in proxy mode
- Unknown server on proxy is now handled
- getPacketVersion replaced with getClientVersion for version checks
- Added old client version check in object
- Added NPE handling in PlaceholderAPI placeholders
- Backslashes are now escaped in moderation reasons
- Exception when getting ping in player adapters is now handled
## 📦 Dependencies
- Updated Hytale Server to 0.5.7, HyUI to 0.9.8
- Updated SkinsRestorer API to v15.12.5
- Updated Cloud libraries to v2.0.0-beta.17
- Updated Fabric Loom to v1.17.16
- Updated Vanish to v1.6.15
- Updated LibertyBans to v1.1.4
- Updated Velocity API to v4
- Updated PlaceholderAPI to v2.12.3
- Updated Jackson to v3.2.1
- Updated Log4j to v2.26.1
- Updated PostgreSQL to v42.7.13
- Updated Netty to v4.2.16
- Updated JDBI to v3.54.0
- Updated Triton API to v4.1.0
- Updated SQLite to v3.53.2.1
- Updated TelegramBots to v10.1.0
- Updated fastutil to v8.5.19
- Updated Gradle to v9.6.1, Shadow plugin to v9.6.1
## New Contributors
- @MISQZY made their first contribution in https://github.com/Flectone/FlectonePulse/pull/419
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.11.0...v1.12.0)
- Added whois module for searching players by IP
- Added Minesweeper game with flag mode
- Added padding module for centering and aligning text with characters
- Added message context cache with expireAfterWrite option
- Added duplicate check setting for bans and mutes
- Added offline event handling in Twitch integration
- Added timeout setting for main executor threads
## 🔧 Refactors
- Player inventory on Hytale now uses hotbar component
- Task queue changed from SYNCHRONOUS to LINKED_BLOCKING executor
- Player head placeholder replaced with optional format
- Simplified translation argument handling in ComponentDecorator
- Added flag to control message caching
## 🐞 Bug Fixes
- Fixed UUID and nickname mismatch on login in whitelist module
- Added disconnect check in proxy mode in quit module
- Disabled legacy color conversion and removed query parameters from URLs in stream module
- Fixed message sending in Twitch (replaced telegram with twitch sender)
- Player tag no longer auto-resolves in usage messages
- Fixed hints in mutelist and dice
- Online status now correctly updates in cache without race conditions in proxy mode
- Unknown server on proxy is now handled
- getPacketVersion replaced with getClientVersion for version checks
- Added old client version check in object
- Added NPE handling in PlaceholderAPI placeholders
- Backslashes are now escaped in moderation reasons
- Exception when getting ping in player adapters is now handled
## 📦 Dependencies
- Updated Hytale Server to 0.5.7, HyUI to 0.9.8
- Updated SkinsRestorer API to v15.12.5
- Updated Cloud libraries to v2.0.0-beta.17
- Updated Fabric Loom to v1.17.16
- Updated Vanish to v1.6.15
- Updated LibertyBans to v1.1.4
- Updated Velocity API to v4
- Updated PlaceholderAPI to v2.12.3
- Updated Jackson to v3.2.1
- Updated Log4j to v2.26.1
- Updated PostgreSQL to v42.7.13
- Updated Netty to v4.2.16
- Updated JDBI to v3.54.0
- Updated Triton API to v4.1.0
- Updated SQLite to v3.53.2.1
- Updated TelegramBots to v10.1.0
- Updated fastutil to v8.5.19
- Updated Gradle to v9.6.1, Shadow plugin to v9.6.1
## New Contributors
- @MISQZY made their first contribution in https://github.com/Flectone/FlectonePulse/pull/419
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.11.0...v1.12.0)
- Added support for Minecraft version 26.2
- Started NeoForge support (in development)
- Completely reworked the command system in the scoreboard. Added per-player visibility control and support for name display distance
- Added distance-based text rendering in belowname
- The spy module has been rewritten using packet monitoring (so it works on Fabric too)
## 🔧 Refactors
- In FPlayer, improved ID generation and type handling; now uses a constant for the console
- The bubble module uses its own ExecutorService with error handling
- Objective name generation has been extracted into a separate method
- In FColor, added comments for SEE and OUT types
## 🐞 Bug Fixes
- Optimized database connection pool
- Handled concurrent player updates in FPlayerDAO
- Added client version check in ServerLink
- Console excluded from offline player suggestions
- Added color context control in objective
- getFirst replaced with getInt for compatibility with JVM downgrader
- Fixed argument order in sulfur cube death messages
## 📦 Dependencies
- Updated PacketEvents to 2.13.0
- Updated VoiceChat API to v2.6.20
- Updated Fabric to 26.2
- Updated Fabric Loom to v1.17.12
- Updated Vanish to v1.6.14
- Updated Cloud Fabric to v2.0.0-beta.17
- Updated Cloud Paper to v2.0.0-beta.16
- Updated Gradle to v9.6.0
- Updated maven.publish plugin to v0.37.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.10.2...v1.11.0)
- Added support for Minecraft version 26.2
- Started NeoForge support (in development)
- Completely reworked the command system in the scoreboard. Added per-player visibility control and support for name display distance
- Added distance-based text rendering in belowname
- The spy module has been rewritten using packet monitoring (so it works on Fabric too)
## 🔧 Refactors
- In FPlayer, improved ID generation and type handling; now uses a constant for the console
- The bubble module uses its own ExecutorService with error handling
- Objective name generation has been extracted into a separate method
- In FColor, added comments for SEE and OUT types
## 🐞 Bug Fixes
- Optimized database connection pool
- Handled concurrent player updates in FPlayerDAO
- Added client version check in ServerLink
- Console excluded from offline player suggestions
- Added color context control in objective
- getFirst replaced with getInt for compatibility with JVM downgrader
- Fixed argument order in sulfur cube death messages
## 📦 Dependencies
- Updated PacketEvents to 2.13.0
- Updated VoiceChat API to v2.6.20
- Updated Fabric to 26.2
- Updated Fabric Loom to v1.17.12
- Updated Vanish to v1.6.14
- Updated Cloud Fabric to v2.0.0-beta.17
- Updated Cloud Paper to v2.0.0-beta.16
- Updated Gradle to v9.6.0
- Updated maven.publish plugin to v0.37.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.10.2...v1.11.0)
- Implemented unified task scheduler
- Added SuperVanish state synchronization across servers via proxy
- On server start and reload, all players in the database are marked as offline
## 🔧 Refactors
- Proxy message listeners extracted into separate classes
- Player cache invalidation on the proxy optimized
- Proxy initialization moved to the correct loading phase
- Library com.alessiodp.libby replaced with internal Flectone dependencies
- Player nickname validation extracted to a separate validator class
- ArtifactId API is now dynamic (common -> minecraft-common, bukkit -> minecraft-bukkit, etc.)
- Updated log color scheme and thread prefix
- Incendo Cloud Pair replaced with Apache Commons Lang3 Pair
- Removed unused BiPredicate and imports from ModuleController
## 🐞 Bug Fixes
- Fixed race condition in online status handling
- Player removed from scoreboard on server leave
- Locale update occurs only for online players
- Proxy no longer sends messages on plugin shutdown
- Added valid range check to proxy listeners
- Vanilla commands are no longer removed in Bukkit with default config
- Added Folia compatibility for entity passenger handling
- Fixed error message formatting in logs
- Direct page number input in moderation is handled correctly
- Fake join/leave messages while vanished displayed with correct visibility
- Fixed main class name in bungee.yml
- Cache for unknown players updates correctly
- Improved player name validation in whitelist
- Proxy moderation filtered by server
## 📦 Dependencies
- Updated Hytale Server to 0.5.5
- Updated SkinsRestorer API to v15.12.3
- Updated LibertyBans to v1.1.3
- Updated Vanish to v1.6.11
- Updated HikariCP to v7.1.0
- Updated Plasmovoice API to v2.1.10
- Updated Fabric Loom to v1.17.11
- Updated MariaDB Java Client to v3.5.9
- Updated Jackson to v3.2.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.10.1...v1.10.2)
- Implemented unified task scheduler
- Added SuperVanish state synchronization across servers via proxy
- On server start and reload, all players in the database are marked as offline
## 🔧 Refactors
- Proxy message listeners extracted into separate classes
- Player cache invalidation on the proxy optimized
- Proxy initialization moved to the correct loading phase
- Library com.alessiodp.libby replaced with internal Flectone dependencies
- Player nickname validation extracted to a separate validator class
- ArtifactId API is now dynamic (common -> minecraft-common, bukkit -> minecraft-bukkit, etc.)
- Updated log color scheme and thread prefix
- Incendo Cloud Pair replaced with Apache Commons Lang3 Pair
- Removed unused BiPredicate and imports from ModuleController
## 🐞 Bug Fixes
- Fixed race condition in online status handling
- Player removed from scoreboard on server leave
- Locale update occurs only for online players
- Proxy no longer sends messages on plugin shutdown
- Added valid range check to proxy listeners
- Vanilla commands are no longer removed in Bukkit with default config
- Added Folia compatibility for entity passenger handling
- Fixed error message formatting in logs
- Direct page number input in moderation is handled correctly
- Fake join/leave messages while vanished displayed with correct visibility
- Fixed main class name in bungee.yml
- Cache for unknown players updates correctly
- Improved player name validation in whitelist
- Proxy moderation filtered by server
## 📦 Dependencies
- Updated Hytale Server to 0.5.5
- Updated SkinsRestorer API to v15.12.3
- Updated LibertyBans to v1.1.3
- Updated Vanish to v1.6.11
- Updated HikariCP to v7.1.0
- Updated Plasmovoice API to v2.1.10
- Updated Fabric Loom to v1.17.11
- Updated MariaDB Java Client to v3.5.9
- Updated Jackson to v3.2.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.10.1...v1.10.2)
- Added vanilla command removal functionality (bukkit)
- Added import functionality to whitelist (whitelist)
- Added player login and connection event handling for Fabric
## 🔧 Refactors
- !!! Separated FPlayer and settings, ignores, colors into SocialService (BREAKING CHANGE API: FPlayer no longer contains these fields) !!!
- Added proxy message listeners for all modules (api)
- Moved proxy registry enable call to correct position
- Streamlined cache invalidation process
- Removed player name parameter from pre-login processing
- Moved playtime repository from social to dedicated repository
- Removed settings loading from player queries (database)
- Separated FPlayerService into PlaytimeService and ModerationService, added new cache for SocialRepository
- Restructured listeners
## 🐞 Bug Fixes
- Replaced direct IntegrationModule dependency with provider injection
- Removed explicit field selection from database queries
- Removed default AFK from message ignore (afk)
- Checked AFK suffix before removal and fixed double message (afk)
- Replaced login session tracking with online status validation [#359](https://github.com/Flectone/FlectonePulse/issues/359)
- Fixed InteractiveChat raw tags in Discord [#360](https://github.com/Flectone/FlectonePulse/pull/360)
- Fixed player head validation logic: check playername first, then UUID and textures (object) [#362](https://github.com/Flectone/FlectonePulse/pull/362)
- Handled additional database migration error cases
- Bound component extractor (platform)
- Excluded console from range filtering (filter)
- Delayed player online invalidation on proxy (proxy)
## 📦 Dependencies
- Updated Fabric Loom to v1.17.3
- Updated Hytale server version dependency
- Updated SkinsRestorer API to v15.12.2
## New Contributors
- @Ghost-t1 made their first contribution in https://github.com/Flectone/FlectonePulse/pull/360
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.10.0...v1.10.1)
- Added vanilla command removal functionality (bukkit)
- Added import functionality to whitelist (whitelist)
- Added player login and connection event handling for Fabric
## 🔧 Refactors
- !!! Separated FPlayer and settings, ignores, colors into SocialService (BREAKING CHANGE API: FPlayer no longer contains these fields) !!!
- Added proxy message listeners for all modules (api)
- Moved proxy registry enable call to correct position
- Streamlined cache invalidation process
- Removed player name parameter from pre-login processing
- Moved playtime repository from social to dedicated repository
- Removed settings loading from player queries (database)
- Separated FPlayerService into PlaytimeService and ModerationService, added new cache for SocialRepository
- Restructured listeners
## 🐞 Bug Fixes
- Replaced direct IntegrationModule dependency with provider injection
- Removed explicit field selection from database queries
- Removed default AFK from message ignore (afk)
- Checked AFK suffix before removal and fixed double message (afk)
- Replaced login session tracking with online status validation [#359](https://github.com/Flectone/FlectonePulse/issues/359)
- Fixed InteractiveChat raw tags in Discord [#360](https://github.com/Flectone/FlectonePulse/pull/360)
- Fixed player head validation logic: check playername first, then UUID and textures (object) [#362](https://github.com/Flectone/FlectonePulse/pull/362)
- Handled additional database migration error cases
- Bound component extractor (platform)
- Excluded console from range filtering (filter)
- Delayed player online invalidation on proxy (proxy)
## 📦 Dependencies
- Updated Fabric Loom to v1.17.3
- Updated Hytale server version dependency
- Updated SkinsRestorer API to v15.12.2
## New Contributors
- @Ghost-t1 made their first contribution in https://github.com/Flectone/FlectonePulse/pull/360
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.10.0...v1.10.1)
## ✨ Features
- Added serverlink module (serverlink)
- Added whitelist command
- Added support for formatting books, anvil names, and sign events with components for Paper (book, anvil, sign)
- Added reasons field for unban, unmute, and unwarn (moderation)
- Added server UUID configuration and server-side filtering for bans, mutes, and warns (ban, mute, warn)
- Added subcommand configuration (command)
- Added extended maintenance command capabilities: start/stop, support for time and reason (maintenance)
- Added asynchronous texture loading with MineSkin integration (texture)
- Added integration with MiniPlaceholders API for Fabric (miniplaceholders)
- Added console name formatting (names)
- Added radius parsing for clearchat and emit commands (clearchat, emit)
- Added always_send_silent_packet option
- Added detection of Bedrock players via UUID version check
- Added additional integration placeholders (COMMAND_MAINTENANCE_FALSE/TRUE, MESSAGE_AFK_FALSE/TRUE, etc.)
- Added Type enum with INIT and READY values in EnableEvent (api)
- Added controls for fake join/leave messages (supervanish)
- Added option to cancel default death screen (vanilla)
- Added death messages for magma cube (minecraft)
- Added radius configuration for playerlistname (playerlistname)
- Added Mojang skins loading option (skinsrestorer)
- Added avatar and body skin support for Hytale (hytale)
- Added player indexing system for fast lookup by UUID, name, and IP (player)
- Added violation tracking system with caps, flood, and profanity limits (moderation)
- Added mode selection support for newbie message triggers (newbie)
## 🔧 Refactors
- Simplified task scheduling API, runRegion used only when necessary (scheduler)
- Enabled server-side filtering by default (moderation)
- Updated moderation system to properly handle unmoderation events
- Replaced Collections with immutable collection factory methods
- Replaced deprecated Optional-based formatting with Paper component serialization
- MessageContext migrated to builder pattern
- Split PreLoginEvent listeners for Bukkit and Paper compatibility (bukkit)
- Replaced direct component serialization methods with unified ComponentSerializer
- Optimized bubble message splitting logic (bubble)
- Added ComponentDecorator for consistent text formatting (platform)
- Set default has_shadow: true and see_through: false for bubble messages (bubble)
- Moved scoreboard module to correct package (scoreboard)
- Moved DAO implementations to database-specific interfaces (database)
- Replaced individual moderation command implementations with centralized ModerationListSender (moderation)
- Extracted UUID parsing logic into dedicated parser class
- Reworked message dispatcher with improved API and documentation (api)
- Changed moderation field type from int to string (moderation)
- Separated Twitch, Telegram, and Discord integration classes
- Optimized bubble message queue management with minimum display time (bubble)
- Animation time applied to all modern bubble messages (bubble)
- Updated Discord client creation with presence handling (discord)
- Performed general refactoring and code optimization
## 🐞 Bug Fixes
- Fixed login session management and player collection operations in async tasks (minecraft)
- Implemented persist method for integration modules (placeholderapi)
- Updated equals and hashCode methods for FPlayer entity
- Players are always kicked to the proxy via the server (maintenance)
- Added check for empty full word before calling isIgnored (swear)
- Fixed double command suggestions (hytale)
- Player data always saved after login event
- Use event player instead of original fPlayer when processing PreLoginEvent
- Fixed webhook creator ID comparison (discord)
- Optimized message sending with async execution (greeting)
- Replaced StringUtils.chop with Strings.CS.removeEnd, fixes [#341](https://github.com/Flectone/FlectonePulse/issues/341)
- Generate random UUID for unknown players in DAO methods (database)
- Added console player handling and caching logic (player)
- Prevented sidebar from being sent if player disabled the setting (sidebar)
- Added boundary check to prevent array out of bounds error (bubble)
- Added zero ID error messages for unban, unmute, and unwarn (moderation)
- Fixed AFK delay condition during migration
- Use different player instead of sender for proxy sending (proxy)
- Handled chest atlas naming mismatch (sprite)
- Fixed initial maxNumber value and default key skip (condition)
- Resolved proxy player online status synchronization issue
- Fixed simple message sending method in ProxySender (proxy)
- Updated version compatibility warnings (minecraft)
## 📦 Dependencies
- Updated SQLite JDBC to v3.53.2.0
- Updated BuildConfig plugin to v6.0.10
- Updated Hytale server version to 0.5.3
- Updated PacketEvents Spigot to v2.12.2, transitioned to own Maven repository
- Updated Netty Buffer to v4.2.15.Final
- Updated Fabric Loader to v0.19.3 and Fabric Loom to v1.16.3
- Updated TelegramBots to v10
- Updated Vanish to v1.6.9+26.1.2
- Updated MineSkin Java Client to v3.2.6
- Updated Jackson YAML to v3.1.4
- Updated Lettuce Core to v7.6.0.RELEASE
- Updated Shadow plugin to v9.4.2
- Updated Gradle to v9.5.1
- Updated Log4j Core to v2.26.0
- Updated PostgreSQL to v42.7.11
- Updated Triton API to v4.0.1
- Updated JDBI Core to v3.53.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.9.3...v1.10.0)
## ✨ Features
- Added serverlink module (serverlink)
- Added whitelist command
- Added support for formatting books, anvil names, and sign events with components for Paper (book, anvil, sign)
- Added reasons field for unban, unmute, and unwarn (moderation)
- Added server UUID configuration and server-side filtering for bans, mutes, and warns (ban, mute, warn)
- Added subcommand configuration (command)
- Added extended maintenance command capabilities: start/stop, support for time and reason (maintenance)
- Added asynchronous texture loading with MineSkin integration (texture)
- Added integration with MiniPlaceholders API for Fabric (miniplaceholders)
- Added console name formatting (names)
- Added radius parsing for clearchat and emit commands (clearchat, emit)
- Added always_send_silent_packet option
- Added detection of Bedrock players via UUID version check
- Added additional integration placeholders (COMMAND_MAINTENANCE_FALSE/TRUE, MESSAGE_AFK_FALSE/TRUE, etc.)
- Added Type enum with INIT and READY values in EnableEvent (api)
- Added controls for fake join/leave messages (supervanish)
- Added option to cancel default death screen (vanilla)
- Added death messages for magma cube (minecraft)
- Added radius configuration for playerlistname (playerlistname)
- Added Mojang skins loading option (skinsrestorer)
- Added avatar and body skin support for Hytale (hytale)
- Added player indexing system for fast lookup by UUID, name, and IP (player)
- Added violation tracking system with caps, flood, and profanity limits (moderation)
- Added mode selection support for newbie message triggers (newbie)
## 🔧 Refactors
- Simplified task scheduling API, runRegion used only when necessary (scheduler)
- Enabled server-side filtering by default (moderation)
- Updated moderation system to properly handle unmoderation events
- Replaced Collections with immutable collection factory methods
- Replaced deprecated Optional-based formatting with Paper component serialization
- MessageContext migrated to builder pattern
- Split PreLoginEvent listeners for Bukkit and Paper compatibility (bukkit)
- Replaced direct component serialization methods with unified ComponentSerializer
- Optimized bubble message splitting logic (bubble)
- Added ComponentDecorator for consistent text formatting (platform)
- Set default has_shadow: true and see_through: false for bubble messages (bubble)
- Moved scoreboard module to correct package (scoreboard)
- Moved DAO implementations to database-specific interfaces (database)
- Replaced individual moderation command implementations with centralized ModerationListSender (moderation)
- Extracted UUID parsing logic into dedicated parser class
- Reworked message dispatcher with improved API and documentation (api)
- Changed moderation field type from int to string (moderation)
- Separated Twitch, Telegram, and Discord integration classes
- Optimized bubble message queue management with minimum display time (bubble)
- Animation time applied to all modern bubble messages (bubble)
- Updated Discord client creation with presence handling (discord)
- Performed general refactoring and code optimization
## 🐞 Bug Fixes
- Fixed login session management and player collection operations in async tasks (minecraft)
- Implemented persist method for integration modules (placeholderapi)
- Updated equals and hashCode methods for FPlayer entity
- Players are always kicked to the proxy via the server (maintenance)
- Added check for empty full word before calling isIgnored (swear)
- Fixed double command suggestions (hytale)
- Player data always saved after login event
- Use event player instead of original fPlayer when processing PreLoginEvent
- Fixed webhook creator ID comparison (discord)
- Optimized message sending with async execution (greeting)
- Replaced StringUtils.chop with Strings.CS.removeEnd, fixes [#341](https://github.com/Flectone/FlectonePulse/issues/341)
- Generate random UUID for unknown players in DAO methods (database)
- Added console player handling and caching logic (player)
- Prevented sidebar from being sent if player disabled the setting (sidebar)
- Added boundary check to prevent array out of bounds error (bubble)
- Added zero ID error messages for unban, unmute, and unwarn (moderation)
- Fixed AFK delay condition during migration
- Use different player instead of sender for proxy sending (proxy)
- Handled chest atlas naming mismatch (sprite)
- Fixed initial maxNumber value and default key skip (condition)
- Resolved proxy player online status synchronization issue
- Fixed simple message sending method in ProxySender (proxy)
- Updated version compatibility warnings (minecraft)
## 📦 Dependencies
- Updated SQLite JDBC to v3.53.2.0
- Updated BuildConfig plugin to v6.0.10
- Updated Hytale server version to 0.5.3
- Updated PacketEvents Spigot to v2.12.2, transitioned to own Maven repository
- Updated Netty Buffer to v4.2.15.Final
- Updated Fabric Loader to v0.19.3 and Fabric Loom to v1.16.3
- Updated TelegramBots to v10
- Updated Vanish to v1.6.9+26.1.2
- Updated MineSkin Java Client to v3.2.6
- Updated Jackson YAML to v3.1.4
- Updated Lettuce Core to v7.6.0.RELEASE
- Updated Shadow plugin to v9.4.2
- Updated Gradle to v9.5.1
- Updated Log4j Core to v2.26.0
- Updated PostgreSQL to v42.7.11
- Updated Triton API to v4.0.1
- Updated JDBI Core to v3.53.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.9.3...v1.10.0)
- Added disallowed input pattern filtering for bubble messages (bubble)
## 🔧 Refactors
- Renamed eventMessage parameter to rawString for clarity (chat)
- Changed AFK delay from seconds to ticks (afk)
- Updated AFK delay value from 3000 to 36000 ticks (afk)
- Separated TOTAL and TOTAL_DYNAMIC time types (online)
- Replaced hardcoded library relocation patterns with BuildConfig constant
- Streamlined library resolution with dynamic artifact handling
- Moved LoginStatus to shared constant utility
- Simplified chat type lookup (proxy)
- Replaced visibility filter method with direct stream filtering (playerlistname)
- Optimized HTTP client configuration for Discord and Telegram integrations
## 🐞 Bug Fixes
- Fixed Fabric SimpleVoice chat integration class name
- Added Velocity login state tracking for player connection management
- Added null check for sound object in sound players
- Added system skin handling with proxy cache updates (skinsrestorer)
- Added fallback mechanism using MojangSkinDataResult when primary skin lookup fails (skinsrestorer)
- Fixed signature inclusion in profile property (object)
- Changed online players to platform players in cleanup process
- Fixed object module to always use local textures when MineSkin is not hooked
- Fixed object client version check
- Fixed LuckPerms user loading when player is not unknown
- Fixed tick multiplier usage
## 📦 Dependencies
- Downgraded Adventure API dependency to 4.x (temp)
- Updated cloud dependencies to org.incendo namespace
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.9.2...v1.9.3)
- Added disallowed input pattern filtering for bubble messages (bubble)
## 🔧 Refactors
- Renamed eventMessage parameter to rawString for clarity (chat)
- Changed AFK delay from seconds to ticks (afk)
- Updated AFK delay value from 3000 to 36000 ticks (afk)
- Separated TOTAL and TOTAL_DYNAMIC time types (online)
- Replaced hardcoded library relocation patterns with BuildConfig constant
- Streamlined library resolution with dynamic artifact handling
- Moved LoginStatus to shared constant utility
- Simplified chat type lookup (proxy)
- Replaced visibility filter method with direct stream filtering (playerlistname)
- Optimized HTTP client configuration for Discord and Telegram integrations
## 🐞 Bug Fixes
- Fixed Fabric SimpleVoice chat integration class name
- Added Velocity login state tracking for player connection management
- Added null check for sound object in sound players
- Added system skin handling with proxy cache updates (skinsrestorer)
- Added fallback mechanism using MojangSkinDataResult when primary skin lookup fails (skinsrestorer)
- Fixed signature inclusion in profile property (object)
- Changed online players to platform players in cleanup process
- Fixed object module to always use local textures when MineSkin is not hooked
- Fixed object client version check
- Fixed LuckPerms user loading when player is not unknown
- Fixed tick multiplier usage
## 📦 Dependencies
- Downgraded Adventure API dependency to 4.x (temp)
- Updated cloud dependencies to org.incendo namespace
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.9.2...v1.9.3)
- Added toponline player placeholder (toponline)
- Added online time placeholders and integration support (online)
- Added AFK playtime tracking disabling option (#322)
- Added warning method overload for object parameter (logging)
- Added quit messages sent to all platform players on disable (quit)
## 🔧 Refactors
- Renamed classes with platform prefix
- Moved integration message handling to async tasks
- Updated player join/quit event handling with cancellation support (api)
## 🐞 Bug Fixes
- Fixed AFK disable event handling (afk)
- Fixed AFK player quit handler to return modified event with updated player data
- Fixed Minecraft event cancellation to only occur when messageReceiveEvent is cancelled
- Fixed chatcolor player parser to support offline players
- Fixed player loading order (load after modules)
## 📦 Dependencies
- Updated Lombok to v1.18.46
- Updated Lombok plugin to v9.4.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.9.1...v1.9.2)
- Added toponline player placeholder (toponline)
- Added online time placeholders and integration support (online)
- Added AFK playtime tracking disabling option (#322)
- Added warning method overload for object parameter (logging)
- Added quit messages sent to all platform players on disable (quit)
## 🔧 Refactors
- Renamed classes with platform prefix
- Moved integration message handling to async tasks
- Updated player join/quit event handling with cancellation support (api)
## 🐞 Bug Fixes
- Fixed AFK disable event handling (afk)
- Fixed AFK player quit handler to return modified event with updated player data
- Fixed Minecraft event cancellation to only occur when messageReceiveEvent is cancelled
- Fixed chatcolor player parser to support offline players
- Fixed player loading order (load after modules)
## 📦 Dependencies
- Updated Lombok to v1.18.46
- Updated Lombok plugin to v9.4.0
[Documentation](https://flectone.net/pulse/docs/changelog)
[Full Changelog](https://github.com/Flectone/FlectonePulse/compare/v1.9.1...v1.9.2)












































