Documentation Index
Fetch the complete documentation index at: https://pumpkings.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
After your first server start, LiricCasino creates a plugins/LiricCasino/ folder containing every configuration file you need. You never have to edit source code — everything from the database backend to individual button positions in a game’s GUI is controlled from these files.
Run /casino reload in-game or from the console after saving any configuration file. This reloads config.yml, all menus/ files, and messages.yml without restarting your server. Changes to the database connection settings require a full server restart to take effect.
Configuration File Overview
| File | Purpose |
|---|
config.yml | Database connection, tax system, economy boosters, and per-game settings |
messages.yml | Every player-facing message, fully translatable and formatted with MiniMessage |
webhooks.yml | Discord webhook URLs that receive jackpot and win announcements |
menus/<game>.yml | GUI layout for each game — title, row count, slot positions, item materials, and display names |
Database
LiricCasino stores player stats, placed bets, and leaderboard data in a database. SQLite requires zero external setup; MariaDB is available if you run a multi-server network or prefer a dedicated database server.
SQLite is active out of the box. A casino.db file is created automatically inside plugins/LiricCasino/. No credentials or external server are required.database:
type: "sqlite"
host: "localhost" # ignored for SQLite
port: 3306 # ignored for SQLite
database: "casino" # ignored for SQLite
username: "root" # ignored for SQLite
password: "" # ignored for SQLite
pool-size: 5
Switch to MariaDB by changing type to mariadb and providing your connection details. Create the target database before starting the server — LiricCasino will create its own tables automatically.database:
type: "mariadb"
host: "127.0.0.1"
port: 3306
database: "casino"
username: "root"
password: "your_password_here"
pool-size: 5
A full server restart is required after changing the database block. /casino reload will not reconnect the database.
Tax System
The tax system deducts a percentage from gross winnings before they are paid out to the player, functioning as a configurable house edge. Taxes are disabled by default.
taxes:
enabled: false # Set to true to activate
default-rate: 0.05 # 5 % applied when no per-game rate is set
# Override the rate for individual games:
roulette: 0.05
slots: 0.05
blackjack: 0.05
scratch: 0.05
lottery: 0.10 # Lottery defaults to 10 %
coinflip: 0.05
rps: 0.05
ttt: 0.05
racing: 0.05
Example: A player wins 10,000atRoulettewith‘roulette:0.05‘.Theyreceive9,500 — the $500 tax is removed from the payout. Remove or comment out a game’s line to fall back to default-rate.
Economy Boosters
The booster system multiplies a player’s winnings based on a permission node. Boosters are applied on top of the base payout before any tax deduction. You can define as many booster tiers as you need.
boosters:
vip:
booster: 2.0 # VIP players receive 2× their winnings
permiso: "vip.boost" # Permission node that grants this booster
mvp:
booster: 3.0
permiso: "mvp.boost"
Grant a player the permission listed under permiso (using your permissions plugin) to activate that booster tier for them automatically.
Per-Game Settings
Every game block in config.yml follows the same structure. Here is an annotated example using Blackjack:
blackjack:
active: true # false disables the game entirely — players see a "disabled" message
bet:
default:
min: 100.0 # Minimum bet for all players
max: 100000.0 # Maximum bet for players without a rank permission
ranks:
vip:
permission: "casinoliric.bet.vip"
max: 500000.0 # Higher cap for VIP players
admin:
permission: "casinoliric.bet.admin"
max: 10000000.0 # Near-unlimited cap for admins
raise-amount: 5000.0 # Amount added to the bet when a player raises in Blackjack
uses:
default:
max-uses-per-day: 10 # Default players can play 10 times per day
ranks:
vip:
permission: "casinoliric.uses.vip"
max-uses-per-day: 50
admin:
permission: "casinoliric.uses.admin"
max-uses-per-day: -1 # -1 = unlimited
The same active, bet, and uses keys are available for every game. You can define as many permission ranks as you need — just add a new entry under ranks with a unique permission node and your desired limits.
Granting a player the VIP or admin permission node listed under ranks automatically gives them the corresponding bet cap and daily limit. You do not need to set any separate LiricCasino permissions beyond those nodes.
Roulette-Specific Settings
Roulette has a few additional options because it is a physical, scalable in-world object. Note that Roulette uses a single max-bet field at the top level instead of the full bet: block:
roulette:
active: true
min-players-to-start: 1 # Minimum bettors required before the wheel spins
countdown-seconds: 180 # How long players have to place bets (3 minutes)
max-bet: 200000.0
number-payout: 36.0 # Multiplier for a straight number bet
block-scale: 0.45 # Physical size of roulette blocks (0.1 – 2.0)
radius: 5.5 # Radius of the roulette circle in blocks
uses:
default:
max-uses-per-day: 2
ranks:
vip:
permission: "casinoliric.roulette.vip"
max-uses-per-day: 10
admin:
permission: "casinoliric.roulette.admin"
max-uses-per-day: -1 # -1 = unlimited
color-multipliers:
RED: 2.0
BLACK: 2.0
GREEN: 14.0 # Green (0) pays 14× to reflect lower probability
You can also resize a roulette wheel live in-game without editing config.yml:
/casino ruleta escala <0.1–2.0> [radius]
Slots Prize Table
The Slots machine uses a weighted prize list. Higher weight values mean the symbol appears more often:
slots:
prizes:
- material: ENCHANTED_GOLDEN_APPLE
display-name: "<#FF00FF><bold>JACKPOT 777!</bold>"
multiplier: 100.0
weight: 1 # Very rare
- material: DIAMOND
display-name: "<#00FFFF><bold>DIAMOND!</bold>"
multiplier: 10.0
weight: 15
- material: DIRT
display-name: "<#8B4513>Dirt"
multiplier: 0.0
weight: 120 # Very common, no payout
Messages (messages.yml)
Every player-facing string lives in messages.yml. All messages support three formatting styles that can be mixed freely:
| Style | Example | Result |
|---|
| Legacy color codes | &a, &l | Green, bold |
| Hex color codes | &#FF0000 or <#FF0000> | Custom red |
| Native MiniMessage | <gradient:#FFD700:#FF6B6B>, <bold>, <aqua> | Full MiniMessage tag set |
Here is a sample showing all three styles in practice:
# messages.yml (excerpt)
prefix: "<#FF0000><bold>CASINO</bold> <gray>»</gray>"
roulette:
win: "{prefix} <#00FF7F><bold>YOU WON!</bold> <#E0E0E0>You got <#FFB400>${amount}</#FFB400>.{booster}"
slots:
jackpot: "{prefix} <#FF00FF><bold>JACKPOT!</bold> <#FFD700>{player} just hit 777 and won <#00FF7F>${amount}!"
lottery:
winner-broadcast: "{prefix} <gradient:#FFD700:#FF6B6B><bold>🎟 LOTTERY DRAW!</bold></gradient> The winning number was <white>{number}</white>. <#FFD700>{winners}</#FFD700> won <#00FF7F>${amount}</#00FF7F>!"
Placeholders like {amount}, {player}, and {prefix} are replaced at runtime. The {prefix} placeholder always resolves to the prefix: value at the top of the file, so changing it there updates every message at once.
Each game’s GUI is defined in its own file under menus/. You can change the inventory title, number of rows, which slots items occupy, item materials, and display names — all without touching any other file.
plugins/LiricCasino/menus/
├── roulette.yml
├── blackjack.yml
├── slots.yml
├── poker.yml
├── scratch.yml
├── lottery.yml
├── coinflip.yml
├── rps.yml
├── ttt.yml
└── racing.yml
A typical menu file looks like this:
# menus/blackjack.yml (illustrative structure)
title: "<#FFD700><bold>♠ Blackjack</bold>"
rows: 6 # Inventory rows (1–6)
items:
hit-button:
slot: 11
material: LIME_WOOL
display-name: "<#00FF7F><bold>HIT</bold>"
stand-button:
slot: 15
material: RED_WOOL
display-name: "<#FF5555><bold>STAND</bold>"
decoration:
slots: [0, 1, 2, 3, 4, 5, 6, 7, 8]
material: BLACK_STAINED_GLASS_PANE
display-name: " "
Menu titles and display names support the same MiniMessage / hex / legacy formatting as messages.yml. After editing a menu file, run /casino reload to see your changes immediately without a server restart.
Discord Webhooks
Configure webhooks.yml to send automatic Discord alerts when a player hits a major jackpot or wins above a threshold you define. Add the webhook URL generated in your Discord channel’s Settings → Integrations → Webhooks section. The file supports multiple webhooks, so you can post to different channels for different games.
Keep your webhook URLs private. Anyone with a URL can post messages to that Discord channel.