Derived Sell Documentation

Derived Sell

Calculate the worth of items based on the worth of the items used to craft them. Set a price on your raw materials and every craftable item on the server prices itself — no thousand-line shop config to maintain, and no accidental infinite-money crafting loops.

Download Derived Sell on SpigotMC

Installation

  1. Install Vault and a compatible economy plugin. Derived Sell requires Vault and will not enable without it.
  2. Add the Derived Sell jar into your plugins folder.
  3. Restart your server.

Folia: Derived Sell supports Folia. All scheduling is region- and async-aware; no additional configuration is needed.

Commands

  • /derivedsell help — Show the help message.
  • /derivedsell reload — Reload the plugin.
  • /derivedsell migrate <plugin> — Migrate worths from another plugin.
  • /setworth <worth> — Set the worth of the item you are holding. The plugin must be reloaded in order for worth changes to take effect.
  • /setworth <material> <worth> — Set the worth of a specific material. The plugin must be reloaded in order for worth changes to take effect.
  • /worth hand [quantity] — Check the worth of the item in your hand.
  • /worth <material> [quantity] — Check the worth of a specific material.
  • /worth all — Check the worth of all items in your inventory.
  • /worth container — Check the worth of all items in the container you are looking at.
  • /worth export — Export all item worths (manual and calculated) to a timestamped file in the plugin's export/ folder.
  • /worths — Open a GUI listing the worth of every sellable item, paged so you can browse them all. Use the sort button (hopper icon) in the nav row to cycle sort orders — Name (A-Z), Name (Z-A), Worth (High-Low), Worth (Low-High) — and the filter button to narrow by item type (All / Blocks / Food / Items). Shift-click an entry to sell all of that item from your inventory (requires derivedsell.user.sell).
  • /sell hand [quantity] — Sell the item in your hand. If no quantity is provided it will sell all of that item.
  • /sell <material> [quantity] — Sell a specific material. If no quantity is provided it will sell all of that item.
  • /sell all — Sell all items in your inventory. Skips materials on your sell blacklist.
  • /sell container — Sell all items in the container you are looking at. Skips materials on your sell blacklist.
  • /sell blacklist — View your personal sell blacklist.
  • /sell blacklist add <material> — Add a material to your sell blacklist. Use hand instead of a material name to use the item in your hand.
  • /sell blacklist remove <material> — Remove a material from your sell blacklist. Use hand instead of a material name to use the item in your hand.
  • /sellwand <tier> [player] — Give a sell wand of the specified tier to a player (or yourself if no player is given). Valid tiers: 1x, 1.5x, 2x, 3x (bare numbers also accepted, e.g. 2 for 2x).
  • /autosell notifications [on|off] — Toggle (or explicitly set) whether you receive the periodic auto-sell earnings summary. On by default.

Permissions

  • derivedsell.user.sell (default) — Allows the player to sell an item.
  • derivedsell.user.worth (default) — Allows the player to check the worth of an item.
  • derivedsell.user.worths (default) — Allows the player to browse all item worths.
  • derivedsell.user.sell.blacklist (default) — Allows the player to manage their sell blacklist.
  • derivedsell.admin.reload — Allows the player to reload the plugin configuration.
  • derivedsell.admin.migrate — Allows the player to migrate worths from another plugin.
  • derivedsell.admin.setworth — Allows the player to set the worth of an item.
  • derivedsell.admin.export — Allows the player to export all item worths to a file.
  • derivedsell.admin.sellwand — Allows the player to give sell wands.
  • derivedsell.user.autosell — Allows the player to create auto-sell chests. Not granted by default — assign via your permissions plugin.
  • derivedsell.user.autosell.others (op) — Allows the player to create auto-sell chests owned by other players.
  • derivedsell.admin.autosell — Allows the player to remove any auto-sell chest.
  • derivedsell.user.autosell.notifications (default) — Allows the player to toggle their auto-sell notifications.

Sell Wands

Sell wands are special items that, when right-clicked on a container, sell that container's contents (respecting the wielder's personal sell blacklist and container-access protection). For a double chest, clicking either half sells the whole chest. The payout is multiplied by the wand's worth multiplier.

The display name of each tier (including its colour) is configurable in config.yml under sell-wands.names& colour codes are supported. The defaults are green (&a) for 1x, yellow (&e) for 1.5x, aqua (&b) for 2x, and light purple (&d) for 3x. The item material for each tier is configurable under sell-wands.material; defaults are STICK for 1x and BLAZE_ROD for 1.5x, 2x, and 3x.

There are four tiers:

  • 1x — Multiplier 1.0, unlimited uses; never breaks.
  • 1.5x — Multiplier 1.5, limited uses (default 32, configurable).
  • 2x — Multiplier 2.0, limited uses (default 16, configurable).
  • 3x — Multiplier 3.0, limited uses (default 8, configurable).

Limited wands always show their remaining uses in their lore. They also mirror the remaining uses onto a durability bar (fuller = more uses left), but only when the wand material configured under sell-wands.material is one with native durability (a tool); the default STICK and BLAZE_ROD materials have no durability, so they show no durability bar. When the last use is spent the wand is consumed. A use that sells nothing (empty or fully blacklisted container, a non-container click, or a container the player can't access) does not count against the use limit. Wand tier and remaining uses are stored in the item's persistent data and survive relogs, drops, and inventory transfers. Every wand is unique and does not stack with any other wand — even two wands of the same tier with the same remaining uses occupy separate inventory slots.

Auto Sell Chests

Auto sell chests automatically sell their contents on a configurable timer and deposit the proceeds to the owner via the server economy.

Creating an auto sell chest

  1. Place a sign on or against a chest, barrel, or any other inventory-holding container.
  2. Write [AutoSell] on the first line (capitalization does not matter).
  3. Write the owning player's name on the second line, or leave it blank to default to your own name.
  4. Optionally, write a material name on the third line (e.g. DIAMOND) to make the chest sell only that material. Leave the third line blank to sell every item that has a worth. An unrecognized material name will prevent the sign from being registered.
  5. Place the sign. If successful, the sign will be reformatted in the plugin's theme color and you will receive a confirmation message.

You may only create auto-sell chests owned by yourself unless you have the derivedsell.user.autosell.others permission.

Behavior

  • While the chunk containing the container is loaded, its contents are swept and sold on the configured interval.
  • Only items with a known worth are sold. Items with no worth and items on the owner's sell blacklist (when the owner is online) are left untouched.
  • If a material filter was set on the third line at creation time, only that material is sold; all other items in the chest are left in place. The owner's sell blacklist still applies on top of the filter. An unrecognized material name at creation time rejects the sign — the chest is not registered.
  • Proceeds are deposited to the owning player's account via Vault, even if they are offline (unless the only-when-owner-online option is enabled).
  • At each notification interval (default five minutes), online owners receive a single summary message showing the total earned across all their chests since the previous notification. The notification cadence is independent of the sweep cadence — earnings are aggregated across every sweep in the window. Owners who earned nothing receive no message. The summary is enabled by default; players can disable it with /autosell notifications off.
  • Double chests with one [AutoSell] sign sell both halves in a single sweep. No second sign is needed on the other half.
  • Barrels and other inventory-holding containers work identically to chests.
  • To change an existing chest's material filter, sneak + right-click the auto-sell sign while holding the item you want to filter to. The chest's filter updates to the held item's material and the sign's third line updates to show the new filter. The owner or a player with derivedsell.admin.autosell permission may do this.
  • Breaking the sign stops auto-selling but leaves the container. Breaking the container removes the auto-sell registration entirely.
  • Only the container owner or a player with the derivedsell.admin.autosell permission may break an auto-sell sign or container.

Config options

auto-sell:
  enabled: true # Enable or disable auto-sell chests.
  interval-seconds: 30 # How often (in seconds) loaded auto-sell chests are swept.
  notification-interval-seconds: 300 # How often (in seconds) owners get a summary of auto-sell earnings. Default 300 (five minutes).
  only-when-owner-online: false # If true, auto-sell chests only sell while their owner is online.

Sell Log

Every successful sell transaction is recorded to plugins/DerivedSell/sell-log.txt. Each line is tab-separated and contains:

<timestamp>    <player>    <quantity>    <material>    <worth>

Example:

2024-01-15 14:32:01    Steve    64    Iron Ingot    $128.00

Entries are buffered in memory and appended to the file every 30 seconds (and again on shutdown), so the tail of the log can lag a few seconds behind live sales. The file is only ever appended to, never truncated, providing a persistent audit trail that survives server restarts. To disable logging, set sell-log.enabled: false in config.yml.

Sell Blacklist

Each player has a personal sell blacklist — a list of materials that will be skipped when using /sell all or /sell container. This allows players to protect items they never want to accidentally sell during a bulk sell operation.

Blacklisted materials are still sellable via /sell hand or /sell <material> — explicit sells always go through. The blacklist only applies to the sweep commands that auto-select what to sell.

Blacklist entries persist across relog and server restart, stored one file per player in the plugin's data/players/ folder.

Config

worths:
  gui:
    default-sort: alphabetical-ascending # Default /worths sort order. One of: alphabetical-ascending, alphabetical-descending, worth-descending, worth-ascending.

sell-wands: # Configuration for sell wands (see /sellwand).
  material: # The item each wand tier uses. Any valid Minecraft material name.
    1x: STICK
    1-5x: BLAZE_ROD
    2x: BLAZE_ROD
    3x: BLAZE_ROD
  names: # Display name of each wand tier. Supports & colour codes.
    1x: "&a1x Sell Wand"
    1-5x: "&e1.5x Sell Wand"
    2x: "&b2x Sell Wand"
    3x: "&d3x Sell Wand"
  uses: # Number of uses for each limited-tier wand before it breaks. The 1x wand is unlimited.
    1-5x: 32
    2x: 16
    3x: 8

auto-sell:
  enabled: true # Enable or disable auto-sell chests.
  interval-seconds: 30 # How often (in seconds) loaded auto-sell chests are swept.
  notification-interval-seconds: 300 # How often (in seconds) owners get a summary of auto-sell earnings. Default 300 (five minutes).
  only-when-owner-online: false # If true, auto-sell chests only sell while their owner is online.

sell-log:
  enabled: true # Whether to log all sell transactions to sell-log.txt in the plugin folder.

round-worth-to: 2 # Number of decimal places to round worth to.
cooking-recipe-multiplier: 2.0 # Multiplier for cooking recipe worth calculations.
log-worth-calculations: true # Whether to log worth calculations to the console.
metrics: true # Whether to send anonymous usage statistics to bStats (https://bstats.org).
blocked-materials: # List of materials that should not be considered for worth calculations.
  - wooden-sword
  - stone-sword
  - iron-sword
  - golden-sword
  - diamond-sword
  - netherite-sword
  - wooden-pickaxe
  - stone-pickaxe
  - iron-pickaxe
  - golden-pickaxe
  - diamond-pickaxe
  - netherite-pickaxe
  - wooden-shovel
  - stone-shovel
  - iron-shovel
  - golden-shovel
  - diamond-shovel
  - netherite-shovel
  - wooden-axe
  - stone-axe
  - iron-axe
  - golden-axe
  - diamond-axe
  - netherite-axe
  - wooden-hoe
  - stone-hoe
  - iron-hoe
  - golden-hoe
  - diamond-hoe
  - netherite-hoe
  - leather-helmet
  - chainmail-helmet
  - iron-helmet
  - golden-helmet
  - diamond-helmet
  - netherite-helmet
  - leather-chestplate
  - chainmail-chestplate
  - iron-chestplate
  - golden-chestplate
  - diamond-chestplate
  - netherite-chestplate
  - leather-leggings
  - chainmail-leggings
  - iron-leggings
  - golden-leggings
  - diamond-leggings
  - netherite-leggings
  - leather-boots
  - chainmail-boots
  - iron-boots
  - golden-boots
  - diamond-boots
  - netherite-boots
  - bow
  - crossbow
  - trident
  - fishing-rod
  - shield
  - elytra
  - mace
  - shulker-box
  - spawner
  - enchanted-book

Metrics

Derived Sell reports anonymous usage statistics to bStats. This is enabled by default — the config ships with metrics: true, so data is sent unless you turn it off. bStats collects general server information (server software and version, player count, Java and OS details) plus the plugin's own version; no player-identifying data is included.

To opt out, set metrics: false in config.yml:

metrics: false

Worth Calculation

  • If an item has a worth set manually it will use that worth.

  • If an item does not have a worth set but the items used to craft it have a worth, the worth is calculated as:

    (TotalWorthOfItemsInRecipe / NumberOfResultingItems) * RecipeTypeMultiplier
    
  • Standard recipes use a RecipeTypeMultiplier of 1. Cooking recipes (recipes in a furnace or other cooking block) can have their multiplier configured in config.yml — it defaults to 2.

  • When several recipes can produce the same item, the cheapest result wins.

  • Blocked materials (see blocked-materials in the config) are worth nothing and also disqualify any recipe they appear in.

  • For shaped recipes an ingredient that fills several grid cells is currently counted only once, so items crafted from a shaped recipe are valued below what the formula above implies.