Skip to content

Releases

Update v1.0.5

Choose a tag to compare

@malusic23354 malusic23354 released this 03 Nov 19:25

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 top entries 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 BountyStorage interface and an unused ApiStatus import.
  • 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

Choose a tag to compare

@malusic23354 malusic23354 released this 01 Nov 19:29

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 into paper-plugin.yml.
  • About a third less code overall (1377 to 917 Kotlin lines); BountyCommand, BetDialog, SqlStorage, MessageHandler and BountyPlugin were rewritten more compactly.

Removed

  • BountyStorage interface (merged into SqlStorage).
  • Unused set-bounty dialog and unused messages.
  • Redundant Vault check on enable, since paper-plugin.yml already requires Vault.

Update v1.0.3

Choose a tag to compare

@malusic23354 malusic23354 released this 01 Nov 18:51

Changelog

1.0.3

Added

  • Bounty menu: /bounty opens 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 bet command when the Dialog API is unavailable.
  • Live menu refresh when bounties are added, changed or claimed.
  • /bounty info shows author, version and API version.
  • bounty.gui, bounty.info and bounty.check permissions registered.
  • gui section in config.yml.
  • SQL storage: SQLite by default, MySQL optional, with a configurable table prefix.
  • Missing keys are added to an existing messages.yml automatically.

Changed

  • Now a Paper plugin (paper-plugin.yml) using Brigadier commands with typed arguments and suggestions.
  • Bounties moved from bounties.json to a SQL database.
  • Vault is required through a dedicated economy service, with better payment failure handling.
  • /bounty reload also reloads config.yml.
  • Leaderboard cache is rebuilt only when bounties change, with stable ordering for equal amounts.
  • Bounty data is thread-safe.
  • Code reorganised into handlers/ and gui/.
  • Gradle wrapper added and build scripts updated.
  • Supports Paper 1.21.11 through 26.x.

Removed

  • Legacy plugin.yml and the old command handler.
  • JSON storage.

Upgrade notes

  • Existing bounties.json data is not imported automatically.
  • Add the new gui section to an existing config.yml, or delete the file to regenerate it.

Update v1.0.2

Choose a tag to compare

@malusic23354 malusic23354 released this 07 Oct 18:21
2e9a34d
  • Added /bounty top

Update v1.0.1

Choose a tag to compare

@malusic23354 malusic23354 released this 07 Oct 18:03
7c79d03
  • 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

Choose a tag to compare

@malusic23354 malusic23354 released this 05 Oct 18:11
4f07fb8

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