Chestly v1.2
Sell what's inside. Not what's on the sign. A physical container shop


Chestly
Sell what's inside. Not what's on the sign. A physical container shop plugin for Paper.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Dynamic Stock ◆ Atomic Transactions ◆ Two-Way Trading ◆ Paper 1.21 ◆ API + Events ◆ GUI Setup
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
What Chestly Solves
Most sign shops make you write item codes and [Buy] tags on the sign. Chestly does it differently. You link a physical container (chest, trapped chest, barrel, or copper chest) to a sign, give the shop a name and a price, and the container itself becomes the stock. The sign is just a presentation layer that Chestly renders for you.
The container inventory is the source of truth. Put a nether star in the chest and it is for sale. Take it out and it stops being for sale. Nothing is cached at link time, so you never edit a sign to change what is sold.
Every purchase is serialized per shop, validated against the live inventory, and rolled back on any failure. No item duplication, no double charges, no partial purchases.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Purchase Modes. Every Shop Independent.
Each shop picks its own buy mode, quantity, currency, sign style, and trade mode. Nothing is shared, so one shop can sell bundles while the next sells a single item.
◆ Buy Modes
- ANY Buys the configured quantity of the first stocked item.
- CHOOSE Opens a clear buyer menu with live stock and prices.
- RANDOM Buys a random stocked item.
- BUNDLE Buys one of every item type in the container.
◆ Trade Modes
- SELL Players buy from the shop. Right-click the sign.
- BUY The shop buys from players. Set a buy price and it pays the owner's balance.
- BOTH Right-click to buy, left-click to sell to the shop.
◆ Sign Presentation
- Three sign styles (default, classic, minimal) with configurable line templates and hex colors.
- Owners recolor the sign text with a vanilla dye, or reset it with a water bucket.
- Optional item-price holograms built from Display Entities, rebuilt safely on restart.
◆ Currencies
- Vault economy by default, plus item currency (for example 5 diamonds).
- External plugins register their own currencies through the API.
- Offline owners are paid into the container for item-currency sales, so no stock is lost.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Core Systems
◆ Dynamic Stock
- The container is the source of truth. Add an item and it is for sale; remove it and it is not.
- No item codes on signs and no [Buy] syntax.
◆ Atomic Transactions
- Per-shop locking serializes every purchase.
- Every mutation is rollback-aware, so a failure leaves the player whole.
- A journal records interrupted transactions, and /chestly check reports or clears them.
◆ Economy Controls
- Configurable sales tax withheld before the owner is paid.
- Per-player purchase limits, global or per shop, tracked persistently.
- Optional confirmation click for expensive purchases.
◆ Protections
- Hoppers and hopper minecarts cannot drain or flood shop containers.
- Anti-spam cooldown between purchases by the same player.
- Per-world enable and disable, with blacklist or whitelist.
◆ Notifications and Stats
- Owners are told once when a shop runs out of stock, and again when it restocks.
- Online owners are messaged on every completed sale, with income in green.
- Per-shop stats: items sold, total revenue, last sale time.
- PlaceholderAPI placeholders for the shop you are looking at.
◆ Developer API
- Create, delete, and query shops programmatically.
- Register currencies, selection strategies, container adapters, and protection providers.
- Listen to shop and purchase events, cancellable before a purchase.
◆ Multi-Language Support
- Built-in English and Polish, extensible by dropping a file in /lang/.
- All player-facing text lives in language files and supports hex colors.
- The language is a single line in config.yml.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How Chestly Compares
| Feature | Chestly | Manual / Sign-Item Plugins |
| Stock | Live from the container, nothing cached | Fixed codes on the sign, must be edited |
| Transactions | Atomic, per-shop lock, full rollback | Charge or dupes on interrupts |
| Buy modes | ANY, CHOOSE, RANDOM, BUNDLE | Buy one, fixed amount |
| Two-way selling | SELL, BUY, BOTH with a buy price | No sell-to-shop |
| Signs | Styles, templates, vanilla dyeing, hex | Plain lines, [Buy] tag required |
| Protections | Hopper lock, cooldown, world scope, confirm | None |
| API & events | Public API, currencies, adapters, events | No API surface |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Who This Is For
- Survival and SMP servers Players open a shop by filling a chest and linking a sign. No staff time writing item codes, no confusion over what is for sale.
- Economy-driven servers Sell and buy with Vault money or item currency, apply sales tax, and cap purchase limits.
- PvP and faction servers Expensive items can ask for a confirmation click, and an anti-spam cooldown stops rapid-fire purchases.
- Network owners Drop Chestly into any Paper 1.21 server. Per-world control, /chestly reload, and a SQLite database that needs no setup.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Technical Specs
| Server | Paper 1.21+, Java 21 |
| Storage | SQLite, resolved automatically by Paper |
| Dependencies | None required to run (Vault and PlaceholderAPI optional) |
| Soft dependencies | Vault, PlaceholderAPI |
| Languages | en_US, pl_PL (extensible) |
| Containers | Chest, trapped chest, barrel, copper chest (incl. waxed/oxidized) |
| Forward compatibility | UUID-based lookups, reflection-safe features degrade gracefully |
◆ Commands
| Command | Description | Permission |
| /chestly create | Opens the GUI-guided shop setup menu | chestly.create |
| /chestly list | Lists your shops (name, price, status) | chestly.edit |
| /chestly edit | Opens the editor for the shop you are looking at | chestly.edit |
| /chestly price | Sets the price of the shop you are looking at | chestly.edit |
| /chestly name | Renames the shop you are looking at | chestly.edit |
| /chestly delete | Deletes a shop (confirmation required) | chestly.delete |
| /chestly info | Shows shop information | chestly.use |
| /chestly reload | Reloads configuration | chestly.reload |
| /chestly check | Reports or clears interrupted transactions | chestly.admin |
◆ Permissions
| Permission | Description | Default |
| chestly.use | Use Chestly shops | true |
| chestly.create | Create shops | true |
| chestly.edit | Edit own shops | true |
| chestly.delete | Delete own shops | true |
| chestly.reload | Reload configuration | op |
| chestly.admin | Administer any shop | op |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Get Chestly
Sign-based shops should be simple. Link a chest to a sign, set a price, and let the container do the rest.
Dynamic stock. Atomic transactions. Two-way trading. One plugin.
Drop it in your plugins folder. It just works.
Questions? Open an issue on GitHub. Feature requests are reviewed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Product Info
Statistics
17
Views
0
Purchases
0
Downloads
204.20 KB
File size
28.08.2026
Published
03.09.2026
Updated
Info
Server type
Supported software
Supported Versions
1.21 - 26.2
Share & Earn
Share and earn part of the profits, an estimated €0.4 per product sale.