Repository navigation
Releases
Releases · malusic23354/BountyLite
Update v1.0.5
Changelog
1.0.5
Added
- Colored startup banner showing version, author, storage backend and active bounty count.
- Colored Vault and PlaceholderAPI hook status, including failure details and a retry when no economy provider is registered yet.
- Minimum and maximum bet limits, plus confirmation for large bets.
- Per-player bet cooldown.
- Bet expiry with optional refunds.
- Victim notifications when a bounty is placed on them (toggleable).
- Anti-abuse option that blocks claims when the killer and victim share an IP.
- On-screen title and sound when a bounty is claimed (toggleable).
- Bounty menu search with a dialog input, clear-search button and filtered title.
/bounty search <query>command that opens the menu already filtered.bounty topentries are clickable, and previous/next page links work from chat.- Tab completion suggests online player names only.
- Optional PlaceholderAPI expansion for top bounties, top bettors, player bounties and the active total.
Changed
- Version now lives in
paper-plugin.yml; removed the unused Gradle resource expansion. - Removed the leftover
BountyStorageinterface and an unusedApiStatusimport. - Modrinth releases now declare VaultUnlocked as the required Vault-compatible dependency and PlaceholderAPI as optional. VaultUnlocked is a drop-in fork that still registers as
Vault, so original Vault remains supported. - Internal cleanup: shared SQL write helper, coalesced top-bettor refreshes, batched expiry, cached totals/message prefix, bounded bet-cooldown cache, and merged small source files.
Fixed
- The bet-expiry task is now cancelled before storage shuts down.
- Database retries only repeat connection failures, so constraint or SQL errors cannot be written twice.
- Clicking a GUI slot with no action no longer schedules a task.
Performance
- Bounty changes use one background write path, and burst changes trigger a single top-bettor refresh instead of one per change.
- Expiry is processed as one batch, with one cache invalidation and one refresh.
- The GUI uses an array-backed slot map and reuses its filler component, reducing short-lived allocations.
Update v1.0.4
Changelog
1.0.4
Fixed
- Database writes no longer run on the main thread, which removes lag spikes. Bounties update in memory instantly and save in the background, in order, and are flushed on shutdown.
- Betting adds to a bounty in one step, so two bets cannot overwrite each other.
- Setting a bounty to 0 now removes it instead of leaving a dead row in the database.
- Storage failures are logged instead of being silently lost.
- The cancel button on dialogs now uses the same command mechanism as the confirm button.
Changed
- Subcommands you lack permission for are hidden from tab completion.
- Bet amounts below 0.01 are rejected by the command itself.
- Version is defined once, in
build.gradle.kts, and filled intopaper-plugin.yml. - About a third less code overall (1377 to 917 Kotlin lines);
BountyCommand,BetDialog,SqlStorage,MessageHandlerandBountyPluginwere rewritten more compactly.
Removed
BountyStorageinterface (merged intoSqlStorage).- Unused set-bounty dialog and unused messages.
- Redundant Vault check on enable, since
paper-plugin.ymlalready requires Vault.
Update v1.0.3
Changelog
1.0.3
Added
- Bounty menu:
/bountyopens a chest menu of all bounties, sorted highest to lowest. - Menu size adapts to the number of bounties and paginates past
gui.max-rows. - New-bounty button at the bottom center, with previous/next page buttons.
- Bet dialog when clicking a bounty, and a new-bounty dialog.
- Chat fallback with a clickable, auto-filled
/bounty betcommand when the Dialog API is unavailable. - Live menu refresh when bounties are added, changed or claimed.
/bounty infoshows author, version and API version.bounty.gui,bounty.infoandbounty.checkpermissions registered.guisection inconfig.yml.- SQL storage: SQLite by default, MySQL optional, with a configurable table prefix.
- Missing keys are added to an existing
messages.ymlautomatically.
Changed
- Now a Paper plugin (
paper-plugin.yml) using Brigadier commands with typed arguments and suggestions. - Bounties moved from
bounties.jsonto a SQL database. - Vault is required through a dedicated economy service, with better payment failure handling.
/bounty reloadalso reloadsconfig.yml.- Leaderboard cache is rebuilt only when bounties change, with stable ordering for equal amounts.
- Bounty data is thread-safe.
- Code reorganised into
handlers/andgui/. - Gradle wrapper added and build scripts updated.
- Supports Paper 1.21.11 through 26.x.
Removed
- Legacy
plugin.ymland the old command handler. - JSON storage.
Upgrade notes
- Existing
bounties.jsondata is not imported automatically. - Add the new
guisection to an existingconfig.yml, or delete the file to regenerate it.
Update v1.0.2
Update v1.0.1
- Added new death bonus claim function
- Added new VaultAPI hook
- Fixed a bug where the plugin would crash if the user save files is corrupted or null
- Added new MessageHandler system to create new lines in your yml file when you update the plugin
- Fixed various other bugs.
Release 1.0
Bounty Plugin
A simple Paper Minecraft bounty plugin written in Kotlin.
Features
- Set player bounties
- Add to existing bounties
- Remove bounties
- Check player bounties
- Customizable
messages.yml - MiniMessage support with HEX colors and gradients
- Reload messages without restarting
- Permission support
- Tab completion
Commands
/bounty check <player>
/bounty set <player> <amount>
/bounty bet <player> <amount>
/bounty remove <player>
/bounty reload
Permissions
bounty.set
bounty.remove
bounty.reload