Skip to content

Configuration

DynamicShop Admin edited this page Apr 21, 2026 · 2 revisions

Configuration Guide

DynamicShop is designed to be highly configurable. Almost everything can be customized through the config.yml file or securely via the Web Dashboard (/shopadmin webadmin).

Below is an exhaustive explanation of every configuration option available.


Economy Settings

economy:
  sell_tax_percent: 30
  transaction_cooldown_ms: 0
  • sell_tax_percent: The percentage of value deducted when a player sells an item to the server. Setting this to 30 means the player gets 70% of the item's current buy price. This creates an economic sink.
  • transaction_cooldown_ms: Delay (in milliseconds) required between transactions to prevent spam logging/macros.

GUI Settings

gui:
  shop_menu_size: 54
  • shop_menu_size: The size of the main shop menu. Must be a multiple of 9 (e.g., 27, 36, 45, 54). Note that the bottom 9 slots are unconditionally reserved for navigation buttons.

Web Server Settings

DynamicShop runs its own fully-featured embedded web server for live dashboards.

webserver:
  enabled: true
  port: 7713
  bind: "0.0.0.0"
  hostname: ""
  admin-enabled: true
  force-update-files: false
  cors:
    enabled: true
  ssl:
    enabled: false
    keystore-path: "keystore.jks"
    keystore-password: "password"
  • enabled: If true, starts the built-in HTTP dashboard.
  • port: The port to listen on. Forward this in your network if you want public access.
  • bind: IP address to bind to. 0.0.0.0 binds to all interfaces.
  • hostname: The IP or Domain Name generated for admin links. If left empty "", it auto-detects from the server.
  • admin-enabled: Unlocks the /shopadmin webadmin command, allowing admins to modify items and prices from their browser securely.
  • force-update-files: If true, overwrites the HTML/JS source files in your plugins/DynamicShop/web folder on server start exactly as they are in the plugin jar (useful for updating plugin versions).
  • cors.enabled: Enables Cross-Origin Resource Sharing if using external sites.
  • ssl.enabled: Enables direct HTTPS support using a Java KeyStore instead of throwing it behind Nginx. keystore-path and keystore-password are required if enabled.

Transaction Logging

logging:
  max_recent_transactions: 10000
  • max_recent_transactions: The maximum number of transactions that are preserved in memory to be shown as a live ticking feed on the Web Dashboard. Older logs are discarded.

Dynamic Pricing System

This block handles the simulation of the supply & demand logic.

dynamic-pricing:
  enabled: true
  use-stock-curve: true
  curve-strength: 0.9
  max-stock: 500
  min-price-multiplier: 0.01
  max-price-multiplier: 20.0
  negative-stock-percent-per-item: 5.0
  use-time-inflation: true
  hourly-increase-percent: 2.0
  shortage-decay-percent-per-hour: 2.0
  restrict-buying-at-zero-stock: true
  log-dynamic-pricing: false
  • enabled: Master toggle. If false, shop uses perfectly static pricing.
  • use-stock-curve: Enables the primary math curve where increased stock = lowered price.
  • curve-strength: How steeply the price decays. 0.9 means at max stock, the item costs 10% of its base price.
  • max-stock: The baseline numeric threshold at which stock is considered "plentiful". This does not restrict physical storage.
  • min-price-multiplier: The hardest floor a price can hit. 0.01 = Never cheaper than 1% of base price.
  • max-price-multiplier: The hardest ceiling a price can hit. 20.0 = Never more expensive than 20x base price.
  • negative-stock-percent-per-item: Every unit requested beyond 0 inflates the base price by this percent.
  • use-time-inflation: Triggers hourly inflation routines on items that are in debt/shortage.
  • hourly-increase-percent: Compounding price markup per hour for items with zero or negative stock.
  • shortage-decay-percent-per-hour: When an item finally gains positive stock, its previously accumulated shortage hours will decay optimally according to this multiplier. (e.g. 2.0 means if the stock is maxed, it sheds 2 hours of inflation per hour).
  • restrict-buying-at-zero-stock: If true, players cannot force an item into negative stock; purchases become disabled exactly at 0.
  • log-dynamic-pricing: Will spam your console with calculus debug info if you like raw numbers.

Player Shops

player-shops:
  max-listings-per-player: 27
  enabled: true
  • enabled: Enables player auctions within the system.
  • max-listings-per-player: Disables placing more than this many concurrent items on the market at once.

Cross-Server Sync (P2P JeroMQ)

DynamicShop has a massive advantage of allowing seamless inter-server syncing of all prices/stock WITHOUT Redis/MySQL via an internal custom Mesh Network!

cross-server:
  enabled: false
  port: 5556
  save-interval-seconds: 600
  peers:
    - 192.168.1.10
    - 192.168.1.11:5556
  • enabled: Activates P2P Mesh configuration.
  • port: The port this specific server should open and listen on.
  • save-interval-seconds: Since information operates in memory across networks, the system commits current states to shopdata.yml every 10 minutes.
  • peers: Formatted as IP or IP:PORT. An explicit list of all sibling servers this instance should immediately alert roughly <100ms apart from any transaction!

Customizing an Item (Full Exhaustive Example)

While items: defaults to simply { base: Price }, there are numerous hidden parameters you can attach that override global behaviors specifically for this single item!

items:
  DIAMOND:
    base: 100.0                   # The baseline cost of this item 
    rate: 2.0                     # Replaces negative-stock-percent-per-item (Only inflates 2% instead of global 5%)
    min-stock: 100.0              # The Stock pricing curve treats 100 as its "0 point"
    max-stock: 1000.0             # Overrides the global max-stock just for this item
    min-stock-storage: -50        # Hard limits players from selling past a debt of 50.
    max-stock-storage: 5000       # Hard limits players from inflating stock continuously past 5000.
    disable-sell: false           # If true, players cannot physically sell this item to the shop
    disable-buy: false            # If true, players cannot physically buy this item from the shop
    category: BLOCKS              # Overrides the category auto-detection 

Clone this wiki locally