items.yml
plugins/dRotatingShop/items.yml is the single source of truth for the item pool. On the first start it is auto-seeded from the bundled 1.21 price list; after that itβs yours β grow it with /dshop additem or by hand. After any manual edit, run /dshop reload.
Every item is a block under items:, keyed by a unique id:
items: <id>: display-name: "<MiniMessage name>" price: <number> stock: <int> # -1 = unlimited per-player-limit: <int> # -1 = unlimited (resets every rotation) # then EITHER a material β¦ OR a serialized item: material: <MATERIAL> nbt-base64: "<serialized ItemStack>"Common fields
Section titled βCommon fieldsβ| Field | Required | Description |
|---|---|---|
display-name |
yes | MiniMessage name shown on the GUI icon. |
price |
yes | Cost per single item (Vault currency); the buy menu multiplies by the quantity. |
stock |
yes | Global stock for the rotation; -1 = unlimited. See Stock & Limits. |
per-player-limit |
yes | Buys per player per rotation; -1 = unlimited. |
Item source β pick one
Section titled βItem source β pick oneβVanilla material
Section titled βVanilla materialβdiamond: display-name: "<aqua>Diamond" material: DIAMOND price: 250.0 stock: -1 per-player-limit: -1Optionally add enchantments (keys are vanilla enchantment ids, lower-case):
sharp_sword: display-name: "<aqua>Sharpened Sword" material: DIAMOND_SWORD enchantments: sharpness: 5 unbreaking: 3 price: 2500.0 stock: 50 per-player-limit: 1Custom nbt-base64
Section titled βCustom nbt-base64βGenerated by /dshop additem β a full serialized ItemStack, so custom/NBT items from any plugin work:
legendary_axe: display-name: "<light_purple>Legendary Axe" nbt-base64: "rO0ABXNyAC9vcmcuYnVra2l0..." price: 15000.0 stock: 3 per-player-limit: 1If a block has both, nbt-base64 wins. An unreadable nbt-base64 (wrong server version) or unknown material is skipped with a console warning β the rest of the pool still loads.
Editing lifecycle
Section titled βEditing lifecycleβ| Action | How |
|---|---|
| Load the default 1.21 catalogue | /dshop seed (or it happens automatically on a fresh first start). |
| Add a vanilla item | Write a material block, then /dshop reload. |
| Add a custom item | Hold it, /dshop additem <price> <stock> [limit]. |
| Change price / stock / limit | Edit the field, /dshop reload β applies next rotation. |
| Remove an item | Delete the block (or /dshop removeitem <id>), then /dshop reload. |
/dshop reload rebuilds the pool from disk and never touches data.yml, so live rotation state survives.