Skip to content

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>"
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.
diamond:
display-name: "<aqua>Diamond"
material: DIAMOND
price: 250.0
stock: -1
per-player-limit: -1

Optionally 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: 1

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: 1

If 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.

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.