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
- Install Vault and a compatible economy plugin. Derived Sell requires Vault and will not enable without it.
- Add the Derived Sell jar into your
pluginsfolder. - 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'sexport/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 (requiresderivedsell.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. Usehandinstead of a material name to use the item in your hand./sell blacklist remove <material>— Remove a material from your sell blacklist. Usehandinstead 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.2for2x)./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
- Place a sign on or against a chest, barrel, or any other inventory-holding container.
- Write
[AutoSell]on the first line (capitalization does not matter). - Write the owning player's name on the second line, or leave it blank to default to your own name.
- 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. - 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-onlineoption 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.autosellpermission 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.autosellpermission 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
RecipeTypeMultiplierof 1. Cooking recipes (recipes in a furnace or other cooking block) can have their multiplier configured inconfig.yml— it defaults to 2. -
When several recipes can produce the same item, the cheapest result wins.
-
Blocked materials (see
blocked-materialsin 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.