Skip to main content

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

FilePurpose
config.ymlDatabase connection, tax system, economy boosters, and per-game settings
messages.ymlEvery player-facing message, fully translatable and formatted with MiniMessage
webhooks.ymlDiscord webhook URLs that receive jackpot and win announcements
menus/<game>.ymlGUI 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

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,000atRoulettewithroulette:0.05.Theyreceive10,000 at Roulette with `roulette: 0.05`. They receive 9,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:
StyleExampleResult
Legacy color codes&a, &lGreen, 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.