Shop Configuration

Complete guide to configuring the EssentialsC shop system. Set up categories, items, pricing, and GUI customization.

On This Page

General Settings

These settings control the main behavior and appearance of the shop system. Located in plugins/EssentialsC/shop/config.yml.

shop.enabled Boolean true

Master toggle for the entire shop system. When set to false, all shop commands and functionality will be disabled.

YAML
shop:
  enabled: true  # Set to false to disable the shop completely
shop.main-menu-title String (MiniMessage) "<#F52727><b>Server Shop"

The title displayed at the top of the main shop menu GUI. Supports MiniMessage formatting for colors and styles. Use <b> for bold, <#RRGGBB> for hex colors.

YAML
shop:
  main-menu-title: "<#F52727>Server Shop"  # Red bold title
  # Alternative examples:
  # main-menu-title: "My Awesome Shop"
  # main-menu-title: "⚡ SHOP ⚡"
shop.main-menu-size Integer (9-54) 54

The size of the main shop menu inventory in slots. Must be a multiple of 9 (9, 18, 27, 36, 45, or 54). This determines how many category icons can be displayed on the main menu.

YAML
shop:
  main-menu-size: 54  # 6 rows of 9 slots
  # Smaller shops can use:
  # main-menu-size: 27  # 3 rows
shop.category-title String (MiniMessage) "<#F52727><category>"

The title format for category selection items in the main menu. Use <category> as a placeholder that will be replaced with the category's display name.

YAML
shop:
  category-title: "<#F52727>"  # Displays category name in red
shop.category-menu-title String (MiniMessage) "<#F52727>Shop - <category>"

The title displayed at the top of individual category shop GUIs. The <category> placeholder is replaced with the category's display name.

YAML
shop:
  category-menu-title: "<#F52727>Shop - "
shop.close-button-enabled Boolean true

Whether to display a close button in shop GUIs. When enabled, players can click this button to close the shop inventory.

YAML
shop:
  close-button-enabled: true  # Set to false to remove close button
shop.items-per-page Integer 28

The number of shop items displayed per page in a category menu. The remaining slots are used for navigation buttons (next/previous page, back, close). Maximum recommended is 45 for a 54-slot inventory.

YAML
shop:
  items-per-page: 28  # Leaves room for navigation buttons
shop.fill-empty-slots Boolean true

When enabled, empty slots in shop GUIs will be filled with the material specified in fill-material. This creates a cleaner visual appearance.

YAML
shop:
  fill-empty-slots: true  # Fill empty slots with decorative glass
shop.fill-material Material "BLACK_STAINED_GLASS_PANE"

The Minecraft material used to fill empty slots when fill-empty-slots is enabled. Must be a valid Bukkit Material enum value. Common choices include BLACK_STAINED_GLASS_PANE, GRAY_STAINED_GLASS_PANE, or BARRIER.

YAML
shop:
  fill-material: "BLACK_STAINED_GLASS_PANE"
  # Other options:
  # fill-material: "GRAY_STAINED_GLASS_PANE"
  # fill-material: "LIGHT_BLUE_STAINED_GLASS_PANE"
shop.log-transactions Boolean true

Whether to log all shop transactions (buy/sell) to the console and log files. Useful for tracking economy activity and detecting abuse.

YAML
shop:
  log-transactions: true  # Logs all buys/sells to console

Currency Settings

Configure the currency names used throughout the shop system. The plugin automatically uses singular or plural forms based on the amount.

shop.currency.singular String "Dollar"

The singular form of your server's currency. Used when the price is exactly 1.0 (e.g., "1 Dollar").

YAML
shop:
  currency:
    singular: "Dollar"  # "1 Dollar"
    # Alternative examples:
    # singular: "Coin"
    # singular: "Gem"
    # singular: "Credit"
shop.currency.plural String "Dollars"

The plural form of your server's currency. Used when the price is not 1.0 (e.g., "5 Dollars", "0.5 Dollars").

YAML
shop:
  currency:
    plural: "Dollars"  # "5 Dollars", "100 Dollars"
    # Alternative examples:
    # plural: "Coins"
    # plural: "Gems"
    # plural: "Credits"

Category Configuration

Categories are defined in individual YAML files located in plugins/EssentialsC/shop/categories/. Each category represents a section of your shop (e.g., Blocks, Tools, Food).

id String (Auto-generated) Filename without .yml

The unique identifier for the category. This is automatically set based on the filename and cannot be changed. Used internally to reference the category in commands and permissions.

YAML
# File: blocks.yml
# The ID would be "blocks"
# Access permission: essentialsc.shop.category.blocks
displayName String (MiniMessage) null

The display name shown to players for this category. Supports MiniMessage formatting. This appears in the main menu and category GUI titles.

YAML
displayName: "<#00FF00>Building Blocks"
# or
displayName: "Tools & Weapons"
icon Material null

The Minecraft material displayed as the category icon in the main shop menu. Must be a valid Bukkit Material enum value.

YAML
icon: "STONE"           # For a blocks category
icon: "DIAMOND_SWORD"   # For a weapons category
icon: "GOLDEN_APPLE"    # For a food category
icon: "PLAYER_HEAD"     # Can use with textureUrl for custom icons
textureUrl String (URL) null

When icon is set to PLAYER_HEAD, this URL points to the skin texture to display. Use direct links to Minecraft skin textures or Base64 encoded textures.

YAML
icon: "PLAYER_HEAD"
textureUrl: "http://textures.minecraft.net/texture/..."
lore List<String> Empty list

Additional lines of text displayed when hovering over the category icon. Supports MiniMessage formatting. Use this to describe what items are in the category.

YAML
lore:
  - "Click to browse"
  - "building materials"
  - ""
  - "Includes:"
  - "  Stone variants"
  - "  Wood types"
slot Integer 0

The inventory slot (0-indexed) where this category appears in the main shop menu. Must be within the bounds of main-menu-size. Slots 0-8 are typically reserved for navigation or decoration.

YAML
slot: 10  # Second row, second column (0-indexed)
# Slot layout for 54-slot inventory:
# Row 1: 0-8    Row 4: 27-35
# Row 2: 9-17   Row 5: 36-44
# Row 3: 18-26  Row 6: 45-53
fileName String id + ".yml"

The filename used to save this category. Automatically set to the category ID plus .yml extension. Generally should not be changed manually.

enabled Boolean true

Whether this category is visible and accessible in the shop. Set to false to temporarily disable a category without deleting its configuration.

YAML
enabled: true  # Set to false to hide this category
permission String null

Optional permission required to view and access this category. If set, players without this permission will not see the category in the main menu. Leave empty or null to allow all players.

YAML
permission: "essentialsc.shop.vip"  # Only VIPs can see this category
# or leave empty for no restriction:
permission: ""
pages Map<Integer, Map<Integer, ShopItem>> Empty map

Internal data structure storing items organized by page and slot. Items are automatically added to this structure when configured. You typically do not edit this manually; use the in-game commands or item configuration section instead.

Item Configuration

Shop items are defined within category files. Each item represents a product that players can buy or sell. Items support extensive customization including enchantments, NBT data, special types (spawners, enchanted books), and commands.

id String (Required) null

Unique identifier for this shop item. Must be unique within the category. Used internally and for admin commands to reference this specific item.

YAML
id: "diamond_sword_sharpness"
id: "oak_wood_stack"
id: "zombie_spawner"
material Material (Required) null

The Minecraft material this shop item represents. Must be a valid Bukkit Material enum value. This determines the base item type.

YAML
material: "DIAMOND_SWORD"
material: "OAK_LOG"
material: "PLAYER_HEAD"  # Use with textureUrl or skullOwner
amount Integer 1

The quantity of the item given when purchased or required when selling. This is the base unit for pricing. For example, if amount is 16 and buyPrice is 10, players pay 10 currency for 16 items.

YAML
amount: 1    # Sell individual items
amount: 16   # Sell by the stack (16 for most items, 64 for full stacks)
amount: 64   # Sell full stacks
displayName String (MiniMessage) null

Custom name displayed for this item in the shop GUI. Supports MiniMessage formatting. If not set, uses the default Minecraft item name.

YAML
displayName: "<#FF0000>Legendary Sword"
displayName: "Shiny Apple"
lore List<String> (MiniMessage) Empty list

Description lines shown when hovering over the item. Supports MiniMessage formatting. These appear below the auto-generated price/stock information in the shop GUI.

YAML
lore:
  - "A powerful weapon"
  - "forged in the"
  - "Depths of Hell"
  - ""
  - "Special Ability:"
  - "Fire Aspect"
buyPrice Double 0.0

The price players pay to purchase this item. Set to 0 or negative to make the item unbuyable (unless buyable is explicitly set). Price is for the quantity specified in amount.

YAML
buyPrice: 100.0   # Costs 100 currency
buyPrice: 0.0     # Free item
buyPrice: 9999.99 # Expensive rare item
sellPrice Double 0.0

The price players receive when selling this item. Set to 0 or negative to prevent selling. Price is for the quantity specified in amount.

YAML
sellPrice: 50.0   # Players get 50 currency
sellPrice: 0.0    # Cannot sell this item
buyable Boolean true

Whether players can purchase this item. When false, the buy price will not be displayed and players cannot left-click to buy.

YAML
buyable: false  # Sell-only item (players can only sell to shop)
buyable: true   # Can be purchased
sellable Boolean true

Whether players can sell this item to the shop. When false, the sell price will not be displayed and players cannot right-click to sell.

YAML
sellable: false  # Buy-only item (shop sells but doesn't buy)
sellable: true   # Can be sold to shop
slot Integer 0

The inventory slot (0-indexed) where this item appears in the category GUI. Must be within the page layout considering items-per-page. Avoid slots used for navigation buttons (typically last row).

YAML
slot: 10  # Position on the page
page: 1   # Which page this appears on
page Integer 1

Which page of the category this item appears on. Categories support multiple pages of items. Page 1 is the first page.

YAML
page: 1  # First page
page: 2  # Second page (requires items-per-page to be exceeded)
permission String null

Optional permission required to view and purchase this item. Players without this permission will not see the item in the shop.

YAML
permission: "essentialsc.shop.legendary"
permission: "vip.shop.access"
stock Integer -1

The available quantity of this item in the shop. Set to -1 for unlimited stock. When set to a positive number, each purchase decrements the stock. When stock reaches 0, the item cannot be purchased until restocked.

YAML
stock: -1     # Unlimited stock (default)
stock: 100    # Limited to 100 purchases
stock: 0      # Out of stock (unbuyable)
maxStack Integer 64

Maximum stack size for this item when shift-clicking to buy/sell stacks. Normally 64 for most items, but can be set lower for items like ender pearls (16), snowballs (16), etc.

YAML
maxStack: 64  # Standard stack size
maxStack: 16  # For ender pearls, snowballs, buckets
maxStack: 1   # For unstackable items
commands List<String> Empty list

Commands executed when this item is purchased. Use {player} as a placeholder for the buyer's name. Commands are executed by the console. Useful for giving permissions, executing kit commands, or running custom scripts.

YAML
commands:
  - "give {player} diamond 1"
  - "lp user {player} permission set vip.true"
  - "broadcast {player} bought a VIP rank!"
category String null

The category ID this item belongs to. Automatically set when the item is added to a category. Generally should not be changed manually.

Item Appearance Options

glow Boolean false

Adds an enchantment glint effect to the item without actually enchanting it. Uses a hidden Unbreaking I enchantment. Useful for highlighting special or featured items.

YAML
glow: true   # Item will have enchantment shimmer
glow: false  # Normal appearance
textureUrl String (URL) null

For PLAYER_HEAD items, specifies the direct URL to a Minecraft skin texture. The texture will be applied to the head item.

YAML
material: "PLAYER_HEAD"
textureUrl: "http://textures.minecraft.net/texture/..."
skullOwner String (Player Name) null

For PLAYER_HEAD items, sets the owner to a specific player's skin. The head will display that player's skin texture. Alternative to textureUrl for using actual player skins.

YAML
material: "PLAYER_HEAD"
skullOwner: "Notch"  # Will display Notch's skin
enchantments Map<Enchantment, Integer> Empty map

Regular enchantments applied to the item when purchased. These are standard item enchantments (not stored in books). Use Bukkit enchantment names as keys.

YAML
enchantments:
  SHARPNESS: 5
  FIRE_ASPECT: 2
  LOOTING: 3
itemFlags List<ItemFlag> Empty list

Hide specific item attributes from the tooltip. Useful for hiding enchantments (when using glow), attributes, or other vanilla item information.

YAML
itemFlags:
  - "HIDE_ENCHANTS"
  - "HIDE_ATTRIBUTES"
  - "HIDE_UNBREAKABLE"
nbtData Map<String, String> Empty map

Custom NBT data stored in the item's PersistentDataContainer. Useful for plugin integration or tracking items. Keys are stored under the EssentialsC namespace.

YAML
nbtData:
  shop_item_id: "special_sword_001"
  tier: "legendary"

Special Item Types

spawner Boolean false

When set to true, this item becomes a monster spawner. The material will automatically be set to SPAWNER if not already. Use with spawnerType to specify the entity.

YAML
spawner: true
spawnerType: "ZOMBIE"  # Creates a Zombie Spawner
spawnerType String (EntityType) "PIG"

The entity type for spawner items. Must be a valid Bukkit EntityType. Common values: ZOMBIE, SKELETON, SPIDER, CAVE_SPIDER, BLAZE, CREEPER, etc. Defaults to PIG if invalid.

YAML
spawner: true
spawnerType: "BLAZE"      # Blaze spawner
spawnerType: "WITHER"     # Wither spawner
spawnerType: "ENDERMAN"   # Enderman spawner
enchantedBook Boolean false

When set to true, this item becomes an enchanted book. The material will automatically be set to ENCHANTED_BOOK. Use with storedEnchantments to define the enchantments stored in the book.

YAML
enchantedBook: true
storedEnchantments:
  MENDING: 1
  UNBREAKING: 3
storedEnchantments Map<Enchantment, Integer> Empty map

Enchantments stored in an enchanted book. These are different from regular enchantments - they are stored in the book and can be applied to items via anvil. Only used when enchantedBook is true.

YAML
enchantedBook: true
storedEnchantments:
  SHARPNESS: 5
  LOOTING: 3
  SWEEPING_EDGE: 3

Example Configuration

Here's a complete example of a category file with various item types.

YAML
# File: plugins/EssentialsC/shop/categories/tools.yml

displayName: "<#00AA00>Tools & Weapons"
icon: "DIAMOND_PICKAXE"
lore:
  - "High quality tools"
  - "for every job"
slot: 11
enabled: true
permission: ""

items:
  diamond_pickaxe_efficiency:
    id: "diamond_pickaxe_efficiency"
    material: "DIAMOND_PICKAXE"
    displayName: "<#00FFFF>Efficiency Pickaxe"
    lore:
      - "Pre-enchanted for"
      - "maximum mining speed"
    amount: 1
    buyPrice: 500.0
    sellPrice: 100.0
    buyable: true
    sellable: true
    slot: 10
    page: 1
    stock: -1
    maxStack: 1
    enchantments:
      EFFICIENCY: 5
      UNBREAKING: 3
    glow: true
    itemFlags:
      - "HIDE_ENCHANTS"

  zombie_spawner:
    id: "zombie_spawner"
    material: "SPAWNER"
    displayName: "<#FF0000>Zombie Spawner"
    lore:
      - "Create your own"
      - "monster farm!"
    amount: 1
    buyPrice: 10000.0
    sellPrice: 0.0
    buyable: true
    sellable: false
    slot: 11
    page: 1
    stock: 5
    spawner: true
    spawnerType: "ZOMBIE"

  mending_book:
    id: "mending_book"
    material: "ENCHANTED_BOOK"
    displayName: "<#FFD700>Mending Book"
    lore:
      - "Rare enchantment"
      - "for eternal gear"
    amount: 1
    buyPrice: 2500.0
    sellPrice: 500.0
    slot: 12
    page: 1
    enchantedBook: true
    storedEnchantments:
      MENDING: 1
    glow: true