ChatGames
A Minecraft plugin that adds interactive chat-based minigames to engage your server's players with trivia, math challenges, word scrambles, and reaction games.
Why use ChatGames?
- Instant, lightweight chat minigames that keep your chat active.
- Multi-platform: same core works across Spigot, Paper, Folia, and Sponge via a platform abstraction layer.
- Fully configurable games, schedules, messages and reward commands.
- Small, well-documented, and easy to extend.
Features
-
Multiple Game Types:
- Trivia - Answer trivia questions correctly
- Math - Solve math problems
- Unscramble - Unscramble words
- Multiple Choice - Pick the correct answer from several options
- Reaction - Respond quickly
-
Automatic Game Scheduling - Games start automatically at configurable intervals
-
Customizable Rewards - Configure commands to run when players win (economy rewards, items, etc.)
Quick Install
- Drop the plugin
.jarinto your server'splugins/folder. - Start the server once to generate default configurations.
- Edit
config.yml,en-us.yml, and the individual game files.
Configuration
Main Configuration
config.yml
# ChatGames Configuration
# https://github.com/RareHyperIon/ChatGames
# Available: en-us
language: en-us
# Interval between automatic games (in seconds)
game-interval: 300
# Minimum players online to start automatic games
minimum-players: 1
# Whether to automatically start games at intervals
automatic-games: true
# Cooldown after wrong answer in multiple choice (in ticks, 20 ticks = 1 second)
answer-cooldown-ticks: 60
# Enable debug logging
debug: false
language/en-us.yml
```yml
ChatGames Language File - English (US)
Message shown when a player tries to use a command they don't have access to
permission: "
Message shown when ChatGames has been successfully reloaded
reload: "
Cooldown message when player tries to answer too quickly after wrong answer
cooldown: "
</details>
### Game Configuration
<details>
<summary>games/math.yml</summary>
```yml
name: math
display-name: "<gold>Math Wizard</gold>"
timeout: 60 # The time players have to win the game. (in seconds)
reward-commands:
- "give {player} diamond {rand:1-3}"
messages:
start: |
<gold><bold>MATH WIZARD</bold></gold>
<gray>Solve the equation below!</gray>
{question}
win: |
<green><bold>✓</bold> <yellow>{player}</yellow> solved it!</green>
<gray>Answer: <white>{answer}</white></gray>
timeout: |
<red><bold>✗</bold> Time's up!</red>
<gray>Answer: <white>{answer}</white></gray>
questions:
- ["<yellow>12 + 8 = ?</yellow>", "20"]
- ["<yellow>25 - 7 = ?</yellow>", "18"]
- ["<yellow>6 × 7 = ?</yellow>", "42"]
- ["<yellow>144 ÷ 12 = ?</yellow>", "12"]
- ["<yellow>15 + 23 = ?</yellow>", "38"]
- ["<yellow>50 - 18 = ?</yellow>", "32"]
- ["<yellow>9 × 8 = ?</yellow>", "72"]
- ["<yellow>100 ÷ 5 = ?</yellow>", "20"]
games/multiple-choice.yml
name: multiple choice
display-name: "<green>Multiple Choice</green>"
timeout: 45 # The time players have to win the game. (in seconds)
cooldown: 60 # Ticks to wait after wrong answer (60 ticks = 3 seconds)
reward-commands:
- "give {player} emerald {rand:1-3}"
messages:
start: |
<green><bold>MULTIPLE CHOICE</bold></green>
<gray>Type the correct letter!</gray>
{question}
win: |
<green><bold>✓</bold> <yellow>{player}</yellow> chose correctly!</green>
<gray>Answer: <white>{answer}</white></gray>
timeout: |
<red><bold>✗</bold> Nobody answered!</red>
<gray>Correct: <white>{answer}</white></gray>
questions:
q1:
question: "<yellow>What is the largest planet in our solar system?</yellow>"
answers:
- "A. Earth"
- "B. Jupiter"
- "C. Saturn"
- "D. Mars"
correct-answer: "B"
q2:
question: "<yellow>Which programming language is Minecraft written in?</yellow>"
answers:
- "A. Python"
- "B. C++"
- "C. Java"
- "D. JavaScript"
correct-answer: "C"
q3:
question: "<yellow>What is 2 + 2 × 2?</yellow>"
answers:
- "A. 6"
- "B. 8"
- "C. 4"
- "D. 10"
correct-answer: "A"
q4:
question: "<yellow>Which mob drops blaze rods?</yellow>"
answers:
- "A. Ghast"
- "B. Blaze"
- "C. Wither Skeleton"
- "D. Magma Cube"
correct-answer: "B"
games/reaction.yml
name: reaction
display-name: "<red>Reaction Test</red>"
timeout: 30 # The time players have to win the game. (in seconds)
reward-commands:
- "give {player} diamond {rand:1-3}"
messages:
start: |
<red><bold>REACTION TEST</bold></red>
<gray>Be the first to respond!</gray>
{question}
win: |
<green><bold>✓</bold> <yellow>{player}</yellow> was fastest!</green>
timeout: |
<red><bold>✗</bold> Nobody reacted in time!</red>
# Variants allow different reaction challenges
# If answer is empty string "", any message wins (fastest typer)
# If answer is specified, must type that exact word
# If answer is "CLICK", then it will be clickable.
# - Optional: Add hover="Your text" for custom hover message
# - Example: <button hover='Click me!'>Press here</button>
# - Without hover attribute, no hover text will be shown
# - You can include colors in the hover attribute.
variants:
- name: "Type Fast"
challenge: "<gold><bold>Type: <yellow>MINECRAFT</yellow></bold></gold>"
answer: "MINECRAFT"
- name: "First Word"
challenge: "<gold><bold>Type any word now!</bold></gold>"
answer: ""
- name: "Click Fast"
challenge: "<button hover='Click to win!' win><gold><bold>Click me to win!</bold></gold></button>"
answer: "CLICK"
- name: "Click Fast"
challenge: "<yellow>Click the star!</yellow>\n\n<button win>[<gold><bold>⭐</bold></gold>]</button> <button>[<red><bold>❤</bold></red>️]</button> <button>[<green><bold>🟢</bold></green>]</button>"
answer: "CLICK"
- name: "Color"
challenge: "<gold><bold>Type: <yellow>RED</yellow></bold></gold>"
answer: "RED"
games/trivia.yml
name: trivia
display-name: "<aqua>Trivia Time</aqua>"
timeout: 45 # The time players have to win the game. (in seconds)
reward-commands:
- "give {player} emerald {rand:1-3}"
messages:
start: |
<aqua><bold>TRIVIA TIME</bold></aqua>
<gray>Answer the question below!</gray>
{question}
win: |
<green><bold>✓</bold> <yellow>{player}</yellow> got it right!</green>
<gray>Answer: <white>{answer}</white></gray>
timeout: |
<red><bold>✗</bold> Nobody got it!</red>
<gray>Answer: <white>{answer}</white></gray>
questions:
- ["<yellow>What is the capital of France?</yellow>", "Paris"]
- ["<yellow>How many continents are there?</yellow>", "7"]
- ["<yellow>What year did the Titanic sink?</yellow>", "1912"]
- ["<yellow>What is the largest ocean?</yellow>", "Pacific"]
- ["<yellow>Who painted the Mona Lisa?</yellow>", "Leonardo da Vinci"]
- ["<yellow>What is the speed of light?</yellow>", "299792458"]
- ["<yellow>What is H2O commonly known as?</yellow>", "Water"]
games/unscramble.yml
name: unscramble
display-name: "<light_purple>Word Scramble</light_purple>"
timeout: 60 # The time players have to win the game. (in seconds)
reward-commands:
- "give {player} gold_ingot {rand:1-5}"
messages:
start: |
<light_purple><bold>WORD SCRAMBLE</bold></light_purple>
<gray>Unscramble the word!</gray>
{question}
win: |
<green><bold>✓</bold> <yellow>{player}</yellow> unscrambled it!</green>
<gray>Word: <white>{answer}</white></gray>
timeout: |
<red><bold>✗</bold> Time ran out!</red>
<gray>Word: <white>{answer}</white></gray>
words: [
"SMARTPHONE", "COMPUTER", "GAMING",
"KEYBOARD", "MINECRAFT", "DIAMOND",
"ADVENTURE", "TREE", "GOLD", "LOG"
]
Supported Platforms & Versions
| Platform | Supported Versions |
|---|---|
| Spigot | 1.13.x – 1.21.x |
| Paper | 1.20.6 – 1.21.x |
| Folia | 1.20.6 – 1.21.x |
| Sponge | 1.21.x |
Commands
| Command | Permission | Description |
|---|---|---|
/chatgames reload |
chatgames.reload |
Reload all configurations |
/chatgames start <game> |
chatgames.start |
Manually start a game |
/chatgames stop |
chatgames.stop |
Stop the current game |
/chatgames list |
chatgames.list |
List all available games |
/chatgames info |
chatgames.info |
Show plugin information |
/chatgames toggle |
chatgames.toggle |
Toggle automatic games on or off |
Permissions
| Permission | Description |
|---|---|
chatgames.reload |
Allows reloading the plugin |
chatgames.start |
Allows manually starting a game |
chatgames.stop |
Allows stopping the current game |
chatgames.list |
Allows listing all available games |
chatgames.info |
Allows viewing plugin information |
chatgames.toggle |
Allows toggling automatic games |
Troubleshooting
Games not starting:
- Check
minimum-playerssetting inconfig.yml - Verify enough players are online
- Check console for errors
Rewards not working:
- Verify placeholder format is
{player} - Check console for command errors
Questions not loading:
- Verify YAML syntax in game config files
- Use
/chatgames reloadafter making changes - Check console for parsing errors
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 | ||||
| 14h ago | 1 |
{question}placeholder support in the start message, allowing full control over where the question appears. Previously, the question was always appended at the end.
{question}placeholder support in the start message, allowing full control over where the question appears. Previously, the question was always appended at the end.
- Checking for updates, and outdated configurations.
- ChatGames API Integration for developers.
## Changes
- Simplified button logic.
- Checking for updates, and outdated configurations.
- ChatGames API Integration for developers.
## Changes
- Simplified button logic.
- Checking for updates, and outdated configurations.
- ChatGames API Integration for developers.
## Changes
- Simplified button logic.
- Checking for updates, and outdated configurations.
- ChatGames API Integration for developers.
## Changes
- Simplified button logic.
- Multi-button support for reaction game.
## Changes
- Improved format for scramble game.
## Fixes
- Default config for scramble game being incorrect.
- Multi-button support for reaction game.
## Changes
- Improved format for scramble game.
## Fixes
- Default config for scramble game being incorrect.
- Multi-button support for reaction game.
## Changes
- Improved format for scramble game.
## Fixes
- Default config for scramble game being incorrect.
- Multi-button support for reaction game.
## Changes
- Improved format for scramble game.
## Fixes
- Default config for scramble game being incorrect.
- Simplified game configuration
## Fixed
- Default configuration for unscramble being different.
- Simplified game configuration
## Fixed
- Default configuration for unscramble being different.
- Simplified game configuration
## Fixed
- Default configuration for unscramble being different.
- Simplified game configuration
## Fixed
- Default configuration for unscramble being different.
- Full native Folia, Paper, Spigot, and Sponge support.
- Randomized reward amounts through templating (e.g.
{rand:1-3}).
## Changed
- Created a platform abstraction layer and simplified project structure and commands to reduce platform-specific duplication.
- Improved default config formatting and added redundancy to language retrieval.
- Downgraded Java target to **Java 8** for broader server compatibility.
- Reaction game supports different actions.
- Full native Folia, Paper, Spigot, and Sponge support.
- Randomized reward amounts through templating (e.g.
{rand:1-3}).
## Changed
- Created a platform abstraction layer and simplified project structure and commands to reduce platform-specific duplication.
- Improved default config formatting and added redundancy to language retrieval.
- Downgraded Java target to **Java 8** for broader server compatibility.
- Reaction game supports different actions.
- Full native Folia, Paper, Spigot, and Sponge support.
- Randomized reward amounts through templating (e.g.
{rand:1-3}).
## Changed
- Created a platform abstraction layer and simplified project structure and commands to reduce platform-specific duplication.
- Improved default config formatting and added redundancy to language retrieval.
- Downgraded Java target to **Java 8** for broader server compatibility.
- Reaction game supports different actions.
- Full native Folia, Paper, Spigot, and Sponge support.
- Randomized reward amounts through templating (e.g.
{rand:1-3}).
## Changed
- Created a platform abstraction layer and simplified project structure and commands to reduce platform-specific duplication.
- Improved default config formatting and added redundancy to language retrieval.
- Downgraded Java target to **Java 8** for broader server compatibility.
- Reaction game supports different actions.
- Unable to win reaction game without
chatgames.internalpermission. - Bypassing reaction game through the
/chatgames-internal-wincommand.
## New
- Added a cooldown to multiple choice game to prevent players from spamming every option to win instead of knowing the answer.
- Regenerating missing language files instead of erroring
- Added redundancy to language retrieval to prevent potential errors when upgrading to a new version of the plugin.
## ✨ What's New
### 🎨 MiniMessage Support
We have fully migrated to **MiniMessage** for all chat formatting!
- Support for advanced styling like **gradients**, **hover events**, and **click actions**.
EN-USlanguage file updated to utilize the new format.Utility.javaupdated to handle the new styling logic.
### ❓ Multiple Choice Game Update
- Question Pools:** The game now supports multiple questions defined in the config.
- Randomization:** Questions are now chosen randomly from the pool rather than being static.
## 🐛 Bug Fixes
- Unscramble Game:** Added null value handling in message formatting to prevent potential runtime errors.
- Stability:** Improved code readability and null-safety using
Objects.toString().
## 🛠 Changes & Refactoring
- Refactored
GameConfig.javato handle the new multiple-choice format. - Refactored game configurations to support distinct
display-namefields. - Improved command feedback with player-specific components.
## ⚠️ Configuration Changes
> **Note:** This update requires changes to your configuration files.
multiple_choice.yml: Updated format to support the new question pool list.unscramble.yml: Updated to use a newidfield and more descriptive naming conventions.
### Added
- MultipleChoiceGame: new game type with full support and a sample configuration (multiple_choice.yml).
- Reaction Game Variants: added answer validation for click-button versions.
- Customizable Reaction Game Configuration via reaction.yml.
- %player% Placeholder support in reward commands across all games.
- Support for Multi-Word Game Names in game detection.
- Automatic Interval-Based Game Control in GameHandler.
- ChatColors: Added the ability for players to type the correct answer with chat colors.
### Fixed
- Handled null descriptor in MultipleChoiceGame to prevent formatting errors.
### Changed
- Updated plugin version to 1.2 in pom.xml.
- Improved message formatting and language handling in ReactionGame.