
CoinFlips
⚠️ Warning: Vault plugin required 📦 Minecraft Versions: 1.16.5 – 1.21.x Advanced CoinFlip plugin with animated duels, configurable betting and taxes, player statistics, leaderboards, and full Vault integration.
Автор: NoxuWT2 тыс.2обновлён 26 сент. 2026 г.
Экономика
Описание

- 🎮 Interactive CoinFlip Game: Create and join heads or tails games with custom bets via an intuitive GUI.
- 🖥️ Fully Configurable GUI: Every menu (main, create, join, stats, top) is driven entirely by
guis.yml— patterns, items, actions, textures, all configurable. - 📊 Statistics System: Track wins, losses, ratio, total bet and profit per player.
- 🏆 Leaderboard: Display top players by profit with custom player head textures for empty slots.
- 🤖 Discord Webhook: Automatic embed notifications on game creation, win and loss — fully configurable titles, descriptions and colors.
- 🔌 PlaceholderAPI Support: Use placeholders to display stats in scoreboards, holograms and other plugins.
- ⏱️ Cooldown System: Prevents abuse with a configurable delay between game creations.
- 🔒 Private Games: Create password-protected games to play with a specific player.
- 📢 Automatic Broadcast: Announces wins to the whole server with configurable messages.
- 💾 Database Support: H2, SQLite or MySQL — choose what fits your server.
- 🔄 Update Notifier: Automatically checks for new versions and notifies admins on join.
- 🛠️ Admin Commands: Reload config, bypass bet limits and more.

Player Commands
| Command | Description |
|---|---|
/cf | Opens the main menu |
/cf create <amount> | Creates a new game with the specified bet |
/cf join <id> | Joins an existing game by its ID |
/cf cancel | Cancels your current waiting game |
/cf stats [player] | Displays your or another player's statistics |
/cf top | Shows the leaderboard |
/cf private <amount> | Creates a private game |
/cf help | Shows command help |
Admin Commands
| Command | Description |
|---|---|
/cf reload | Reloads the configuration |

| Permission | Description | Default |
|---|---|---|
coinflips.use | Use player commands | true |
coinflips.create | Create games | true |
coinflips.join | Join games | true |
coinflips.stats | View statistics | true |
coinflips.top | View the leaderboard | true |
coinflips.private | Create private games | true |
coinflips.reload | Reload the configuration | op |
coinflips.bypass | Bypass bet min/max restrictions | op |
coinflips.admin | All admin permissions | op |

| Placeholder | Description |
|---|---|
%coinflip_wins% | Number of player victories |
%coinflip_losses% | Number of player defeats |
%coinflip_ratio% | Win ratio in percentage |
%coinflip_profit% | Total player profit |
%coinflip_total_bet% | Total amount bet |
%coinflip_games_active% | Number of active games waiting |

prefix: '<gradient:#FCEF00:#FFF652><bold>CoinFlips</bold></gradient> &7» '
database: # h2, sqlite or mysql
type: h2
private-games:
enabled: true
password-length: 4
number-formatting:
mode: 0 # 0 = formatted (1,000), 1 = short (1K), 2 = raw (1000.00)
update-notifier:
enabled: true
on-join: true
discord:
enabled: false
webhook-url: 'https://discord.com/api/webhooks/your-webhook-url'
embed:
create:
title: 'New Coinflip!'
description: '{player} created a coinflip for {amount} {currency}.'
color: 3447003
footer: 'Coinflips'
win:
title: 'Coinflip Won!'
description: '{player} won a coinflip of {amount} {currency}!'
color: 65331
footer: 'Coinflips'
lose:
title: 'Coinflip Lost!'
description: '{player} lost a coinflip of {amount} {currency}.'
color: 15158332
footer: 'Coinflips'
coinflip:
min-bet: 1000
max-bet: 100000000
cooldown: 5
win-chance: 50
multiplier: 2
Последние версии
Все версии →release
CoinFlips 6.1.4
6.1.426 сент. 2026 г.491Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur, spigot
Что нового
## Added
- Added ways to cancel your waiting coinflip from the Create and Join menus.
- Right-clicking your own coinflip in the Join menu cancels it and refunds your bet.
## Fixed
- Fixed GUI actions not responding due to extra spaces.
- Fixed bStats startup errors.
release
CoinFlips 6.1.3
6.1.316 июн. 2026 г.880Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2folia, paper, purpur, spigot
Что нового
Add bstats
Fix Minor
release
CoinFlips 6.1.2
6.1.223 мая 2026 г.121Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2folia, paper, purpur, spigot
Что нового
## Minor fixes
### Refactored UpdateChecker + `/cf update` command
- Modrinth URL was hardcoded and incorrect. It now uses the correct endpoint `/v2/project/{id}/version?limit=1`.
- Modrinth ID is configurable in `config.yml` under `update-notifier.modrinth-id`.
- Added `notify-console: true` in `config.
yml` to monitor console logs.
- The HTTP connection uses its own `User-Agent` and timeouts (5s connect / 5s read).
- New command `/cf update` (permission `coinflips.update`): launches a manual check and sends the result to the player.
- 4 new messages in `messages.yml`: `update-notifier.checking`, `available`, `up-to-date`,
`check-failed`.
- `coinflips.update` permission added in `plugin.yml` and included in `coinflips.admin`.
release
CoinFlips 6.1.1
6.1.123 мая 2026 г.17Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2folia, paper, purpur, spigot
Что нового
#CoinFlips — 6.1.1
## Minor fixes
### Head did not change in the animation menu
- `updateAnimationFrame` changed the inventory on the server side but the client never received the update.
- Added `player.updateInventory()` after each slot modification to force sending to the client.
### Negative or zero bets allowed
- A player could enter a negative or zero bet, bypassing the min/max check.
- Added a `bet <= 0` check in `GuiListener` (CREATE_GAME), `CoinFlipCommand` (create, private).
- New message `commands.invalid-bet` added in `messages.yml`.
### Double debit of the loser
-
`finishGame` still withdrew the loser's stake even though it was already debited at the join.
- Removed `EconomyUtils.withdraw(loser)` in `finishGame` — only the winner receives the pot.
### Formatting amounts according to `number-formatting.mode`
- All amounts displayed in messages and GUIs used `String.
valueOf((long) amount)` without any formatting.
- Redesigned `MessageUtils.formatNumber` with 3 modes:
- **Mode 0**: comma separator — `1,000,000` (pattern configurable via `formatted`)
- **Mode 1**: short format — `1k`, `10k`, `1M`, `1B`
- **Mode 2**: space separator — `1 000 000`
- Added `ConfigManager.
formatAmount(double)` which reads the mode and pattern from `config.yml` and formats the amount.
- All `%amount%` in `GameManager`, `GuiListener`, `CoinFlipCommand` and `GuiManager` now go through `formatAmount`.
### Automatically add missing keys in config.yml and messages.yml
-
If a key is present in the default file (bundled in the jar) but absent from the server file, it is added automatically at startup and at `/cf reload`.
- Existing values are never overwritten.
- Works recursively for all nested sections.
-
A message is logged in the console when keys are added: `Added missing keys to config.yml`.
- Implemented in `FileManager` via `addMissingKeys()` and `copyMissing()`.
---
#CoinFlips — 6.1.0
## Major additions & fixes
### Folia Compatibility
- New `utils/SchedulerUtils file.
java`: automatically detects at startup whether the server is running on Folia (`RegionizedServer`) or Paper/Spigot.
- Exposes unified methods: `runAsync`, `runAsyncTimer`, `cancelAsyncTimer`, `runLater`, `runLaterForPlayer`, `runTimer`, `cancelTimer`.
- On Paper/Spigot → delegates to the classic `BukkitScheduler`.
-
On Folia → delegates to `AsyncScheduler` (async tasks) and `GlobalRegionScheduler` (sync tasks).
- `GameManager`: rotating animation and game cleaning use `SchedulerUtils.runTimer` / `runLater`. Type `BukkitTask` replaced by `Object` to be agnostic.
- `DiscordWebhook`: sending webhook via `SchedulerUtils.runAsync`.
-
`UpdateChecker`: update check via `SchedulerUtils.runAsync` / `runAsyncTimer` / `cancelAsyncTimer`.
- The plugin now works on **Paper, Spigot and Folia** without changing the business logic.
### Animation — head rotating to the winner
- The animation displayed a static head.
The head now alternates between the creator and the opponent every 4 ticks (~0.2s) for 3 seconds, then freezes on the winner's head for 1 second before displaying the result.
- Added `updateAnimationFrame(Player, String)` in `GuiManager` to change the header in real time in the open inventory.
-
`openAnimationMenu` now accepts `creatorName` and `opponentName` as parameters.
### Checking balance before creating/joining
- A player without enough money could create or join a game without their balance being verified.
- Added `EconomyUtils.hasBalance()` check in `GuiListener` (CREATE_GAME,
JOIN_GAME) and `CoinFlipCommand` (create, join, private).
- The balance is now debited **at creation** of the game (creator) and **at join** (opponent).
- `finishGame` only credits the winner the full amount (stake × multiplier) — no more double debit.
-
`/cf cancel` correctly reimburses the creator since the stake is already debited.
- New message `commands.not-enough-money` added in `messages.yml`.
---
# CoinFlips — 6.0.2
## Minor fixes
### Animation menu opened when joining a coinflip
- When a player joins a game,
`startGame` opened the main menu (`openMainMenu`) instead of the animation menu.
- Added the `openAnimationMenu(Player)` method in `GuiManager` which opens the `animation` GUI defined in `guis.yml` with the `%player%` placeholder.
- `GameManager.startGame()` now uses `openAnimationMenu` + `GuiType.
ANIMATION for both players (creator and opponent) from the start of the game.
---
# CoinFlips — 6.0.1
## Minor fixes
### GUI does not open when accepting a coinflip
- The `startGame` logic did not open any GUI for players, it just sent messages in the chat after a delay
.
- The `startGame` method has been moved to `GameManager` and now opens the main menu for both players (creator and joiner) upon starting the game.
- Both players' inventories are automatically closed once the result is displayed.
-
The `JOIN_GAME` action in `GuiListener` did not call `startGame` after joining the game — fixed.
### Cleaning parts on disconnection
- `PlayerListener` only handled the `PlayerJoinEvent` event, without any processing on disconnection.
- Added a `PlayerQuitEvent` handler which:
- Removes the player from GUI tracking (`GuiTracker`)
- Removes any pending challenges linked to the player
- Cancels the player's game if it is still in `WAITING` state (games already `RUNNING` resolve normally)
release
CoinFlips 6.1.0
6.1.023 мая 2026 г.14Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2folia, paper, purpur, spigot
Что нового
## Major additions & fixes
### Folia Compatibility
- New `utils/SchedulerUtils.java` file: automatically detects at startup whether the server is running on Folia (`RegionizedServer`) or Paper/Spigot.
- Exposes unified methods: `runAsync`, `runAsyncTimer`, `cancelAsyncTimer`, `runLater`, `runLaterForPlayer`, `runTimer`,
`cancelTimer`.
- On Paper/Spigot → delegates to the classic `BukkitScheduler`.
- On Folia → delegates to `AsyncScheduler` (async tasks) and `GlobalRegionScheduler` (sync tasks).
- `GameManager`: rotating animation and game cleaning use `SchedulerUtils.runTimer` / `runLater`.
Type `BukkitTask` replaced by `Object` to be agnostic.
- `DiscordWebhook`: sending webhook via `SchedulerUtils.runAsync`.
- `UpdateChecker`: update check via `SchedulerUtils.runAsync` / `runAsyncTimer` / `cancelAsyncTimer`.
- The plugin now works on **Paper,
Spigot and Folia** without modification of the business logic.
### Animation — head rotating to the winner
- The animation displayed a static head. The head now alternates between the creator and the opponent every 4 ticks (~0.2s) for 3 seconds, then freezes on the winner's head for 1 second before displaying the result.
-
Added `updateAnimationFrame(Player, String)` in `GuiManager` to change the header in real time in the open inventory.
- `openAnimationMenu` now accepts `creatorName` and `opponentName` as parameters.
### Checking balance before creating/joining
-
A player without enough money could create or join a game without their balance being verified.
- Added `EconomyUtils.hasBalance()` check in `GuiListener` (CREATE_GAME, JOIN_GAME) and `CoinFlipCommand` (create, join, private).
-
The balance is now debited **at creation** of the game (creator) and **at join** (opponent).
- `finishGame` only credits the winner the full amount (stake × multiplier) — no more double debit.
- `/cf cancel` correctly reimburses the creator since the stake is already debited.
- New message `commands.not-enough-
money` added in `messages.yml`.
release
CoinFlips 6.0.2
6.0.223 мая 2026 г.15Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
## Fixes
### Animation menu opened when joining a coinflip
- When a player joined a game, `startGame` opened the main menu (`openMainMenu`) instead of the animation menu.
- Added the `openAnimationMenu(Player)` method in `GuiManager` which opens the `animation` GUI defined in `guis.yml` with the `%player%` placeholder
.
- `GameManager.startGame()` now uses `openAnimationMenu` + `GuiType.ANIMATION` for both players (creator and opponent) from the start of the game.
beta
CoinFlips 6.0.1
6.0.123 мая 2026 г.9Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
# CoinFlips — 6.0.1
## Fixes
### GUI does not open when accepting a coinflip
- The `startGame` logic did not open any GUI for players, it just sent messages in the chat after a delay.
-
The `startGame` method has been moved to `GameManager` and now opens the main menu for both players (creator and joiner) upon starting the game.
- Both players' inventories are automatically closed once the result is displayed.
-
The `JOIN_GAME` action in `GuiListener` did not call `startGame` after joining the game — fixed.
### Cleaning parts on disconnection
- `PlayerListener` only handled the `PlayerJoinEvent` event, without any processing on disconnection.
- Added a `PlayerQuitEvent` handler which:
- Removes the player from GUI tracking (`GuiTracker`)
- Removes any pending challenges linked to the player
- Cancels the player's game if it is still in `WAITING` state (games already `RUNNING` resolve normally)
release
CoinFlips 6.0.0
6.0.022 мая 2026 г.12Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
✨ New features
Added animation menu
Added several new internal features
Added database support:
H2
SQLite
MySQL
🔧 Changes & refactoring
Updated system messages
Moved GUIs from config.yml to guis.yml
Global configuration refactor:
config.yml
guis.yml
lang.yml
Improved update system (beta version)
🐛 Fixes
Removed /cf about command
Fixed Discord webhook issues
General improvements and stabilization of Discord webhook system
⚡ Improvements
Various performance and internal optimizations
Overall system stability improvements
release
CoinFlips 5.4.0
5.4.022 мая 2026 г.16Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
Fix missing message and minor fix
alpha
CoinFlips 5.4.0
5.4.021 мая 2026 г.22Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
v5.4.0 — Private Matches & Direct Challenges
✨ What's new
🔒 Private games (`/cf private <amount> <password>`)
- New command `/coinflip private <amount> <password>` to create a password-protected game.
-
Private games do not appear in the public join GUI menu — they are invisible to other players.
- To join a private game, the player must use `/cf join <id>` and enter the correct password.
- If the password is incorrect, an error message is sent (`game.join.wrong-password`).
-
The password is displayed to the creator in the confirmation message.
⚔️ Direct challenges (`/cf challenge <player> <amount>`)
- New command `/coinflip challenge <player> <amount>` to challenge a player online directly.
- The stake is **immediately withdrawn** from the challenger when the challenge is sent.
-
The targeted player receives an in-game notification with the commands `/cf accept` and `/cf decline`.
- Response timeout configurable via `game.challenge-timeout-seconds` in `config.yml` (default: 60 seconds).
- If the deadline expires → automatic reimbursement of the challenger, notification to both players.
-
If the targeted player disconnects → automatic refund from the challenger.
- If the targeted player does not have enough money to accept → challenger refund.
- A challenger can only send one challenge at a time.
- A player can only receive one challenge at a time.
-
Challenge matches are **invisible** in the public GUI (like private matches).
🆕 New orders
| Order | Description |
|---|---|
| `/cf private <amount> <password>` | Creates a private protected part |
| `/cf challenge <player> <amount>` | Challenge a player directly |
| `/cf accepted` | Accept a challenge received |
| `/cf decline` | Refuse a challenge received |
📝 Config files updated
**`config.yml`**
```yaml
game:
challenge-timeout-seconds: 60 # new
```
**`messages.yml`** — new keys added:
- `game.create.private-success`
- `game.join.wrong-password`
- `game.join.not-invited`
- `challenge.sent`
- `challenge.received`
- `challenge.
declined-challenger`
- `challenge.declined-target`
- `challenge.expired-challenger`
- `challenge.expired-target`
- `challenge.target-offline`
- `challenge.target-not-found`
- `challenge.target-busy`
- `challenge.target-no-money`
- `challenge.cannot-challenge-self`
- `challenge.already-sent`
- `challenge.no-pending`