Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
MineGames

MineGames is a Paper 1.21+ casino plugin with four game types:
- MineGame: reveal safe blocks, avoid mines, cash out at your chosen point.

- Roulette: perpetual rounds where players bet on red/black/green.

- Slots: lever-driven reels with configurable widths, rows, frames, and payouts.

- Fights: wager on randomly equipped mobs battling inside a protected arena.

All games use Vault economy, support per-station cosmetics, holograms, and casino frame animations.
Requirements
- Java 21
- Paper 1.21+
- Vault (for example VaultUnlocked)
- A Vault-compatible economy plugin (for example EconomyProvider by ilius)
Install
- Place
minegames-1.x.x.jarinplugins/. - Ensure Vault + economy plugin are installed.
- Start/restart server.
- Edit
plugins/MineGames/config.ymlas needed. - Create stations:
- MineGame station: stand on your station block and run
/minegameadmin create - Roulette station: stand at board center and run
/rouletteadmin create - Slots station: stand where you want the machine and run
/slotsadmin create [3-8] [1|2] - Fights station: stand at the arena origin and run
/fightadmin create [odd-size] [fighters]
Casino Settings GUI
Operators can open the inventory-based settings menu with:
/casinogui
The GUI includes MineGame, Roulette, Slots, and Fights. Select a game to edit global settings, browse its stations, and edit supported per-station overrides. Global changes override existing station settings. Previous/Next navigate settings pages, and Back/Stations provide navigation.
Gameplay
Mines
- Stand on a MineGame station block.
- Start a game:
/minegame <mines> <wager> - Break/click tiles to reveal safe blocks.
- Cash out with
/minegame cashoutor by breaking a frame block. - Lose by hitting a mine or timeout, win by clearing all safe tiles.
Roulette
- Stand near a Roulette station.
- Place bet:
/roulette <red|black|green> <amount> - Bets close when countdown ends, then spin/result phase resolves.
- Payouts apply automatically for winning color bets.
- Round resets and repeats continuously.
Slots
- Stand near a Slots station.
- Pull the lever to spin and pay the configured wager.
- Reels animate for a few seconds and then stop from left to right.
- Matching the winning block pays out based on how many appear or which payline lands.
- The station can be customized with outer frame, inner frame, winning block, row count, and lever-side frame animation.
Fights
- Stand near a Fights station.
- Place a bet:
/fighter <fighter-number> <amount>. - The first accepted bet opens the countdown; fighters spawn only when betting closes.
- Two fighters run as a duel. Three or more fighters run as a free-for-all.
- Fighters receive random weapons, armor, enchantments, colors, and supported variants, then fight until one remains. The pool includes zombie, husk, drowned, zombie villager, skeleton, stray, bogged, wither skeleton, pillager, piglin, piglin brute, and zombified piglin fighters. Winning bets pay automatically, losing bettors are notified, and the winner is celebrated with fireworks.
- Set
fights.show-bettor-name-on-fighterto show the bettor in the mob nameplate. Setfights.fireworks-for-winning-bettorstotrue(the default) to add fireworks from all four arena corners for winning bets. - All rolled weapons, including tridents, use armor- and enchantment-aware damage calculations.
Winner Math & RNG
-
MineGame
- Mine positions are generated once when the round starts with
Math.random(), usinggenerateMines(mines, gridSize * gridSize). - Mines are placed uniformly without replacement, so the same cell cannot become a mine twice.
- The player wins by revealing enough safe tiles before hitting a mine or timing out.
- Payout is based on revealed safe tiles. If
minegame.game.max-multiplieris set above0, the multiplier scales linearly from1xup to the configured max. Otherwise, it uses the inverse of the survival probability with a house-edge factor applied. - The survival math uses combinations:
surviveProbability = C(safe, revealed) / C(total, revealed).
- Mine positions are generated once when the round starts with
-
Roulette
- Each round builds a full board pattern from the configured color percentages:
roulette.red-percent,roulette.black-percent, androulette.green-percent. - The counts are normalized to the board size, then green cells are assigned randomly and the remaining cells are shuffled with Java
Random. - When the spin resolves, the selector lands on a random board index and the color stored at that index becomes the winning color.
- Payout uses the configured color multiplier, then applies the house-edge factor:
effectiveMultiplier = rawMultiplier * (1 - houseEdgePercent / 100).
- Each round builds a full board pattern from the configured color percentages:
-
Slots
- Each reel cell is filled independently from
slots.blocks.reel-optionsusing JavaRandom. - The configured winning block is always included in the symbol pool, even if it is omitted from the config.
- A win is counted by matching the station’s
slots.blocks.winningmaterial across the final grid. - For single-row stations, the total number of matching symbols is used directly. For two-row stations, the code checks top line, bottom line, diagonal, reverse diagonal, full screen, and mixed line patterns.
- Payout is
wager * multiplier, where the multiplier comes fromslots.payout-multipliersand is then scaled by station size and the detected pattern.
- Each reel cell is filled independently from
-
Fights
- Each fighter is selected independently from the supported zombie, skeleton, pillager, and piglin variants at round reset.
- Weapons and armor are selected independently from the configured in-code pools. Leather armor receives a random color.
- Each rolled item receives a random set of compatible enchantments (up to three), with a random level up to the enchantment maximum.
- Weapon base damage, Sharpness/Smite, Power, Impaling, Fire Aspect, armor points, Protection, Projectile Protection, and Thorns all influence combat damage or retaliation.
- Ranged attacks, including tridents, use the same isolated fighter damage path and apply armor/enchantment mitigation before health is reduced.
- A winning bet pays
bet * fights.payout-multiplier * (fighter-count / 2). The configured multiplier and fighter count determine the potential payout shown on the hologram.
-
RNG notes
- MineGame uses
Math.random()for mine placement. - Roulette and Slots use a shared
java.util.Randominstance. - Fighter types, equipment materials, leather colors, enchantment choices, and enchantment levels use Java
ThreadLocalRandom(with compatible enchantments shuffled before selection). - The random rolls are generated when fighters are spawned and equipped; they are not seeded for replayable outcomes.
- None of the games use seeded or cryptographic RNG, so results are game-random rather than replay-deterministic.
- MineGame uses
Commands
Player Commands
- Mines:
/minegame <mines 1-24> <wager>/minegame cashout
- MineGame aliases:
/mine,/mines - Roulette:
/roulette <red|black|green> <amount>
- Fights:
/fighter <fighter-number> <amount>
MineGame Admin (mine.admin)
Primary command: /minegameadmin (legacy alias: /mineadmin)
- Station lifecycle:
/minegameadmin create/minegameadmin remove/minegameadmin regen/minegameadmin list/minegameadmin reload
- House accounting:
/minegameadmin housebalance/minegameadmin housewithdraw <amount|all>
- Toggles:
/minegameadmin holo <on|off>/minegameadmin debug <on|off>
- Public result announcements:
/rouletteadmin set global announcements.broadcast-win <true|false>/rouletteadmin set global announcements.broadcast-loss <true|false>/slotsadmin set global announcements.broadcast-win <true|false>/slotsadmin set global announcements.broadcast-loss <true|false>
- Global config:
/minegameadmin set [global] <path> <value>/minegameadmin set [global] <path>(shows current value)
- Per-station cosmetics (or all stations):
/minegameadmin setframe [all] <BLOCK|reset>/minegameadmin sethidden [all] <BLOCK|reset>/minegameadmin setsafe [all] <BLOCK|reset>/minegameadmin setmine [all] <BLOCK|reset>
- Per-station casino frame (or all stations):
/minegameadmin casinoframe [all] <BLOCK> <pattern 1-10>/minegameadmin casinoframe [all] mode <idle_only|always>/minegameadmin casinoframe [all] <off|reset>
Roulette Admin (roulette.admin)
- Station lifecycle:
/rouletteadmin create/rouletteadmin remove/rouletteadmin regen/rouletteadmin list/rouletteadmin reload
- House accounting:
/rouletteadmin housebalance/rouletteadmin housewithdraw <amount|all>
- Global config:
/rouletteadmin set [global] <path> <value>/rouletteadmin set [global] <path>(shows current value)- Global settings override existing station overrides; for example,
/rouletteadmin set global announcements.broadcast-win true
- Per-station board cosmetics (or all stations):
/rouletteadmin setframe [all] <BLOCK|reset>/rouletteadmin setred [all] <BLOCK|reset>/rouletteadmin setblack [all] <BLOCK|reset>/rouletteadmin setgreen [all] <BLOCK|reset>/rouletteadmin setselector [all] <BLOCK|reset>
- Per-station board size:
/rouletteadmin set board-size <value>while standing near a station changes that station only
- Per-station casino frame (or all stations):
/rouletteadmin casinoframe [all] <BLOCK> <pattern 1-10>/rouletteadmin casinoframe [all] mode <always|betting_only>/rouletteadmin casinoframe [all] <off|reset>
Slots Admin (slots.admin)
- Station lifecycle:
/slotsadmin create [3-8] [1|2]/slotsadmin remove/slotsadmin regen/slotsadmin list/slotsadmin reload
- House accounting:
/slotsadmin housebalance/slotsadmin housewithdraw <amount|all>
- Global config:
/slotsadmin set [global] <path> <value>/slotsadmin set [global] <path>(shows current value)- Global settings override existing station overrides; for example,
/slotsadmin set global announcements.broadcast-win true
- Per-station cosmetics (or all stations):
/slotsadmin setouterframe [all] <BLOCK|reset>/slotsadmin setinnerframe [all] <BLOCK|reset>/slotsadmin setwinning [all] <BLOCK|reset>
- Per-station price:
/slotsadmin set cost-per-spin <value>while standing near a station changes that station only
- Per-station casino frame (or all stations):
/slotsadmin casinoframe [all] <BLOCK> <pattern 1-10>/slotsadmin casinoframe [all] mode <idle_only|always>/slotsadmin casinoframe [all] <off|reset>
Fights Admin (fights.admin)
Primary command: /fightadmin
- Station lifecycle:
/fightadmin create [odd-size] [fighters]/fightadmin fighters <arena-number> <2-16>/fightadmin move <arena-number>or/fightadmin move <arena-number> <x> <y> <z>(relative block offset)/fightadmin remove <arena-number>/fightadmin regen [arena-number]/fightadmin list/fightadmin holo <arena-number> [reset]
- Global Fights config:
/fightadmin set <path> <value>- Important paths include
fights.max-fighters,fights.betting-seconds,fights.payout-multiplier,fights.arena-style,fights.blocks.*,fights.casino-frame-animation.*, andfights.hologram.bet-display-mode.
Join Gift
/minegamesjoin true|falseenables or disables the first-join gift./minegamesjoin set <amount>changes the welcome payout.- Seen players are stored in
join_rewards.yml, so each player only receives the gift once. - The welcome message is editable under
messages.join-gift.welcomeinconfig.yml.
Permissions
mine.admin(default: op)roulette.admin(default: op)slots.admin(default: op)fights.admin(default: op)
Config Layout
- Mines:
board.*game.*announcements.*effects.*hologram.*messages.*frame-animation.*
- MineGame frame height toggle:
board.frame-one-highertrue= frame/grid one block above beaconfalse= frame/grid at beacon level
- Roulette:
roulette.*roulette-frame-animation.*
- Fights:
fights.*fights.blocks.*fights.casino-frame-animation.*
Distance / Activation / Hologram Settings
- Global casino frame activation distance (used by both game types):
casino-frame-activation-distance(default20.0)frame-animation.interval-ticks(MineGame frame animation speed)roulette-frame-animation.interval-ticks(Roulette frame animation speed)
- MineGame hologram visibility:
hologram.view-rangehologram.behind-beacon-distancehologram.base-heighthologram.line-spacing
- Roulette station activation + hologram visibility:
roulette.activation-distance-from-frame(players must be near frame for active spinning)roulette.max-bet-distance(max distance to place bets when not standing directly on board)roulette.hologram-view-rangeroulette.hologram-heightroulette.hologram-line-spacingroulette.hologram-title-gaproulette.hologram-section-gap
- Fights arena activation + hologram visibility:
fights.activation-distancefights.hologram-view-rangefights.hologram-heightfights.hologram-line-spacing
Hologram Placement Commands
These commands select a station by the same number shown by the corresponding list command. After running a placement command, right-click the block surface where the hologram should appear.
- MineGame:
/minegameadmin hologramsign <number> - Slots:
/slotsadmin hologramsign <number> - Roulette:
/rouletteadmin hologramsign <number> - Restore the original location: add
remove, for example/slotsadmin hologramsign remove 2
Placements are persistent and stored in plugins/MineGames/holograms.yml. Holograms use fixed surface orientation and can be moved by running the assignment command again. Set hologram.see-through-walls to true or false to control wall visibility.
Notes
set ...commands edit the nearest station when the setting is station-local, unless you useset global ...to force a global default.setframe/setred/...andcasinoframecommands edit station overrides.- Adding
allapplies cosmetic override commands to every station of that game type. - Mines, roulette, and slots rebaseline their saved footprints when a size change would otherwise leave old blocks behind.
housebalance/housewithdraware admin-only (mine.admin/roulette.admin).housewithdrawpays the withdrawn amount directly to the admin executing the command.- MineGame board height is controlled by
board.frame-one-higher(settable via/minegameadmin set board.frame-one-higher <true|false>). - Roulette color defaults are percent-based (
48.61 / 48.61 / 2.78) and auto-scale with board size. - Changing Roulette selector block clears old selector blocks from the selector layer before placing new ones.
- Removing MineGame/Roulette/Slots stations restores original world blocks for stations created on current versions (snapshot-based restore).
- Roulette station creation anchors the board directly under the admin's feet (replaces floor blocks there).
- Holograms are configured with no-wrap text display behavior for more consistent spacing.
- Fights support
wallsandfencearena styles. Fence mode is the default, uses connected spruce fences, and places the casino frame below them. - Fights fighters target only fighters in their own arena and are isolated from outside damage, projectiles, potions, mobs, portals, pickups, fire, lava, explosions, and despawning. They drop no items or experience.
- All registered games block non-admin building inside their footprint and in the airspace above it. Lava/water buckets and fluid flow into games are cancelled, and protected game blocks cannot be damaged by explosions.
- Removing Fights stations restores captured original blocks;
regenrebuilds the station from current configuration.
Storage
plugins/MineGames/config.yml(global settings)plugins/MineGames/stations.yml(MineGame stations + overrides)plugins/MineGames/holograms.yml(per-station hologram placement overrides)plugins/MineGames/roulette_stations.yml(Roulette stations + overrides)plugins/MineGames/slots_stations.yml(Slots stations + overrides)plugins/MineGames/fights_stations.yml(Fights stations)plugins/MineGames/mines_restore.yml(MineGame original-block snapshots for restore on station removal)plugins/MineGames/roulette_restore.yml(Roulette original-block snapshots for restore on station removal)plugins/MineGames/slots_restore.yml(Slots original-block snapshots for restore on station removal)plugins/MineGames/fights_restore.yml(Fights original-block snapshots for restore on station removal)plugins/MineGames/house_balances.yml(separate MineGame/Roulette house balance + wager/payout totals)
License
GPLv3


