💰Products Config: Single Thing
This page explains the products, buy-prices, and sell-prices sections in a way that matches how the plugin actually works in code.
If you only remember one idea, remember this:
A single thing is one entry under
products,buy-prices, orsell-prices.A product can have many single things.
The plugin decides which single things are usable, calculates their amount, checks requirements, and then gives/takes them.
What Is a Single Thing?
Inside one shop item, these three sections are all made of single things:
products
productsWhat the player receives when buying, and what the player must provide when selling. Optional.
If products does not exist:
buying can still run
buy-actionsselling can still run
sell-actionsbut the player will not receive any product on buy
and will not need to provide any product on sell
This is useful for command shops.
buy-prices
buy-pricesWhat the player must pay to buy. Optional, but if it does not exist, the product cannot be bought.
sell-prices
sell-pricesWhat the player receives after selling. Optional, but if it does not exist, the product cannot be sold.
Example:
In this example:
products.1is a single thingproducts.2is a single thingbuy-prices.1is a single thingsell-prices.1is a single thing
How the Plugin Uses Single Things?
When a player buys or sells, the plugin does not just read the section from top to bottom. It follows this logic:
It reads all single things in
products,buy-prices, orsell-prices.It filters them by
apply-conditionsor legacyconditions.It uses the section mode (
ANY,ALL,CLASSIC_ANY,CLASSIC_ALL) to decide which single things are selected.It calculates the real amount of each selected single thing.
It checks whether the player has enough of that thing.
It checks
require-conditions.It runs
give-actions/take-actionsand gives or takes the thing itself.
This is why apply-conditions and require-conditions are not the same thing.
Single Thing Types
The plugin determines the type of a single thing from the options you put inside it.
Vanilla Item
Use normal ItemFormat to tell us what Minecraft item you want to sell in shop or you want to player pay. (Buy/Sell/Products)
Use this when:
the thing is a normal Minecraft item
you want the plugin to compare, give, or take an actual item
Hook Item
Use Supported Plugins's item to tell us what custom item you want to sell in shop or you want to player pay. This type still use ItemFormat. (Buy/Sell/Products)
Use this when:
the thing is provided by another item plugin
you still want UltimateShop to treat it like an item
Match Item
Use custom item matching rules from Custom Item Match Method to tell us which items you want to match. (Buy/Products)
Use this when:
there is no exact item ID to compare
you want to match by lore, NBT, name, or other custom rules
Vanilla Economy / Hook Economy
Use an economy balance instead of an item. Following EconomyFormat.
Use this when:
the player should pay or receive money, points, exp, levels, etc.
Custom - Premium
Use match-placeholder when the thing is not a normal item or supported economy.
Use this when:
you want to compare any custom numeric value
the plugin does not natively support that currency or system
Important:
the placeholder is used to read how much the player currently has
take-actions/give-actionsare what actually modify that value
Free / Empty
If a single thing does not define item data, economy data, match-item, or match-placeholder, it is treated as free.
This is useful for:
command shops
permission shops
action-only rewards
Options for Single Things
These options are the most important ones users actually work with.
amount
amountThe base amount of the single thing.
This can be:
a fixed number
a PlaceholderAPI value. For available built-in placeholders, please view this page.
a math expression. For math calculate format, please view this page.
a dynamic formula
Example:
apply-conditions
apply-conditionsWhether this single thing should participate in the transaction.
require-conditions
require-conditionsWhether the transaction is allowed to use this single thing after selection.
give-actions
give-actionsActions that run when this single thing is given to the player.
Typical uses:
command shop rewards
permission rewards
custom currency rewards
take-actions
take-actionsActions that run when this single thing is taken from the player.
Typical uses:
taking a custom currency
running a command cost
syncing with another plugin
give-item
give-itemOnly useful for product-like item rewards.
If set to false, the plugin will not give the actual item, but give-actions can still run.
This is how most command shops work.
take
takeIf set to false, the single thing is still checked as a requirement, but it is not actually removed.
This is useful when you want:
a required item
but not an item that gets consumed
The Difference Between apply-conditions and require-conditions
apply-conditions and require-conditionsThis is the most important part of the whole system.
apply-conditions
apply-conditionsapply-conditions decides whether this single thing should be included in the transaction at all.
If the condition is not met:
the single thing is ignored
it is not selected
it does not affect price/product calculation
This is useful for:
VIP-only price tiers
seasonal products
different rewards for different players
different prices based on permissions or placeholders
Example:
Result:
normal players use
products.1VIP players can also use
products.2
require-conditions
require-conditionsrequire-conditions does not decide whether the single thing is selected. It decides whether the transaction is allowed to continue after that single thing has already been chosen and its amount has already been calculated.
If the condition is not met:
the transaction is blocked
the product/price was selected, but it cannot be used
This is useful for:
requiring a permission before paying or receiving a specific thing
blocking a reward unless a player meets an extra rule
stopping a transaction when a calculated amount should only work in some cases
Example:
Result:
this price can still be selected
but the purchase fails if the player does not have
shop.buy.special
Different from single thing's give-actions / take-actions and item's buy-actions / sell-actions
give-actions / take-actions and item's buy-actions / sell-actionsThese two action levels look similar, but they are not meant for the same job.
Single thing give-actions / take-actions
give-actions / take-actionsThese actions belong to one specific single thing.
They only run when:
that exact single thing is selected
and that exact single thing is really being given or taken
This means they are best for:
one special reward branch
one special price branch
one custom currency branch
one command that should only run for one single thing
Item buy-actions / sell-actions
buy-actions / sell-actionsThese actions belong to the whole shop item.
They run when:
the whole buy transaction succeeds, or
the whole sell transaction succeeds
They are not tied to one specific single thing branch.
This means they are best for:
global success messages
logging
sounds
commands that should always run after a successful buy or sell
effects that belong to the whole product, not one price or reward branch
The most important difference: {amount}
{amount}For single thing actions:
{amount}means the final amount of that specific single thing
For item actions:
{amount}means the product-level transaction amount passed by the buy/sell flowin common setups, this is the total displayed amount for the transaction
if
display-item.calculate-amountis disabled, it is usually just the buy/sell quantity
Example:
If the player buys this item 5 times:
the single thing
give-actionsreceives the real product amount for that branchthe item-level
buy-actionsreceives the transaction amount prepared by the item buy flow
In many normal setups, both values may look similar. But they are still coming from different layers, and they should be used for different purposes.
Practical rule
Use single thing actions when the logic belongs to one selected price or reward.
Use item actions when the logic should always run after a successful buy or sell, no matter which single thing branch was used.
Price-Only Options
These options mainly matter in buy-prices and sell-prices.
placeholder
placeholderThe display name used in price placeholders like {price}.
For prices, this should usually always be set.
start-apply, end-apply, apply
start-apply, end-apply, applyThese control when a price applies.
They are mainly meaningful in non-classic price modes:
ANYALL
Use them when you want:
early purchases to be cheap
later purchases to be expensive
specific purchase counts to use a specific price
min-amount and max-amount
min-amount and max-amountThese clamp the final dynamic amount.
Use them when:
your price formula can become too small
your price formula can become too large
Example:
About Modes: ANY, ALL, CLASSIC_ANY, CLASSIC_ALL
ANY, ALL, CLASSIC_ANY, CLASSIC_ALLYou do not need to understand every detail to use them, but this mental model helps:
ANY: one applicable single thing is used each time, and dynamic apply ranges can matter per quantityALL: all applicable single things are used each timeCLASSIC_ANY: one applicable single thing is used, but treated more like a fixed bundleCLASSIC_ALL: all applicable single things are used as a fixed bundle
Practical advice:
use
CLASSIC_ALLfor simple fixed-price shopsuse
CLASSIC_ANYfor "pick one valid reward/price" setupsuse
ANY/ALLonly when you need apply ranges or more advanced dynamic behavior
Shared Condition Keys
The plugin also supports shared apply-condition sections through config.yml:
That lets you write:
Important:
these shared keys are for apply conditions
require-conditionsis still configured inside the single thing itself
Two Very Common Patterns
Pattern A: Normal item shop
This is the simplest setup:
buying gives apples
buying costs money
selling takes apples
selling gives money
Pattern B: Command shop
In the above two examples, the final execution effect is identical. But can you think of it? If combined with the conditions option, using the give actions method can enable different players to execute different conditions!
Why this works:
the product exists so the plugin has something to process
give-item: falsestops the fake item from being givengive-actionsgives the real reward by command
When Should I Put Logic on the Item, and When on the Single Thing?
Use single thing logic when the rule belongs to one specific price or reward.
Good examples:
one VIP reward among several rewards
one seasonal price among several prices
one command reward that should only run in one branch
Use item-level logic like buy-actions, sell-actions, buy-conditions, sell-conditions when the rule should apply to the whole product no matter which single thing was selected.
Best Practices
Start with
CLASSIC_ALLunless you really need advanced behavior.Use
apply-conditionsto choose a branch.Use
require-conditionsto block a transaction.Use
give-item: falsefor command shops.Use
take: falsewhen something should be required but not consumed.Keep prices and rewards small and explicit before adding dynamic formulas.
If you use dynamic values, add
min-amountandmax-amountto avoid extreme results.
A Simple Rule of Thumb
If you are unsure which option to use:
"Should this branch be ignored?" -> use
apply-conditions"Should the transaction fail?" -> use
require-conditions"Should the plugin give/take a real item?" -> use
give-itemortake"Should a command run when this single thing is used?" -> use
give-actions/take-actions
That mental model is enough to build most shops correctly.
Auto Display Price at Item Lore
Download and install MythicChanger here. (This plugin requires packetevents)
Create a new file called
shop-display.ymlinplugins/MythicChanger/rulesfolder.Copy those content in this file and restart the server.

Last updated