CoinFlips icon

CoinFlips -----

Compatible with Minecraft 1.16.5 ➜ 26.X




6.1.2
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.
6.1.3 :
Add bstats
Fix Minor
----------, Jun 16, 2026

#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)
----------, May 23, 2026

✨ 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
----------, May 23, 2026

v5.4.0 — Private Matches & Direct Challenges
Alpha
✨ 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

Release :
Fix missing message and minor fix
----------, May 22, 2026

Bug fixes
  • Fix NullPointerException error on loading: Fixed an issue where the plugin failed to correctly initialize the economic system when Vault was missing or misconfigured. The plugin now checks for the presence of Vault before attempting to obtain service economy.
  • Fixed language message: The plugin now correctly loads the default English language instead of Spanish.
⚙️ Setup
  • New update option: Added check-update-delay parameter in config.yml to configure the update check interval (in minutes). Default value: 1440 (24h).
  • Set to 0 to disable verification completely.
Translations
  • Default language changed: Configuration files and messages are now in English by default for better international compatibility.
  • Multilingual support remains available via the language setting in the configuration.
  • Technical improvements
  • Added a Vault dependency check before economy initialization
  • Improved error handling to avoid crashes at startup
  • Reduction of unnecessary logs regarding update search
⚠️ Patch note
  • Before updating, make sure that:
  • Vault is installed on your server
  • You have a compatible economical plugin (EssentialsX, CMI, etc.)
  • Back up your old config.yml file if you have custom changes
Installation

  • Download CoinFlip v5.3.1
  • Replace the old JAR file in the plugins/ folder
  • Restart your server
  • Check that the plugin loads without errors
----------, Mar 26, 2026

Fixes
Fix poorly supported messages
Fixed language loading system
The language defined in the configuration is now correctly applied
Fixed missing messages when reloading

⚙️ Improvements
Improved support for language files
Automatic loading of all available languages
New messages added in updates are automatically added to existing files
Better management of fallback to the default language
----------, Feb 4, 2026

Resource Information
Author:
----------
Total Downloads: 105
First Release: Jan 29, 2026
Last Update: Jun 16, 2026
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings