ChestShop#
ChestShop lets you set up automatic buy/sell shops with just a chest and a sign, so players can trade with you even while you're offline. It's a long-running community plugin — originally by Acrobot and the ChestShop authors — that we run in a version adapted for our servers, so shops settle through Treasury and can pay into a business account.
This page is the full sign format and command list; for a walkthrough, see Selling with ChestShops.
The shop sign#
A shop sign has four lines, in this order:
Steve line 1 — owner
64 line 2 — quantity
100 : 90 line 3 — price
DIAMOND line 4 — item
Line 1 — owner#
Who the shop belongs to.
| Value | Meaning |
|---|---|
| your name | A personal shop — money goes to you. |
| (blank) | Filled in with your name automatically. |
A:<alias> |
A player-managed, letters-only business shop alias, set by the proprietor with /business account alias <firm> <accountId> <alias>. The alias stays visible on the sign, including after trades. |
B:<code> |
A firm account — money goes to the company. The code after B: is a short base-36 code for the account, not the account's decimal number, so copy it exactly as shown. Get it from /business account list (or the Explorer). See ChestShops for your firm. |
G:<name> |
A government account — money goes to that department, e.g. G:GovJustice. Use G:#<code> (the account's base-36 id) when G: plus the name is too wide for the sign; the sign then keeps whichever form fits. Needs ChestShop.government.<name>. See Government shops. |
b:<FirmName> |
An older legacy form — lowercase b: plus the firm's name, which resolves to that firm's default business account. Still works (the prefix is matched case-insensitively) and the sign quietly self-heals to the modern B:<code> form. |
Admin Shop |
An admin shop with unlimited stock and no chest, backed by the server. Needs the ChestShop.adminshop permission. |
Line 2 — quantity#
How many items move per trade — a whole number. For example 64 trades a full stack at
a time. A single trade can move at most 3456 items (a double chest of 64 stacks).
Line 3 — price#
The B and S letters set the buy and sell prices — from the customer's point of
view:
| Value | Meaning |
|---|---|
B 100 |
Players buy from the shop for 100 (the shop sells to them). |
S 90 |
Players sell to the shop for 90 (the shop buys from them). |
100 : 90 |
Both — the first number is the buy price (100), the second is the sell price (90). |
NOTE
Free shops are disabled by default (ALLOW_FREE_SHOPS is off). A 0/free
price is rejected at creation, and any pre-existing free shop is removed when next used.
The letter can go before or after the number (B 100, 100 B, and 100B all work). A
plain number with no letter — like 100 — becomes a buy-only shop (the same as
B 100).
NOTE
A shop's sell price can't be higher than its buy price — that would let players buy-then-sell for free profit, so the server rejects it.
Numbers accept K and M shorthand: 1.5K = 1,500, 2M = 2,000,000.
Line 4 — item#
The item being traded, e.g. DIAMOND or OAK_PLANKS. Use ? to fill it in from the
item you're holding when you place the sign.
Custom items (from the Nexo item plugin) go on this line too — as a short item
id or configured nickname (e.g. ruby_gem) rather than a vanilla material name. The
simplest way is to hold the item and use ?, which encodes it correctly; /iteminfo
shows the exact text otherwise. Custom items trade identically to vanilla ones. (Item ids
appear bare, without a nexo: prefix, because a colon isn't allowed on the item line.)
See Selling custom items.
TIP
Not sure what an item is called? Hold it and run /iteminfo. You can also look one up
by name — e.g. /iteminfo log.
NOTE
Partial trades. A trade isn't all-or-nothing: if the shop can't cover the full
quantity, it serves as much as it can and charges/pays only for that — a customer
gets the 12 items left in a chest that advertises 64, or as many as their money covers.
A side stops only when it reaches zero (no stock, no room, or the customer can't
afford one item). Controlled by ALLOW_PARTIAL_TRANSACTIONS (on).
Commands#
| Command | What it does |
|---|---|
/shopinfo |
Show details of the shop you're looking at — owner, item, quantity, prices. Aliases: /sinfo, /shop. |
/iteminfo [item] |
Show the name and shop code for the item in your hand, or for a named item (e.g. /iteminfo log). Alias: /iinfo. |
/find [item] |
Search every shop on the server for an item and browse the results. |
/chestshop |
Show ChestShop command help (also /chestshop help [page]). Alias: /cs — every subcommand below works as /cs … too. |
/chestshop notify |
Turn the "someone used your shop" messages on or off. |
/chestshop toggle visibility <true|false> |
Show or hide the shop you're looking at in /find results. Shop owner (or admin) only. |
/chestshop toggle hologram <true|false> |
Show or hide the floating item preview above the shop you're looking at. Shop owner (or admin) only. |
/chestshop toggle preview <true|false> |
Show or hide shop item previews for yourself. |
/chestshop bypass |
Admin: toggle your own admin bypass — off lets you use shops as a normal customer. |
/chestshop version |
Admin: show the ChestShop version. |
/chestshop reload |
Admin: reload the ChestShop configuration. |
/chestshop metrics |
Admin: show server-wide shop metrics. |
/chestshop give <item code> [amount] [player] |
Admin: give an item by its shop code. |
/chestshop importpreferences |
Admin/console: import missing player preview preferences from plugins/ChestShop/legacy-preferences.jsonl, preserving newer native choices. |
/chestshop importlegacy |
Admin/console: import missing shops from plugins/ChestShop/legacy-shops.jsonl; preserves existing rows. See the repository cutover runbook. |
/chestshop resync <chunks> |
Admin/console: rebuild the /find registry from loaded chunks in all loaded worlds; argument is chunks per tick (1–64), not a radius. |
Shops and firms#
To make a shop pay a company instead of a person, put the firm account's code (something
like B:G, from /business account list) on the owner line. The bit after B: is a
short base-36 code for the account, not its decimal number, so copy it exactly.
Building firm shops needs the
CHESTSHOP permission in that firm. Full walkthrough:
ChestShops for your firm.
Government shops#
Staff can run shops whose money goes to a Treasury government account. Put
G: and the account's name on the owner line (G:GovJustice; upper/lower case
doesn't matter). If G: plus the name doesn't fit on one sign line (for
example DCGovernmentJUD), use the account's base-36 id instead: G:# followed by
the id written in base 36. ChestShop writes the readable name back whenever it fits.
You need ChestShop.government.<account name> in lowercase (for example
ChestShop.government.govjustice) to build, open or break that account's shops.
ChestShop.government.* covers every government account; setting a single account's
node to false still excludes it. ChestShop.othername.* does not grant
government shops. Archived accounts can't be used, and neither can the Treasury system
accounts listed in GOVERNMENT_SHOP_BLOCKED_ACCOUNTS (by default starting-balances,
GovernmentFines and TreasuryIngest), even by admins.
WARNING
Most department accounts can go overdrawn without limit, so a government shop that buys from players (an S price) keeps paying however low the balance gets. Only grant these nodes to people trusted to spend that account's money.
Permission nodes#
ChestShop nodes use a ChestShop. prefix (defaults: true = everyone, op = operators).
Commands#
| Command (aliases) | Node | Default |
|---|---|---|
/iteminfo (/iinfo) |
ChestShop.iteminfo |
true |
/shopinfo (/sinfo, /shop) |
ChestShop.shopinfo |
true |
/find |
ChestShop.find |
true |
/chestshop notify |
ChestShop.toggle |
true |
/chestshop toggle visibility · toggle hologram |
shop owner, or ChestShop.admin |
— |
/chestshop toggle preview |
none | everyone |
/chestshop bypass · version · reload · metrics · give · resync · importlegacy · importpreferences |
ChestShop.admin |
op |
Using and building shops#
| Node | Grants | Default |
|---|---|---|
ChestShop.shop.* |
Use shops — parent of create/buy/sell | true |
ChestShop.shop.create |
Create a shop (parent of .create.buy / .create.sell) |
inherits true |
ChestShop.shop.buy |
Buy from a shop | true |
ChestShop.shop.sell |
Sell to a shop | true |
ChestShop.admin |
Modify/destroy others' shops; create admin shops (parent of ChestShop.adminshop) |
op |
ChestShop.adminshop |
Create/destroy Admin Shops | inherits from ChestShop.admin |
ChestShop.mod |
View other players' shop chests (no destroy/admin powers) | op |
ChestShop.government.<name> · ChestShop.government.* |
Build and run shops owned by that government account, or by any (Government shops) | op |
ChestShop.nofee |
Skip the shop-creation fee | op |
ChestShop.notax.buy |
Treasury adapter: exempt the initiating player from trade tax, for either direction | op |
ChestShop.notax.sell |
Declared compatibility node; not independently checked by the current Treasury adapter | op |
ChestShop.nolimit.buy.min · .buy.max · .sell.min · .sell.max |
Legacy declarations; the upstream price-limit system was removed | op |
NOTE
Most of these have per-item and per-category variants — e.g.
ChestShop.shop.create.<itemType>, ChestShop.shop.buy.<itemType>, or category
groups like ChestShop.shop.create.food — for restricting which items a player may
trade. There are also per-name nodes (ChestShop.name.*, ChestShop.othername.*)
for shared/town shops. See the upstream ChestShop plugin.yml for the full list.
Finder controls and compatibility aliases#
/find toggle visibility <true|false> and /find toggle hologram <true|false>
act on the shop you are looking at with the same owner/admin checks as the
ChestShop forms; /find toggle preview <true|false> changes your own preference.
The compatibility /csdb find [item] and /csdb find toggle ... forms forward
to the native finder; /csdb reload and /csdb resync <chunks> require admin.
Use /chestshop resync <chunks> as the canonical repair command.
Finder results include batch quantity, stock/capacity observations and configurable location labels. Java results expose transit and GPS actions; Bedrock uses an inventory menu with left/right actions. Navigation runs with your own permissions; a displayed result is not a guarantee that stock or travel access is still valid.
Typed searches accept staff-configured search aliases and suggest item codes using case-insensitive substring matching. Suggestions can take up to 30 seconds to reflect newly registered items; codes containing spaces are supported. These search aliases do not change the item code on a shop sign.
Java results provide Inspect item to check the stored item's name, enchantments and metadata. In inventory results, shift-right-click opens the inspector; ordinary right-click also does so when GPS/navigation is unconfigured. Use Back to return to the same page. Inspection does not transfer the item.
Ordinary item purchases complete on the buy click without a confirmation menu. Wildcard shops let you choose a specific item variant and confirm its purchase.
To create a wildcard shop, put at least one matching item in the connected chest
first. For example, stock an amethyst shard or block before using amethyst* on
the item line. Patterns match a case-insensitive prefix followed by one *.
The wildcard chooser shows one entry per unstackable custom item type, such as a Nexo wallet. Its purchase preview uses a real item from stock, preserving that item’s metadata. Obsolete holograms are removed within a second when their sign is deleted or edited, including edits made by another plugin.