ShopDefinitionEntry
Typewriter Web panel: click Add Page, then use Search bar or + to create the entry with its exact identifier.
This entry is the central definition of a shop. Start with the “Overview” group, then add items and the layout. Advanced fields are only needed when the shop uses stock, taxes, views, or a submenu.
Overview and content
| Exact field | Role |
|---|---|
title | Displayed title. |
rows | Number of rows, from 1 to 6. |
fillerItem | Item used to fill empty slots. |
priceLore | Price lore format. |
items | List of ShopItemConfig objects. |
itemPools | References to item pools. |
Economy and taxes
| Exact field | Role |
|---|---|
currency | Currency type, including VAULT. |
balancePlaceholder | Value used to read the balance. |
addCommand | Add command for a custom economy. |
removeCommand | Remove command for a custom economy. |
taxRate | Tax rate. |
taxMode | PER_TRANSACTION or PER_ITEM. |
currencySymbol | Displayed symbol. |
priceFormat | Price format. |
defaultItemPrice | List of ItemCost (item + quantity per unit) applied to every item in priceMode: ITEMS that declares no itemPrice of its own. |
Barter — prices paid in items
An item whose priceMode is ITEMS is sold against one or several items instead of currency: "1 enchanted book for 12 copper ingots and 3 kelp".
| Exact field | Where | Role |
|---|---|---|
priceMode: ITEMS | ShopItemConfig | Enables barter for this item. |
itemPrice | ShopItemConfig | List of ItemCost: each line is an item plus a quantity per unit bought. Several lines are all required at once; buying N units multiplies every line. |
defaultItemPrice | ShopDefinitionEntry | Fallback list for every ITEMS item without its own itemPrice. An item's list replaces the shop's, it is never added to it. |
cannotAffordItemsMessage | ShopDefinitionEntry | Refusal when items are missing. {missing} = "3 × Kelp, 12 × Copper Ingot", {amount} = quantity bought. |
Rules enforced by the extension:
- An
ITEMSitem with no price anywhere is refused and logged, never given away: an empty price is not a zero price. - The payment is simulated on the whole inventory before anything is removed; a refused purchase never consumes part of the price. Space for the bought item is checked before the withdrawal, since a barter has no refund.
- A catalogue item is matched by its identity, not only by its material.
BUY_MAXbuys as many units as the inventory can pay for.- An
ITEMSitem cannot be sold back for currency: its sell price is zero.
Show the price with the {item_price} token in priceLore, defaultLoreFormat or the item's lore: one line per requested item, - 12 × Copper Ingot. {buy} and {sell} lines are dropped on such an item.
Stock and reset
| Exact field | Role |
|---|---|
reset | None, Cron, Interval, Daily, Weekly, or Monthly policy. |
defaultRefreshTicks | Default interval. |
perPlayer | Separates stock or state per player according to the service. |
artifact | Persistence reference. |
Layout, views, and submenu
| Exact field | Role |
|---|---|
layoutPool | GUI layouts used by the shop. |
mainLayoutId | Main layout. |
baseMenuId | Parent GUI menu to inherit. |
views | Shop views or tabs. |
defaultViewId | Default view. |
contentX / contentY | Origin of the item area. |
contentColumns / contentRows | Dimensions of the item area. |
subMenuLayoutId | Quantity submenu layout. |
subMenuTitle | Submenu title. |
interactionConfig | Action-to-click type mapping. |
In custom layout mode, ShopGuiService finds SHOP_ITEM markers, then inserts dynamic items and buttons. mainLayoutId must point to a real layout.
Limits and messages
| Exact field | Role |
|---|---|
globalPlayerLimit | Global per-player limit. |
globalBuyLimit | Global purchase limit. |
globalSellLimit | Global sale limit. |
infoMessage | Information message. |
cannotAffordMessage | Insufficient balance. |
cannotAffordItemsMessage | Missing items on a priceMode: ITEMS purchase ({missing}, {amount}). |
inventoryFullMessage | Full inventory. |
purchaseMessage / sellMessage | Purchase or sale confirmation. |
cannotSellMessage / notEnoughItemsMessage | Sale not possible. |
noEconomyMessage | Economy unavailable. |
criteriaFailMessage | Criteria not met. |
lockedItemMessage | Locked item. |
limitReachedMessage | Limit reached. |
Quantity dialogs
The fields buyAmountPrompt, sellAmountPrompt, amountConfirmButton, amountInputLabel, amountInputPlaceholder, amountInputWidth, amountInputMaxLength, and invalidAmountMessage customize BUY_CUSTOM and SELL_CUSTOM. Final validation requires a positive integer.
Display and notifications
defaultNameFormat and defaultLoreFormat define the default item rendering. notificationWebhookId identifies the webhook used by transaction notifications when configured.
Common error
If a shop opens but remains empty, check items, criteria, layoutPool, mainLayoutId, and SHOP_ITEM markers. If a button opens the menu but performs no transaction, check ShopButtonType, the action, and click permission.