Chat Games

A spigot plugin aimed to add chat based games into your server to increase user engagement.

5,06k

Chat Games

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

- Reaction - Reaction - Answer trivia questions correctly - Reaction - Solve math problems - Reaction - Unscramble words - Reaction - Pick the correct answer from several options - Reaction - Respond quickly

- Customizable Rewards - Games start automatically at configurable intervals - Customizable Rewards - Configure commands to run when players win (economy rewards, items, etc.)

Quick Install

1. Drop the plugin `.jar` into your server's `plugins/` folder. 2. Start the server once to generate default configurations. 3. Edit `config.yml`, `en-us.yml`, and the individual game files.

Configuration

Main Configuration

config.yml

```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: "<red>You don't have permission to use this command.</red>"

Message shown when ChatGames has been successfully reloaded

reload: "<green>Successfully reloaded ChatGames!</green>"

Cooldown message when player tries to answer too quickly after wrong answer

cooldown: "<red>You cannot answer this question as you've already tried recently.</red>" ```

Game Configuration

games/math.yml

```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

```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

```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>nn<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

```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

```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-players` setting in `config.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 reload` after making changes - Check console for parsing errors

ADS