> ## Documentation Index
> Fetch the complete documentation index at: https://pumpkings.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Configure LiricCasino Games, Economy, and Database

> Customize LiricCasino through config.yml, messages.yml, webhooks.yml, and per-game menu files — covering database, taxes, bet limits, and GUI layouts.

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.

<Tip>
  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.
</Tip>

## 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.

<Tabs>
  <Tab title="SQLite (Default)">
    SQLite is active out of the box. A `casino.db` file is created automatically inside `plugins/LiricCasino/`. No credentials or external server are required.

    ```yaml theme={null}
    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
    ```
  </Tab>

  <Tab title="MariaDB">
    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.

    ```yaml theme={null}
    database:
      type: "mariadb"
      host: "127.0.0.1"
      port: 3306
      database: "casino"
      username: "root"
      password: "your_password_here"
      pool-size: 5
    ```

    <Warning>
      A full server restart is required after changing the `database` block. `/casino reload` will **not** reconnect the database.
    </Warning>
  </Tab>
</Tabs>

***

## 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**.

```yaml theme={null}
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,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.

```yaml theme={null}
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:

```yaml theme={null}
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.

<Note>
  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.
</Note>

### 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:

```yaml theme={null}
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`:

```bash theme={null}
/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:

```yaml theme={null}
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:

```yaml theme={null}
# 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.

***

## Menu Customization (menus/)

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:

```yaml theme={null}
# 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.

<Warning>
  Keep your webhook URLs private. Anyone with a URL can post messages to that Discord channel.
</Warning>
