⚙️ Main Configuration (config.yml)

The config.yml file contains the global settings for EzShops. This is the heart of the plugin where you define how the economy, pricing, and special systems behave across your server.


📂 Configuration Overview

When you run EzShops for the first time, configuration files are automatically generated in the plugins/EzShops/ directory.

Directory Structure

plugins/EzShops/
├── config.yml                    # Main plugin configuration
├── shop.yml                      # Shop pricing and items
├── stock-gui.yml                 # Stock market GUI layout
├── shop-dynamic.yml              # Dynamic pricing state (auto-generated)
└── messages/                     # Localization files

📈 Dynamic Pricing

Dynamic pricing creates a living economy by adjusting item prices based on player activity.

How does it refresh?

  • When players sell an item repeatedly, the supply increases, and the price drops.
  • When players buy an item, the demand increases, and the price rises.
  • Normalization: Prices do not stay low forever. Over time, as activity balances out, prices naturally trend back to their original base value defined in shop.yml.
dynamic-pricing:
  # Enable automatic price adjustments based on supply/demand
  enabled: true

  # Global multipliers for buy/sell prices
  buy-multiplier: 1.0
  sell-multiplier: 0.5

  # Persistence file for price state
  state-file: shop-dynamic.yml

🏪 Player Shops

player-shops:
  # Enable player-owned chest shop system
  enabled: true

  # Minimum and maximum prices
  min-price: 1.0
  max-price: 1000000.0

  # Quantity limits
  min-quantity: 1
  max-quantity: 64

  # Sign format configuration
  sign-format:
    header: "[shop]"
    owner-line: "&b{owner}"
    item-line: "&e{item}"
    stock-line: "&7Stock: {stock}"
    price-line: "&a${price}"

📉 Stock Market

(For a full deep-dive into the Stock Market system, check out the Stock Market Documentation)

All stock sales require confirmation through a GUI before the transaction is finalised.

Configuration (config.yml)

The stock section controls which items are tradeable and how the GUI presents them. Price-engine parameters (volatility, demand factor, minimum price, and save interval) are configurable via config.yml.

stock:
  # Master switch – set to false to disable all /stock commands and GUIs.
  enabled: true

  # Per-player cooldown between trades in milliseconds. 0 = no cooldown.
  cooldown-millis: 10000

  # Price volatility range: random noise applied per trade (fraction of price).
  volatility-min: -0.10
  volatility-max: 0.10

  # Demand multiplier: fraction of price change per unit bought (+) or sold (-).
  demand-multiplier: 0.02

  # Minimum price floor: prices cannot drop below this value.
  min-price: 1.0

  # How often (in minutes) market prices are saved to disk.
  update-interval: 5

  # Materials that cannot be traded on the stock market.
  blocked:
    - BEDROCK
    - COMMAND_BLOCK

  # Custom items to expose in the stock market.
  # 'display' sets the GUI label; 'base-price' is the reference price shown
  # in the all-stocks listing (the live trading price evolves independently).
  overrides:
    - id: "DIAMOND"
      display: "&bDiamond"
      base-price: 100.0

  # Optional: group items under named category tabs in the GUI.
  categories:
    gems:
      - DIAMOND
      - EMERALD
Key Type Default Description
enabled boolean true Enable/disable all stock features
cooldown-millis integer 0 Milliseconds between player trades
volatility-min decimal -0.10 Lower bound of random volatility per trade (-10 %)
volatility-max decimal 0.10 Upper bound of random volatility per trade (+10 %)
demand-multiplier decimal 0.02 Price change per unit traded (2 % per unit)
min-price decimal 1.0 Absolute price floor
update-interval integer 5 Minutes between automatic price saves to disk
blocked list [] Materials blocked from trading
overrides list [] Custom items with display names and reference prices
categories map {} Named category → list of item groupings

Price Calculation Formula

Per-unit change = (±demand-multiplier) + random(volatility-min, volatility-max)
New price after N units = current × (1 + per-unit-change)^N,  floor at min-price

🤝 Teams Integration

Requires TeamsAPI ≥ 1.4.1. All options are ignored when TeamsAPI is absent.

teams-integration:
  # Master switch. Set to false to disable all TeamsAPI features without
  # removing TeamsAPI from the server.
  enabled: true

  # Sell price multipliers applied per team role.
  # Value is the factor applied to the base sell price (1.0 = no bonus).
  sell-multiplier:
    member: 1.05   # +5 %
    admin:  1.10   # +10 %
    owner:  1.15   # +15 %

  # Buy price discounts applied per team role.
  # Value is the fraction subtracted from 1.0 (0.05 = 5 % cheaper).
  buy-discount:
    member: 0.05
    admin:  0.10
    owner:  0.15

  # Fraction of every sell transaction deposited into the team treasury.
  # 0.05 means 5 % of the sell revenue goes to the team pool.
  treasury-split: 0.05

  # When true, all team members share one combined stock pool.
  # When false, each player's stock is tracked individually (default behaviour).
  shared-stock: true
Option Type Default Description
enabled boolean true Enable/disable all team features
sell-multiplier.member decimal 1.05 Sell bonus for members
sell-multiplier.admin decimal 1.10 Sell bonus for admins
sell-multiplier.owner decimal 1.15 Sell bonus for owners
buy-discount.member decimal 0.05 Buy discount for members
buy-discount.admin decimal 0.10 Buy discount for admins
buy-discount.owner decimal 0.15 Buy discount for owners
treasury-split decimal 0.05 Treasury deduction from each sell
shared-stock boolean true Share stock pool across team