Highlights ✨
- Config-driven command aliases –
/lmbnow syncs its aliases fromsettings.command-aliases.lmb, falling back to legacy configs and updating live on/lmbreloadso clickable prompts always point at the primary alias.
Configuration & UX 🛠️
- Default
config.ymlbumped to version 1.7 with expanded comments, optional custom-model-data hooks, and unified placeholder handling across messages and GUI elements.
Dependency Notes 📦
- Requires YskLib 1.6.7+ for the updated MessageManager and command alias utilities.
This is a light maintenance release that swaps LamMailBox onto the shared YskLib messaging helper and tidies a few internal workflows. Gameplay, commands, and configs behave exactly as before.
Updates ✨
- MessageManager integration (internal) – messages are now cached at startup via YskLib, trimming a little overhead when the plugin sends frequent notifications.
- Dual placeholder support everywhere – both
{placeholder}and legacy%placeholder%formats are accepted across commands, GUIs, and config entries. - Small responsiveness improvements from polishing GUI click handling and item rendering paths.
Fixes 🛠️
- Strengthened error handling in GUI click events to prevent potential edge-case issues
- Improved code maintainability to enable faster bug fixes in future releases
Changes 🔄
- Config version incremented to 1.7 to reflect the placeholder helper swap (existing
%placeholder%lines remain valid—no edits required). - YskLib dependency bumped to 1.6.4+ so the shared MessageManager feature is available.
- Internal GUI helpers were grouped into focused classes for navigation, pagination, styling, and command item composition to keep future maintenance simple.
Updates ✨
- Added pagination to mailbox and sent mail GUIs, keeping each viewer's page state and exposing configurable previous/next buttons plus a page indicator.
- Introduced custom model data support across GUI decorations, command items, and mailings so resource-pack overrides display consistently in previews and persisted mail.
- Expanded composer and review screens with back buttons and editor shortcuts, making it easier to jump between the mailbox, sent list, and item editors while drafting mail.
Fixes 🛠️
- Apply configuration-driven item meta without overwriting existing lore or custom model data, preserving detailed previews for stored mail, decorations, and command bundles.
- Restored legacy command items by falling back to the generic action key when specialized metadata is missing, keeping older configurations clickable.
Changes 🔄
- Raised the default configuration schema to 1.6 and added pagination/back-button/custom-model entries throughout
config.yml, alongside matching guidance inmailings.yml. - SQLite storage now migrates
mail_command_itemsto add acustom_model_datacolumn and persists the optional value parallel to YAML command item definitions.
Notes 📌
- Use the command item editor's new custom model button to set a numeric model id or type
CLEARto reset, and update page button slots/materials to fit your layout before deployment. %current%and%total%placeholders populate the pagination indicator text; translate the new config messages/titles if you localize player-facing strings.- If you upgraded from v1.5 or earlier, edit
gui.main.items.mail-display.slotsto free the bottom row (slots 37–44) so the next-page button has room; otherwise pagination controls stay hidden. - Back up your data before upgrading so the automatic column migration and config updater can run safely, then
/lmbreloadto refresh GUI layouts after adjusting defaults.
Updates ✨
- Introduced automated mailings defined in
mailings.yml, supporting cron-based schedules, first-join delays, permission gates, and Folia-safe delivery with automatic player notifications. - Added the
/lmb mailingsadmin command with live status reporting (last/next run previews, run counters) backed by YAML and SQLite repositories. - Expanded the mail composer: schedule or expire deliveries via the GUI clock, build reusable console command bundles with the new command-item editor, and preview current receivers/messages directly in the interface.
- Upgraded
/lmb sendto accept inline sections (| [commands] | schedule:YYYY:MM:DD:HH:mm | expire:YYYY:MM:DD:HH:mm) so console and admins can queue timed or command-driven mail in one call.
Fixes 🛠️
- Blocked players from mailing themselves and added capacity checks before accepting new receivers to prevent overfilled mailboxes.
- Restricted bulk recipient and command attachment actions to admins, ensuring permission checks mirror the GUI workflow.
- Added sent-mail deletion confirmation and safeguarded composer/item GUI closures so items return to players instead of being lost.
- Normalized
allonlinetargets to snapshot current online players before storage, ensuring scheduled deliveries reach the correct recipients.
Changes 🔄
- Bumped configuration schema to 1.4 with expanded messages, titles, and GUI metadata plus the new
mailings.auto-cleanuptoggle for status pruning. - Mail records now capture optional schedule and expiry timestamps, defaulting expiration from
settings.default-expire-dayswhen unspecified. - Command attachments persist as structured "command items" (YAML
command-itemssection or SQLitemail_command_itemstable) while retaining legacy command lists for backward compatibility.
Notes 📌
- Cron expressions follow the UNIX format (
m h dom mon dow); disable any definition by settingenabled: false. mailings.ymlis generated on first run—review default examples before enabling automation in production.- Back up your YAML/SQLite data before upgrading; the plugin will auto-create the new
mail_command_items/mailing_statustables andmailing-status.ymlfile on startup. - Reloading via
/lmbreloadrefreshes mailing definitions, runs auto-cleanup, and reports active IDs for quick verification.
Updates ✨
- Added SQLite storage backend as an alternative to YAML for better performance on large servers.
- Introduced
/lmbmigratecommand to safely move mail data between YAML and SQLite storage backends. - Added new
storage.ymlconfiguration file for backend selection.
Fixes 🛠️
- Improved mail querying performance and scalability for servers with large mail volumes.
- Enhanced error handling and validation throughout the storage system.
Changes 🔄
- Redesigned storage layer with repository pattern for cleaner code architecture and future expandability.
- Enhanced command alias system with support for multiple aliases from configuration.
- Centralized mail logic to reduce code duplication and improve maintainability.
Notes 📌
- Existing YAML installations continue working unchanged—SQLite is opt-in via the new
storage.ymlfile. - SQLite is recommended for servers with high mail volumes (1000+ mails) due to better query performance and scalability.
- Migration between backends requires empty target storage to prevent data loss—always backup before switching.
- All existing GUI configurations and features work identically with both storage backends.
- Use the
/lmbmigratecommand to transfer data between storage types—automatic import has been removed for safety.
Storage Configuration Example
# storage.yml - New configuration file
storage:
type: sqlite # or yaml
Migration Command Usage
/lmbmigrate yaml sqlite # Move from YAML to SQLite
/lmbmigrate sqlite yaml # Move from SQLite to YAML
Updates ✨
- Added per-slot
enabledtoggles across the mailbox, sent-mail, mail-view, and composer GUIs so you can hide any built-in control without custom code. - Decorations now accept
lorefor hover text and acommandslist that executes console actions with%player%/%uuid%placeholders. - Inline comments and README guidance explain how to wire the new toggles and command hooks directly from
config.yml.
Notes 📌
- Existing installs keep their behaviour—new flags default to the previous values until you opt in.
- Place any console actions under the relevant decoration block in
config.ymland use%player%/%uuid%where necessary.
Config Example
gui:
main:
decoration:
trigger-button: # Example of a decoration that runs commands (can add as many as you like)
enabled: true # Set to false to hide this button
material: LIGHT_WEIGHTED_PRESSURE_PLATE
name: '&bTrigger Reward'
lore:
- '&7Runs a console command on click.'
slots: [22]
commands: # Commands to run when clicked (as console)
- 'lp user %player% parent add reward'
- 'say %player% (%uuid%) just triggered the reward button!'
Updates ✨
- Added a dismiss button for text-only mails so players can clear their inbox without collecting rewards.
- Compose GUI now hides item, command, and schedule controls for players lacking the required permissions, keeping the experience tidy for regular users.
Fixes 🛠️
- Resolved a crash that occurred when opening the Sent Mail view with an empty mailbox and no configured placeholder item.
- Improved inbox behaviour so marking a mail as read shows the correct chat feedback even when no items or commands are attached.
Changes 🔄
- Disabled slots in the compose screen now reuse the existing glass filler, giving a consistent look while indicating unavailable actions.
Initial Version



