Skip to content

Selling

BeestoXd edited this page Aug 15, 2026 · 1 revision

Selling

Players sell stored loot straight from a spawner's GUI. This page covers how a payout is calculated, how to price materials, and how rank multipliers work.

Requirements

Selling works only when both are true:

  1. SELL.ENABLED: true in spawners.yml (the default), and
  2. an economy is available — see Economy.

Otherwise players get Selling is disabled or no economy plugin is installed.

How a player sells

Sell All in the storage menu (slot 53), or the mob head in the main menu (which also claims XP in the same click).

Sell All opens a confirmation screen first, showing the payout, the multiplier and the item count. Nothing is sold until the green pane is clicked.

The payout formula

payout = SUM over each stored material of
             amount x unit price x multiplier

A material is included only if all of these hold:

  • it has a price — from SELL.PRICES, or a SELL_PRICE on a drop entry,
  • its filter is enabled on that spawner,
  • its stored amount is greater than zero.

Anything without a price is simply skipped. That is the intended way to make a drop collect-only: give it no price.

If nothing qualifies, the player gets There are no sellable items stored in that spawner. and nothing is removed.

Sold items are removed only after the money is successfully deposited. A failed deposit leaves the loot untouched and reports Failed to pay out the spawner loot sale.

Prices

SELL:
  PRICES:
    PORKCHOP: 2.5
    BEEF: 2.5
    LEATHER: 3.0
    ROTTEN_FLESH: 0.75
    IRON_INGOT: 12.0
    GOLD_INGOT: 13.5
    BLAZE_ROD: 18.0

Prices are per single item. IRON_INGOT: 12.0 means one ingot sells for 12, a full stack of 64 for 768.

Names are Bukkit material names, uppercase. Unknown names are logged ([Worth] Unknown material in SELL.PRICES: …) and skipped. Prices of zero or less are dropped, which is the same as leaving the material out.

Per-drop overrides

A SELL_PRICE inside a drop entry overrides SELL.PRICES for that material:

TYPES:
  BLAZE:
    DROPS:
      BLAZE_ROD:
        MATERIAL: BLAZE_ROD
        MIN: 1
        MAX: 2
        CHANCE: 1.0
        SELL_PRICE: 25.0

This override is global, not per type. Prices are resolved by material, so this sets blaze rods to 25.0 everywhere. Two spawner types cannot sell the same material at different prices.

Multipliers

SELL:
  MULTIPLIER: 1.0
  PERMISSION_MULTIPLIERS:
    ultimatevirtualspawner.sell.multiplier.vip: 1.25
    ultimatevirtualspawner.sell.multiplier.mvp: 1.5
    ultimatevirtualspawner.sell.multiplier.elite: 2.0
  • MULTIPLIER applies to every payout on the server. Use it for global events — 2.0 for a double-money weekend, back to 1.0 afterwards, live via /spawner reload.
  • PERMISSION_MULTIPLIERS are rank bonuses. Only the highest node a player holds applies, and it multiplies the global value rather than replacing it.
final = MULTIPLIER x (highest permission multiplier the player holds, or 1.0)
Player holds MULTIPLIER Final
nothing 1.0 1.0
…vip (1.25) 1.0 1.25
…vip and …elite (2.0) 1.0 2.0 — only the highest counts
…mvp (1.5) 2.0 (event) 3.0

The node names are entirely yours. Rename them to match your ranks:

    myserver.rank.gold: 1.3
    myserver.rank.diamond: 1.7

Grant them like any other permission:

/lp group vip permission set ultimatevirtualspawner.sell.multiplier.vip true

The multiplier in the confirmation screen is the one the viewing player will actually get, so players can see their rank bonus before confirming.

Balancing

Compute revenue per spawner before shipping a price. With the default 5-second interval (12 cycles per minute):

money/min = 12 x BASE_ITEMS_PER_CYCLE x stack x CHANCE x ((MIN + MAX) / 2) x price x multiplier

A 100-stack zombie spawner on the defaults:

ROTTEN_FLESH  12 x 1 x 100 x 1.0   x 2.0 = 2400/min x 0.75 = $1,800
IRON_INGOT    12 x 1 x 100 x 0.05  x 0.5 =   30/min x 12.0 =   $360
CARROT + POTATO                            30/min x 1.5  =    $45
                                                      total ~ $2,205/min

That is about $132,000 per hour from one block at 100 stack — and MAX_STACK_PER_BLOCK defaults to 100,000.

Decide what a maxed spawner should earn per hour on your server and work backwards from there. It is much easier to loosen a tight economy later than to claw money back after an inflation spiral.

Levers, in order of preference

  1. Price — cheapest to change, least visible to players.
  2. MAX_STACK_PER_BLOCK — caps the top end without touching per-spawner feel.
  3. GENERATION_INTERVAL_SECONDS — no long-run effect on totals, only on payout rhythm.
  4. Drop chances and amounts — most visible, reads loudest as a nerf.

Recipes

Collect-only material — remove its price:

SELL:
  PRICES:
    # ROTTEN_FLESH: 0.75      <- commented out: storable, not sellable

Double-money weekend

SELL:
  MULTIPLIER: 2.0

then /spawner reload.

Disable selling entirely

SELL:
  ENABLED: false

The Sell All button still appears, but reports that selling is disabled. To remove the button, move it out of the layout in menus.yml.

See also

Clone this wiki locally