PerkMenu

Gameplay v1.0.0

Paginated chat-based perk browser that reads ownership from permissions, with prices, descriptions, and buy links.

perks store utility
Minecraft
1.21+
Server
Paper, Purpur, Spigot
Java
21+

PerkMenu

PerkMenu is a paginated chat-based perk browser. Players type /perks and see every perk on the server, along with which ones they own, what they cost, and a click-to-buy link for anything they don’t have yet.

Ownership is determined entirely by permissions. A perk is “owned” when the player holds every permission node the perk declares. There is no store API, no economy plugin, no database. If the permissions are there, the perk is there.


Features

  • Paginated chat menu. No inventory GUI, no chest, no resource pack.
  • Ownership derived from permissions configured per perk.
  • Click an unowned perk to open its store URL in the browser.
  • Click an owned perk to see detailed info.
  • Hover any perk to see its description.
  • Summary line shows owned count, total count, and total listed value.
  • Admin command to inspect another player’s perks.
  • Everything configurable in config.yml.

Commands

Command Description Permission
/perks / /perk Browse all perks, page 1 perkmenu.use
/perks <page> Jump to a specific page perkmenu.use
/perks owned [page] Only perks you own perkmenu.use
/perks available [page] Only perks you don’t own perkmenu.use
/perks info <perk> Detailed info about one perk perkmenu.use
/perks check <player> Check another player’s perk summary perkmenu.use + perkmenu.check
/perks reload Reload configuration perkmenu.use + perkmenu.reload
/perks help Show help perkmenu.use

Permissions

Permission Description Default
perkmenu.* All PerkMenu permissions op
perkmenu.use Allows using /perks true
perkmenu.check Allows checking another player’s perks op
perkmenu.reload Allows reloading the configuration op

Configuration

Top-level

  • config-version: schema version for migration.
  • perks_per_page: how many perks to show per page. Default: 6.
  • buy_url_template: URL template used for buy links. {package_id} is replaced with the perk’s own package_id field.
  • show_owned_in_list: whether the default /perks listing includes perks the player already owns. Default: true.

Perks

Each entry under perks: is one perk. The key is the perk’s ID (used by /perks info <id> and in tab completion). Each perk supports:

  • name: display name.
  • category: free-form grouping shown in /perks info.
  • price: listed price in your store’s currency.
  • package_id: used to build the buy URL.
  • description: list of lines shown on hover and in /perks info.
  • permissions: list of permission nodes. A player owns this perk when they hold every node in this list.

Notes

  • Ownership is a permissions check. If a player buys a perk but the permissions are delayed on your permissions plugin’s side, they won’t see the perk as owned until those nodes land.
  • Wildcards like cmi.colors.* are resolved by your permissions plugin, not by PerkMenu. If your setup doesn’t expand wildcards, list the exact nodes instead.
  • “Total listed value” is the sum of the listed prices of every perk the player owns. It is not necessarily what they paid, and it does not reflect sales, gifts, or price changes over time.
  • Reload does not rewrite config.yml. Comments and formatting are preserved.

Dependencies

Bundles Adventure (adventure-platform-bukkit) inside its JAR, relocated to com.chalwk.libs.adventure. No external dependencies.


Changelog

1.0.0

  • Initial release.