The Plugin version can be read about at the SpigotMc page.
Client side mod that improves the shopping experience!! WIITS
!t
ShopShelves transforms the new Shelf Block (added in Minecraft 1.21.9) into flexible, server-friendly shops! This powerful server-side Fabric mod for Minecraft 1.21.9 allows administrators to create permanent, fixed-price shops and gives players the ability to set up their own chest-linked "Player Shelves" with custom prices, all powered by a configurable in-game economy.
The Following pictures depict the ingame shelf blocks in order:
Buy Shop | Sell Shop | Buy & Sell Shop | Custom Label | Player Shop
Statistics Book → Shows the total money earned / lost per slot's item.
Custom Price GUI — shift right-click a shelf to set custom prices per slot.
Customer-friendly viewer GUI to inspect the full item (potions, enchantments, etc.)
All general questions, feature requests, and non-urgent bug reports should be posted in the appropriate channels on our Discord Server. We actively monitor the server and will respond as soon as possible. This ensures that the whole community can benefit from the discussion and solutions.
While we prefer all issues to be handled via the Discord server first, you are welcome to PM me directly under specific urgent circumstances:
I will endeavor to answer your PM as soon as I can to be helpful and see what I can do to resolve your urgent issue. However, please understand that immediate responses are not guaranteed, and private messaging is a professional courtesy, not an entitlement. Thank you for your understanding and cooperation!
For mod developers, ShopShelves exposes shop shelf functions via the ShopshelvesApi class.
package me.andy.shopshelves.api;
import me.andy.shopshelves.logic.ShopHelper;
import me.andy.shopshelves.util.ShopShelf;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.ShelfBlockEntity;
import org.jetbrains.annotations.Nullable;
import java.util.Optional;
import java.util.UUID;
/**
* Public API for the ShopShelves mod.
* Other mods should use this class to safely check and interact with ShopShelves entities.
*/
public final class ShopshelvesApi {
private static final ShopshelvesApi INSTANCE = new ShopshelvesApi();
private ShopshelvesApi() {}
public static ShopshelvesApi getInstance() {
return INSTANCE;
}
/**
* Checks if a given BlockEntity is an active ShopShelf (any mode other than NONE).
*/
public boolean isShopShelf(@Nullable BlockEntity blockEntity) {
if (!(blockEntity instanceof ShelfBlockEntity) || !(blockEntity instanceof ShopShelf shopShelf)) {
return false;
}
return shopShelf.getShopMode() != ShopHelper.ShopMode.NONE;
}
/**
* Gets the current shop mode for a BlockEntity, if it is an active ShopShelf.
*/
public Optional<ShopHelper.ShopMode> getShopMode(@Nullable BlockEntity blockEntity) {
if (blockEntity instanceof ShopShelf shopShelf && isShopShelf(blockEntity)) {
return Optional.of(shopShelf.getShopMode());
}
return Optional.empty();
}
/**
* Gets the UUID of the owner of the shop, if it is an active ShopShelf.
*/
public Optional<UUID> getShopOwner(@Nullable BlockEntity blockEntity) {
if (blockEntity instanceof ShopShelf shopShelf && isShopShelf(blockEntity)) {
return shopShelf.getOwner();
}
return Optional.empty();
}
}
Required Mod: EcoBal Economy API
&c, &l, etc.), hex color codes (&#RRGGBB), and a newline marker (\n or &n) to split the label across two lines.\n / &n are stripped automatically.label_max_length in config.yml, default 64) counts only visible characters — color codes and the newline marker are ignored entirely.messages.yml, including open/close bracket text, color, and a brackets_per_line toggle:
true (default) — brackets wrap every line.false — opening bracket on the first line only, closing bracket on the last line only.pricing.yml): Set default buy and sell prices for items, including data-rich items like potions, enchanted books, goat horns, and player heads./shops price command to apply a one-time price stamp to a held item. That item can then configure a PlayerShelf or set custom slot prices on Admin Shops.amount argument; the shop calculates the correct unit price per transaction.TRIPLEPRICE: Shows the price per slot — ideal for multi-item Admin Shops.SINGLEPRICE: Shows one merged price for the shelf — forced for Player Shelves.en_us, de_de, fr_fr, etc.), fetched asynchronously from GitHub on startup.shopshelves.playershelves.5 for a limit of 5) or grant unlimited creation./shops admin) to bypass all shop protections and quickly configure shops.config.yml and messages.yml are automatically updated to add any new keys introduced in an update — old config files are never broken or reset./shops reload to refresh all settings, prices, and messages without a server restart./shops update to re-render all floating text displays across all worlds./shops, /shopshelves — Displays the main help page with clickable commands./shops admin — Toggles admin mode to bypass shop protection and configure shops./shops reload — Reloads config.yml, pricing.yml, and messages.yml./shops update — Forces a re-render of all floating text displays./shops mode [mode_name] — Views or sets the Message Delivery Mode (CHAT | ACTIONBAR | BOTH) or Price Display Mode (SINGLEPRICE | TRIPLEPRICE).shopshelves.itemprice):/shops itemprice — Shows the current global price settings for the held item./shops itemprice <price> <type> <amount> — Sets the global price for the held item.
<type>: buy, sell, or both<amount>: The quantity the price applies to (e.g., 64)shopshelves.price):/shops price <price> <type> <amount> — Creates or modifies a one-time price stamp on the held item.
shopshelves.command — Access to the base /shops help command. (Default: all players)shopshelves.admin — Usage of /shops admin mode. (OP Level 2)shopshelves.reload — Usage of /shops reload. (OP Level 2)shopshelves.update — Usage of /shops update. (OP Level 4)shopshelves.mode — Usage of /shops mode. (OP Level 4)shopshelves.itemprice — Usage of /shops itemprice to manage global pricing. (OP Level 2)shopshelves.price — Usage of /shops price to create custom price stamps. (OP Level 2)shopshelves.playershelf — Allows a player to create PlayerShelves. (OP Level 0 by default)shopshelves.playershelves.unlimited — Grants unlimited PlayerShelf creation. (OP Level 4)shopshelves.playershelves.<number> — Sets the maximum number of PlayerShelves a player can own (e.g., shopshelves.playershelves.10 for a limit of 10). (OP Level 2)shopshelves.setlabel — Allows setting a custom label on a shop. (OP Level 2)shopshelves.setlabel.color — Allows using color codes and hex colors in custom labels. (OP Level 4)
New advanced way of admin shops and playershops. ShopShelves and PlayerShelves