how to make a Minecraft shop gui with Skript
Build a clickable chest-inventory shop for your Minecraft server using Skript. Players click items to buy them — money deducted, item given. No extra plugins needed.
A chest-inventory shop is one of the highest-impact features you can add to a Minecraft server. Players click an item, money gets deducted, the item lands in their inventory. With Skript and a few lines of Skript code, you can ship this in under ten minutes.
What you'll build
- A /shop command that opens a chest GUI
- Three buyable items (diamond, emerald, gold) with set prices
- Item-lock so players can't take items out of the GUI
- Money deduction on click + give the item if affordable
The pattern
Skript supports chest inventories natively — no addon needed. The trick is that `set slot X of <inv> to <item>` does NOT accept inline `named`/`with lore` modifiers. You have to assemble the item first in a temp variable, then assign it. The click handler uses `on inventory click` and matches the GUI by reference (storing it per-player) rather than by title, because Skript can't reliably read inventory titles back.
The code
command /shop: trigger: set {_gui} to chest inventory with 3 rows named "&aShop" set {_diamond} to diamond named "&bDiamond" with lore "&7Cost: $100" set slot 11 of {_gui} to {_diamond} set {_emerald} to emerald named "&aEmerald" with lore "&7Cost: $50" set slot 13 of {_gui} to {_emerald} set {_gold} to gold ingot named "&6Gold" with lore "&7Cost: $25" set slot 15 of {_gui} to {_gold} set {gui::%uuid of player%} to {_gui} open {_gui} to player on inventory click: if event-inventory is {gui::%uuid of player%}: cancel event if event-slot is slot 11 of event-inventory: if {money.%uuid of player%} >= 100: remove 100 from {money.%uuid of player%} give 1 diamond to player send "&aBought 1 diamond for $100." to player else: send "&cYou don't have $100." to player if event-slot is slot 13 of event-inventory: if {money.%uuid of player%} >= 50: remove 50 from {money.%uuid of player%} give 1 emerald to player send "&aBought 1 emerald for $50." to player else: send "&cYou don't have $50." to player
Adding click actions
The example above buys an item and gives money. You can add ANY effect: run a console command (`execute console command "/kit pvp"`), broadcast a server-wide message, play a sound, teleport the player. Multiple effects per slot are fine — just chain them under the same `if event-slot is slot N` block.
frequently asked
- Do I need skBee or any other plugin?
- No. This is 100% no-addon Skript. The chest inventory expression, slot assignment, click event, and the cancel-event effect are all built in.
- How do I add more rows?
- Change `chest inventory with 3 rows` to 1–6. Each row is 9 slots. Slot numbering starts at 0 in the top-left and goes left-to-right, top-to-bottom.
- Can the GUI auto-refresh prices from a variable?
- Yes — replace the hardcoded lore with a placeholder like `with lore "&7Cost: $%{price.diamond}%"`. Skript interpolates the variable when the slot is set.