Casino for Minecraft · 1.21+

SlotMachine

Real slot machines, built in your world from a jukebox and three item frames. Insert a token, spin the reels and win real money.

1.3.3Version
1.21+Server
VaultEconomy

Everything a casino needs

🎰
Real slot machinesBuild a working machine from a jukebox and three item frames.
💰
Cash prizesPrizes pay real money through Vault — EssentialsX, CMI, any economy.
🪧
Token shop signsPlayers buy their own tokens from a sign. No admin needed.
🎁
Growing jackpotThe jackpot grows with every spin until someone hits three diamonds.
🛡️
Break-proofNobody can mine, punch or blow up the machine. No WorldGuard needed.
🌍
Four languagesEnglish, Spanish, French and Chinese — fully editable.
✨
HologramsA floating jackpot display through DecentHolograms.

Installation

Get SlotMachine running on your server in a few minutes.

Requirements

RequirementNotes
ServerPaper / Spigot 1.21+
JavaJava 21+
VaultRequired — economy bridge
Economy pluginRequired — EssentialsX, CMI or any Vault economy
DecentHologramsRequired — jackpot hologram
PlaceholderAPIOptional (Premium)

Steps

  1. 1Download SlotMachine.jar from the resource page.
  2. 2Install Vault, an economy plugin (EssentialsX or CMI) and DecentHolograms.
  3. 3Drop SlotMachine.jar into the server's plugins/ folder.
  4. 4Restart the server (a reload is not enough on a first install).
  5. 5The files are generated in plugins/SlotMachine/ — config.yml, machines.yml and the lang/ folder.

Choosing the language

Open config.yml, set the language and run /slot reload.

language: "en" # en, es, fr, zh
🌍 When the plugin updates, if a version changes the wording of any message your language file is refreshed for you and yours is kept as en.yml.old. If you had customised messages, copy them across from it. config.yml is never overwritten: it only ever gains the new options.

Commands

Base command /slot — aliases /slots, /tragamonedas.

CommandWhat it doesPermission
/slot create <name> [reels]Start creating a machine. More than 3 reels: Premiumslotmachine.admin
/slot cancelAbort the machine you are creatingslotmachine.admin
/slot delete <name>Delete a machineslotmachine.admin
/slot getcoin [n] [token]Give yourself casino tokens. Choosing the token: Premiumslotmachine.admin
/slot setcoin <machine> <token>Set which token a machine accepts Premiumslotmachine.admin
/slot coinsList the configured tokens Premiumslotmachine.admin
/slot reloadReload the config and languagesslotmachine.admin
/slot top [won|plays|biggest]Winnings leaderboard Premiumeveryone
/slot statsYour own stats Premiumeveryone
/slot helpShow the help menuslotmachine.use
/slot verPlugin info and the edition in useslotmachine.use

Creating a machine

  1. 1Place a jukebox and, next to it, 3 item frames in a row.
  2. 2Run /slot create <name>. Letters, numbers, - and _ only (32 max).
  3. 3Right-click the jukebox — it becomes the heart of the machine.
  4. 4Right-click the 3 item frames in order (left to right). Glow item frames work too.
  5. 5Done! The machine is saved and a jackpot hologram appears above it.
💡 While you are creating a machine your right-clicks belong to the wizard, so doors and chests will not open. That is deliberate. Leave with /slot cancel at any time, and if you forget, the session expires on its own after 120 seconds.
💡 To play, a player right-clicks the jukebox holding a token. The reels spin and pay out if the symbols match.
🎰 Machines with more reels Premium — /slot create casino5 5 builds a five-reel machine. With no number it is 3, as always. Each machine remembers its own size, so 3-reel and 5-reel machines live side by side and your existing ones are untouched.

Permissions

Grant them with LuckPerms or any permissions plugin.

PermissionWhat it doesDefault
slotmachine.adminFull admin: create/cancel/delete, getcoin, reloadop
slotmachine.usePlay the slot machineseveryone
slotmachine.sign.createCreate token shop signsop
slotmachine.sign.useUse token shop signseveryone
slotmachine.bypassAllows breaking the blocks and item frames of a built machinenobody
slotmachine.discount.vip1VIP purchase discount Premiumop

Example (LuckPerms)

/lp group default permission set slotmachine.use true /lp group admin permission set slotmachine.admin true /lp group vip permission set slotmachine.discount.vip1 true
ℹ️ /slot top and /slot stats need no permission: any player can use them. On the Free version they reply that it is a Premium feature.

Token shop signs

Let players buy their own tokens from a sign — the price is charged through Vault.

Creating a sign

Place a sign and write. There are two shapes: the original one, and the one that also picks the token.

[Slots] [Slots] Buy Tokens Buy Tokens 20 vip 500
  1. 1Line 1 — [Slots] identifies the sign (required).
  2. 2Line 2 — the label text (customisable).
  3. 3Line 3 — the price, or the token id if you are going to use line 4. Premium
  4. 4Line 4 — the price, when line 3 holds the token. Leaving it empty is the original shape.

Using a sign

The player right-clicks, picks how many tokens to buy and confirms. The money is charged through Vault and the tokens are handed over instantly. Only the tokens that fit in the inventory are charged for.

💎 Premium: VIP ranks get automatic discounts through the slotmachine.discount.vip1/2 permissions.
💡 On creation, line 3 is rewritten with the token's name and the id is stored inside the sign itself, out of sight. That way renaming a token in the language file never breaks signs already built. Older signs, with an empty fourth line, keep working and sell the default token.

Configuration

Main file: plugins/SlotMachine/config.yml. Run /slot reload after editing.

ℹ️ FREE + PREMIUM = available in both · PREMIUM = Premium only (ignored on Free).

Language and licence

language: "en" # languages: es · en · fr · zh license: "" # [PREMIUM] paste your license from "My panel". 1 server per license.

Machine and jackpot FREE + PREMIUM

machine_settings: play_cost: 1 # coins per spin coin_value_for_jackpot: 50.0 # added to the jackpot per coin played jackpot: enabled: true # true = growing jackpot on starting_amount: 500.0 # value it resets to after a win

The creation wizard FREE + PREMIUM

Controls what happens while you are using /slot create. Added in 1.1.0.

machine_settings: creation: timeout_seconds: 120 # the session cancels itself after this (0 = never) max_frame_distance: 16 # max frame ↔ jukebox distance, in blocks (0 = no limit) allowed_reels: [3, 5] # [PREMIUM] sizes you may build (2 to 9)
💡 timeout_seconds exists because, while the wizard is open, your right-clicks belong to it. Setting it to 0 means a forgotten creation follows you until you use /slot cancel or log off.

The tokens PREMIUM

A token is more than an item: it carries what a spin costs and what that spin adds to the jackpot. That is why the token is the price tier: a machine accepts exactly one token, and whoever does not hold it cannot play there. Added in 1.3.0.

coins: default: material: "GOLD_NUGGET" play_cost: 1 # tokens per spin jackpot_value: 50.0 # added to the jackpot per token played vip: material: "DIAMOND" play_cost: 1 jackpot_value: 1000.0 # custom_model_data: 1001 # optional, for a resource pack texture
  • Names and lore go in lang/<code>.yml, under coins.<id>.
  • Point a machine at its token with /slot setcoin <machine> <token>.
  • The default token is special: it is what machines and signs fall back to when they say nothing else.
⚠️ Deleting the last machine that accepts a token — or changing its token — leaves players holding tokens they cannot spend anywhere. /slot delete and /slot setcoin warn you when that is about to happen.

Protecting the build FREE + PREMIUM

Stops anyone from breaking the machine: the jukebox, the 3 item frames, the items inside them and the walls they hang on. Works anywhere, with or without WorldGuard. Added in 1.2.0.

protection: enabled: true # false leaves the machine unprotected
  • Blocked: mining the jukebox, punching a frame, popping its item out, rotating it, explosions (creeper, TNT, bed), fire and pistons.
  • An explosion is not cancelled outright: only the machine's own blocks are pulled out of it, so the creeper still leaves its crater around it.
  • To remove a machine use /slot delete <name>, which cleans it up properly.
⚠️ The slotmachine.bypass permission is given to nobody by default, operators included. That is deliberate: the usual way to lose a machine is an admin tidying up in creative mode. Grant it only to someone who really needs to break the blocks by hand.

Spin speed FREE + PREMIUM

machine_settings: spin_duration: base_ticks: 60 # base spin duration (20 ticks = 1 s) reel_delay_ticks: 20 # delay between stopping each reel extra_random_ticks: 20 # extra random ticks (adds suspense) timeout_seconds: 15 # max time before cancelling a stuck spin

Reel symbols FREE + PREMIUM

The numbers are weights (rarity). Higher = shows up more often.

roulette_items: CHERRY_SAPLING: 60 # most common (never pays) COAL: 50 REDSTONE: 40 LAPIS_LAZULI: 35 IRON_INGOT: 25 GOLD_INGOT: 15 EMERALD: 8 DIAMOND: 3 # rarest, the jackpot symbol

Sounds FREE + PREMIUM

Bukkit/Spigot sound names. Swap them for any from the official list.

sounds: spin: "BLOCK_NOTE_BLOCK_PLING" # on spin win: "ENTITY_PLAYER_LEVELUP" # on win lose: "ENTITY_VILLAGER_NO" # on lose coin_insert: "ENTITY_ITEM_PICKUP" # on inserting the coin jackpot_win: "UI_TOAST_CHALLENGE_COMPLETE" # on jackpot win gui_click: "UI_BUTTON_CLICK" # menu click

Prize payouts FREE + PREMIUM

On the Free version every prize only pays money (the reward field).

prizes: jackpot_emerald: { reward: 5000.0 } gold_win: { reward: 1000.0 } iron_win: { reward: 500.0 } two_diamonds: { reward: 250.0 } two_emeralds: { reward: 100.0 }
💎 What follows only works on Premium. On the Free version these sections are ignored without any error.

Advanced prizes PREMIUM

On top of reward, every prize accepts: commands, items, a broadcast, a title, fireworks and a sound.

prizes: jackpot_emerald: reward: 5000.0 broadcast: "&e{player} &ahit triple emerald for &6${amount}&a!" # server-wide broadcast title: "&aBIG WIN!" # on-screen title firework: true # launches fireworks sound: "UI_TOAST_CHALLENGE_COMPLETE" # prize-specific sound items: - "DIAMOND:3" # gives items (MATERIAL:amount) commands: - "give {player} gold_ingot 5" # runs commands as console gold_win: reward: 1000.0 commands: - "give {player} gold_ingot 5"

Placeholders: {player} = player · {amount} = money won.

Jackpot rewards PREMIUM

jackpot: enabled: true starting_amount: 500.0 rewards: # extra on JACKPOT win (besides money) commands: - "broadcast &6&l{player} &ewon the JACKPOT of &a${amount}&e!" title: "&6&lJACKPOT!" firework: true

Play limits PREMIUM

Responsible play. 0 = disabled.

limits: cooldown-seconds: 0 # wait between spins (seconds) daily-plays: 0 # max spins per day per player cooldown-message: "&cWait {time}s before playing again." daily-limit-message: "&cYou reached your daily limit of {limit} plays."

Discord alerts PREMIUM

discord: enabled: false # true to enable webhook-url: "" # your channel webhook URL min-amount: 1000.0 # only alert if the win reaches this win-message: ":moneybag: **{player}** won ${amount} on the slots!" jackpot-message: ":tada: **{player}** won the JACKPOT of ${amount}!"

VIP discounts PREMIUM

A discount on token purchases based on the player's permission.

purchase_discounts: vip1: permission: "slotmachine.discount.vip1" percentage: 10 # 10% discount vip2: permission: "slotmachine.discount.vip2" percentage: 25 # 25% discount

Prizes and how to win

Match the symbols across the three reels. Only these combinations pay out:

CombinationSymbolPrize
💎 💎 💎JACKPOTThe growing jackpot
💚 💚 💚Emerald$5,000
🥇 🥇 🥇Gold$1,000
⚙️ ⚙️ ⚙️Iron$500
💎 💎 ⬦Two diamonds + any$250
💚 💚 ⬦Two emeralds + any$100
⚠️ No other symbol pays — not even three of a kind. The rarer the symbol, the bigger the prize.
💡 The ANY wildcard matches any symbol and is resolved last: ANY,DIAMOND,DIAMOND pays out no matter what order the reels land in.

5-reel machines PREMIUM

A combination applies to the machine with exactly as many symbols as it lists. That way both tables live in one file without interfering, and you never have to say which machine a prize is for. Added in 1.3.0.

"DIAMOND,DIAMOND,DIAMOND" # only 3-reel machines "DIAMOND,DIAMOND,DIAMOND,ANY,ANY" # only 5-reel machines
⚠️ Mind the odds. With the default weights a diamond lands about once every 79 spins. Asking for five of a kind is 1 in 3,000,000,000: it never happens. That is why the 5-reel prizes ask for 2 or 3 matching symbols plus ANY wildcards. The rule: more reels means more wildcards, not more matches.
CombinationOddsPrize
💎💎💎 + 2 ANY1 in 50,000JACKPOT
💚💚💚 + 2 ANY1 in 2,750$10,000
💎💎 + 3 ANY1 in 640$2,000
🥇🥇🥇 + 2 ANY1 in 440$1,000
⚙️⚙️⚙️ + 2 ANY1 in 105$300

Free vs Premium

Both editions are the same plugin. The free one is a complete casino; Premium lifts the limit and adds the rewards side.

FeatureFreePremium
Slot machines and cash prizes✓✓
Growing jackpot and holograms✓✓
Token shop signs✓✓
Four languages✓✓
Number of machines2Unlimited
Item, command and permission prizes—★
VIP discounts—★
Leaderboards, stats and PlaceholderAPI—★
Discord alerts, cooldowns and limits—★
Machine size3 reels2 to 9 reels
Kinds of token1As many as you like
Last-winner line—★
ℹ️ You can move from Free to Premium without losing anything: the Premium jar reads the same machines.yml and the same config.yml. You only need to paste the licence.
SlotMachine / Changelog

Version history

Every release and what changed in it.

v1.3.3 2026-09-29 Latest
  • ✨No licence key needed any more: install the jar and it works. The licence terms stay the same: one purchase covers one server (or one network under the same owner).
v1.3.1 2026-09-29
  • 🐛Fixed the plugin failing to start with "NoClassDefFoundError: eu/decentsoftware/holograms/api/DHAPI" when the installed DecentHolograms did not match.
  • 🐛/slot reload and changing the language no longer drop the machines built since the server started, nor put every jackpot back to its value at startup.
  • 🐛Fixed machines disappearing from machines.yml after a reload. An entry that cannot be loaded is now kept in the file as it is instead of being erased.
  • 🐛Buy signs keep working after changing the language: a sign built as [Slots] still sells under [Tragamonedas], and is relabelled in the new language.
  • 🐛Old tokens without a mark keep working after changing the language.
  • 🐛A reload or a restart in the middle of a spin now gives the token back instead of eating it.
  • 🐛Deleting a machine in the middle of a spin no longer leaves its board floating.
  • 🐛Machines in a world loaded by another plugin (Multiverse, InfiWorlds...) no longer lose their location, and come up on their own once that world loads.
  • 🐛A machines.yml that cannot be read is no longer overwritten with an empty one. The plugin leaves it untouched and says so in the console.
  • 🔧DecentHolograms is no longer needed. The jackpot board is now a native Minecraft text display: same lines, same place, same colours.
  • 🔧The board is never saved into your world and redraws itself if an anti-lag plugin or /kill removes it. Anti-lag plugins can skip the entity tag "slotmachine".
  • 🔧Hex colours written for DecentHolograms (&#RRGGBB, {#RRGGBB} and <#RRGGBB>) keep working in jackpot.hologram_lines.
  • 🔧Language files now refresh themselves when an update changes their text, keeping your old file as a .old backup.
  • ✨New board settings under 'hologram': height, scale, background-opacity, full-brightness and view-range.
  • 🔧Just replace the jar. Machines, jackpots and signs stay as they are. The new settings are added to config.yml automatically.
  • 🔧Your language file is refreshed on this update and the old one kept as lang/en.yml.old (same for es, fr, zh). Customised messages? Copy them across.
  • 🔧You can remove DecentHolograms if no other plugin needs it. Keeping it installed changes nothing.
v1.3.0 2026-09-07
  • ✨Machines can now use different tokens, each with its own price, spin cost and jackpot contribution.
  • ✨A machine accepts exactly one token, so a VIP machine is closed to anyone without a VIP token.
  • ✨Buy signs can sell a specific token: put its id on line 3 and the price on line 4.
  • ✨/slot setcoin <machine> <token>, /slot coins, and /slot getcoin [amount] [token].
  • ✨Machines can be built with more than 3 reels: /slot create <name> 5. Any size from 2 to 9.
  • ✨A prize combination now applies to the machine size with exactly that many symbols, so 3-reel and 5-reel prize tables live side by side in one config.
  • ✨The floating board can show the last winner and what they took.
  • 🔧Deleting a machine, or changing its token, now warns you when that leaves players holding tokens they can no longer spend.
  • 🔧The board has its own switch (hologram.enabled), so you can keep it with the jackpot turned off.
  • 🔧The spin timeout now adapts to the number of reels instead of cutting long spins short.
  • 🔧config.yml ships a ready-made 5-reel prize table with the real odds commented in.
  • 🔧Language files now refresh themselves when an update changes their text, keeping your old file as a .old backup.
  • 🔧/slot getcoin points out the other tokens on the server when you do not name one.
v1.2.0 2026-09-05
  • ✨A built machine can no longer be broken: the jukebox, the item frames, the items inside them and the walls they hang on.
  • ✨Protection works anywhere, with or without a WorldGuard region.
  • ✨New permission slotmachine.bypass for breaking machine blocks by hand. Nobody has it by default, operators included.
  • ✨New option protection.enabled to turn the whole thing off.
  • 🔧Explosions are no longer cancelled outright: only the machine's own blocks survive, so the crater around it still happens.
  • 🔧The refusal message says which machine the block belongs to, and is throttled so punching a frame cannot flood the chat.
v1.1.0 2026-09-05
  • 🐛An unfinished /slot create left the admin unable to right-click anything, with no way out but relogging.
  • 🐛Every message in the creation wizard was sent twice, and each frame click reported "selected" and "already selected" at once.
  • 🐛"Creation mode started" was announced even when no session had opened, leaving you clicking a jukebox that never answered.
  • 🐛Machine names containing a dot corrupted machines.yml.
  • 🐛Two machines could be bound to the same jukebox or the same item frame, leaving the second one dead.
  • 🐛/slot reload did not stop spinning machines, which could leave two spins running on the same frames.
  • 🐛Buy signs still opened the shop menu while you were creating a machine.
  • ✨/slot cancel aborts the machine you are creating.
  • ✨Creation sessions now expire on their own (machine_settings.creation.timeout_seconds, default 120s).
  • ✨Item frames must be near their jukebox (machine_settings.creation.max_frame_distance, default 16 blocks).
  • 🔧The wizard now says what is still missing instead of swallowing clicks in silence, and glow item frames work too.
  • 🔧Tab completion for /slot, including machine names on /slot delete.
  • 🔧Machine names are validated up front, and /slot ver now shows which edition is running.
v1.0.3 2026-08-17
  • 🐛A machine could lock up for good — if anything went wrong while paying out a spin, the machine was never released and answered "in use" to everyone until the next restart, repeating the error in conso
  • 🐛Prizes written with ANY first did not pay properly. ANY,DIAMOND,DIAMOND only paid depending on the order the reels landed in, with no warning. Wildcards are matched last now, so a prize pays the same
  • 🐛Tokens can no longer be faked — the machine recognised a token by material, name and lore alone. Tokens now carry an invisible mark that cannot be reproduced in-game. Old tokens keep working via coin.
  • 🐛No more losing a token to nothing — if the spin could not start, the token had already been taken, with no spin and no message. It is charged once the reels are turning.
  • 🐛Tokens and prize items no longer vanish when your inventory is full — they drop at your feet.
  • 🐛Breaking an item frame mid-spin no longer leaves the machine writing to a frame that is not there.
  • 🔧The token is configurable at last — the plugin read coin.material, but that section was never written into config.yml. It is there now, documented.
v1.0.2 2026-07-23
  • 🔧The shop now checks free space before charging, and bills only for the coins it delivers.
  • 🐛Coins that did not fit in the inventory were lost after being paid for.
  • 🐛A failed payment handed out the coins anyway, without charging for them.
  • 🔧New warnings for a full inventory and for a capped purchase, in all four languages.
v1.0.1 2026-08-17
  • 🐛Restarting the server no longer eats the bets. A stake is charged the moment the chip goes down, and bets lived only in memory: stopping the server with chips on the felt — or mid-spin — kept the mone
  • 🐛One failed payout no longer costs the rest of the table. If settling a bet went wrong, every player after it went unpaid with their stake already taken. Each bet settles on its own now, and failures a
  • 🐛Pulling a chip back now checks the money actually arrived. Placing a bet verified the charge but taking it back did not, so a failed refund cost the player both the chip and the money. The chip now st
SlotMachine / Discussion

Discussion

Comment and share your experience on each plugin version.

Log in to comment on this version.Log in

No comments on this version yet — be the first!

SlotMachine / Reviews

Player reviews

What server owners think of this plugin.

5.0
★★★★★
1 reviews
Log in to leave a review.Log in
DA
damian 👤 Usuario⚔️ ElementalArms🎰 SlotMachine 20 Jul 2026
★★★★★

Muy buen plugin!