Overview
EssentialsC includes a powerful built-in shop system that lets players buy and sell items through intuitive inventory GUIs. The shop is fully configurable via YAML files and supports categories, pagination, stock limits, custom items, spawners, enchanted books, and command rewards.
All transactions are logged to a dedicated SQLite database (shop.db) for audit trails and analytics.
/shop reload to hot-reload shop files without restarting the server.
Commands
/shop [category] [page]
true
/shop reload
op
essentialsc.shop.admin.
How It Works
When a player runs /shop, the plugin opens the main menu GUI. This menu displays all enabled categories as clickable icons. Clicking a category opens its paginated item grid.
Inside a category:
- Left-click an item to buy 1 unit.
- Right-click an item to sell 1 unit.
- Shift + left-click to buy a full stack (up to
max-stack). - Shift + right-click to sell a full stack.
- Click the balance head to refresh your balance display.
- Use arrow buttons to navigate pages.
Permissions
essentialsc.shop
true
/shop command and browse categories.
essentialsc.shop.admin
op
/shop reload.
essentialsc.shop.<category>
true
essentialsc.shop.item.<item>
true
Item Features
GUI Layout
The category GUI uses a 54-slot inventory with the following layout:
┌──────────────────────────────────────────────────────┐
│ 0-44 Item slots (45 slots for shop items) │
│ 45 Previous page arrow │
│ 47 Balance head (click to refresh) │
│ 48 Back to categories / Close │
│ 49 Page indicator (Page X/Y) │
│ 50 Balance head (main menu) │
│ 53 Next page arrow │
└──────────────────────────────────────────────────────┘
Empty slots can be filled with a configurable material (default: BLACK_STAINED_GLASS_PANE).
Transaction Logging
When shop.log-transactions is enabled in config.yml, every purchase and sale is recorded to shop.db:
purchase_history— UUID, item ID, amount, price, timestampsell_history— UUID, item ID, amount, price, timestamp
Both tables are indexed by UUID for fast lookups.
Language Keys
shop.disabled
shop.invalid-category
shop.not-buyable
shop.not-sellable
shop.out-of-stock
shop.not-enough-stock
shop.not-enough-money
shop.inventory-full
shop.not-enough-items
shop.purchase-success
<item>, <amount>, <price>
shop.sale-success
<item>, <amount>, <price>
shop.reload-success
/shop reload completes.
Troubleshooting
"Shop is disabled"
The shop system is turned off in config.yml. Set shop.enabled: true and reload.
"Invalid category"
The category ID you passed to /shop <category> does not exist. Check the file names in plugins/EssentialsC/shop/.
Category not showing in main menu
Verify the category file exists, enabled: true is set, and you have the required permission if one is configured.
Items not appearing in category
Check that material is a valid Bukkit Material name. Invalid materials are silently skipped during load.
"You do not have permission"
You need essentialsc.shop for the base command, or a per-category/per-item permission node set by the server admin.
"Not enough money"
Your balance is lower than the item's buy-price. Check your balance with /balance.
"Inventory full"
Free up inventory space before purchasing. The plugin checks for available slots and similar item stacks.
"Out of stock"
The item has a finite stock that reached zero. An admin must increase the stock in the category YAML file and reload.
"Not enough items"
You tried to sell more of an item than you carry. For enchanted books and spawners, the item must match exactly (NBT included).
Enchantments not applying
Use modern enchantment keys like sharpness or unbreaking. Legacy Bukkit names like DAMAGE_ALL will not resolve.
Spawner type resets to Pig
The spawner-type value is not a valid Bukkit EntityType. Check the EntityType enum for valid names.
Head texture not loading
Ensure texture-url is a direct link to a Minecraft texture server, or use skull-owner with a valid player name.
Changes not applying after edit
Shop files are not live-reloaded on save. Run /shop reload or /essc reload after editing.
Auto-layout placing items on navigation slots
Reduce shop.items-per-page in config.yml or manually assign slot and page to each item.