Highlights ✨
- Config-driven command aliases –
/lmb
now syncs its aliases fromsettings.command-aliases.lmb
, falling back to legacy configs and updating live on/lmbreload
so clickable prompts always point at the primary alias.
Configuration & UX 🛠️
- Default
config.yml
bumped 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_items
to add acustom_model_data
column 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
CLEAR
to 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.slots
to 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
/lmbreload
to 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 mailings
admin 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 send
to 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
allonline
targets 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-cleanup
toggle for status pruning. - Mail records now capture optional schedule and expiry timestamps, defaulting expiration from
settings.default-expire-days
when unspecified. - Command attachments persist as structured "command items" (YAML
command-items
section or SQLitemail_command_items
table) 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.yml
is 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_status
tables andmailing-status.yml
file on startup. - Reloading via
/lmbreload
refreshes 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
/lmbmigrate
command to safely move mail data between YAML and SQLite storage backends. - Added new
storage.yml
configuration 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.yml
file. - 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
/lmbmigrate
command 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
enabled
toggles across the mailbox, sent-mail, mail-view, and composer GUIs so you can hide any built-in control without custom code. - Decorations now accept
lore
for hover text and acommands
list 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.yml
and 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