File Structure
All shop files live in plugins/EssentialsC/shop/. The folder is created automatically on first run.
plugins/EssentialsC/shop/
├── main.yml # Category definitions & main menu settings
├── farming.yml # Example category file
├── mining.yml
├── blocks.yml
├── combat.yml
├── tools.yml
├── redstone.yml
├── spawners.yml
├── enchanted_books.yml
└── misc.yml
Category files are auto-discovered. Any .yml file in the shop folder (except main.yml) becomes a category.
main.yml
Defines the main menu layout and category references. Categories listed here get custom slots; files not listed are auto-placed.
title: "Server Shop"
size: 54
fill-empty: true
fill-material: "BLACK_STAINED_GLASS_PANE"
categories:
farming:
name: "Farming"
material: "WHEAT"
slot: 20
file: "farming.yml"
lore:
- "Buy and sell farming items"
- ""
- "Click to open"
permission: "essentialsc.shop.farming"
enabled: true
mining:
name: "Mining"
material: "DIAMOND_PICKAXE"
slot: 22
file: "mining.yml"
Category Fields
name
material
CHEST
slot
0
file
<id>.yml
lore
permission
enabled
true
Category Files
Each category file contains an items section where every key is a unique item ID.
items:
wheat:
material: "WHEAT"
name: "Wheat"
lore:
- "Basic farming crop"
- ""
- "Good for bread!"
amount: 1
buy-price: 10.0
sell-price: 5.0
buyable: true
sellable: true
slot: 10
page: 1
max-stack: 64
stock: -1
glow: false
diamond_sword:
material: "DIAMOND_SWORD"
name: "Sharp Blade"
buy-price: 250.0
sell-price: 125.0
enchantments:
sharpness: 5
unbreaking: 3
slot: 11
page: 1
permission: "essentialsc.shop.item.diamond_sword"
zombie_spawner:
material: "SPAWNER"
name: "Zombie Spawner"
spawner: true
spawner-type: "ZOMBIE"
buy-price: 5000.0
sellable: false
slot: 12
page: 1
mending_book:
material: "ENCHANTED_BOOK"
name: "Mending Book"
enchanted-book: true
enchanted-book-enchants:
mending: 1
buy-price: 1500.0
sell-price: 750.0
slot: 13
page: 1
custom_head:
material: "PLAYER_HEAD"
name: "Special Head"
texture-url: "https://textures.minecraft.net/texture/abc123..."
buy-price: 100.0
slot: 14
page: 1
reward_item:
material: "DIAMOND"
name: "Rank Upgrade"
buy-price: 10000.0
commands:
- "lp user %player% parent set vip"
- "broadcast %player% upgraded to VIP!"
slot: 15
page: 1
Item Fields
material
required
STONE
name
lore
amount
1
buy-price
0.0
sell-price
0.0
buyable
true
sellable
true
slot
page
max-stack
64
stock
-1 means unlimited. Default: -1
permission
glow
false
enchantments
sharpness: 5). Applied directly to the item.
texture-url
PLAYER_HEAD.
skull-owner
PLAYER_HEAD.
spawner
true to treat this item as a mob spawner. Default: false
spawner-type
ZOMBIE, SKELETON). Default: PIG
enchanted-book
true to treat this item as an enchanted book. Default: false
enchanted-book-enchants
mending: 1). Uses stored enchant NBT.
commands
%player%, %amount%
Auto Layout
If you omit slot and page from items, EssentialsC automatically lays them out:
- Items are placed sequentially starting from slot
0on page1. - Each page holds up to
shop.items-per-pageitems (default 28). - When a page fills, the next item starts on page 2, and so on.
- Available slots are
0-44(the bottom row is reserved for navigation).
To use explicit layout, define slot and page on every item. Mixing auto and explicit layout in the same category is not recommended.
Reloading
Changes to shop files are not live. Use one of these methods to apply:
- In-game:
/shop reload(requiresessentialsc.shop.admin) - Console:
essc reload(reloads all plugin configs including shop) - Server restart
Troubleshooting
"Invalid shop fill-material"
The material name in shop.fill-material is not a valid Bukkit Material. Check the Material enum for valid names.
Category not showing
Verify the file exists in plugins/EssentialsC/shop/, the category is enabled: true, and you have the required permission.
Items not appearing
Check that material is a valid Bukkit Material. Invalid materials silently skip the item during load.
Enchantments not working
Use modern NamespacedKey names (e.g., sharpness not DAMAGE_ALL). The plugin resolves them via Registry.ENCHANTMENT.
Spawner type resets to Pig
The spawner-type value must be a valid Bukkit EntityType. Invalid values fall back to PIG.
Head texture not loading
Ensure the texture-url is a direct link to a Minecraft texture server. Base64 textures are also supported via the internal texture system.