Minigame
Official compatibility
| Element | Reference |
|---|---|
TypeWriter | Required. Use the official TypeWriter release supported by the extension release. |
| Related extensions | Install the related extensions listed on this page before using entries that depend on them. |
The Minigame Extension is a complete minigame ecosystem built on a state-machine phase engine. Every game runs through a single GameContext — one store for ready players, teams and per-game state — with shared lobby, team, scoreboard, inventory and records services. All of it is configured through Typewriter entries.
Features
- 26+ Game Modes — PvP (Sumo, Gladiator, Duels, KOTH, Paintball, OneInTheChamber), Parkour (Parkour, BlockParty, TNTRun, FloorIsLava), PvE (FallingBlocks, WaveSurvival, ZombieApocalypse, DefendTheCore, DodgeTheArrows), Strategy (CaptureTheFlag, Infection, Spleef, SheepHunt), Party (TPP, FreezeTag, HotPotato, DeACoudre, MusicalChairs), Reflex (Archery, Quake).
- Phase Engine — Idle → Lobby → Countdown → Playing → Ending → Cleanup, as a state machine. Games plug custom phases (jump, rounds, waves) into the same engine.
- Unified Game Context — One store per game instance: ready players, team assignments (with solo/duo/squad team modes), scores and live state. No parallel managers.
- OmniGUI Menus — Game browser, arena selection, lobby, team selection, stats and post-game menus rendered through OmniGUI, opened by dedicated action entries.
- Records & Quests — Persistent wins, scores, best-time and top-times artifacts, plus quest objectives (
minigame_completion_objective) and facts to gate content on minigame progress. - Arena Regions — Arena definitions bind to Protection extension regions for boundaries and reset zones.
Entry Counts
The extension provides 27 configurable entries across 6 categories:
| Type | Count | Entries |
|---|---|---|
| Action | 9 | minigame_open_browser, minigame_open_arenas, minigame_open_stats, minigame_open_lobby, minigame_open_results, minigame_join, minigame_leave, minigame_forcestart, minigame_reset_records |
| Definition / Manifest | 6 | minigame_arena, minigame_lobby_menu, parkour_arena, deacoudre_arena, archery_arena |
| Artifact | 5 | minigame_scores, minigame_state, minigame_wins, minigame_best_time_artifact, minigame_top_times_artifact |
| Fact | 1 | minigame_completion_fact |
| Objective | 1 | minigame_completion_objective |
| Static | 3 | parkour_start_point, parkour_checkpoint, parkour_end_point |
| Total | 27 |
User guide
1. Define an Arena
Create a minigame_arena entry and configure its game type, spawn positions, team mode, and player limits. For parkour, use the dedicated parkour_arena with start points, checkpoints, and end points.
minigame_arena:
gameType: Spleef
lobbySpawn: <world,0,64,0>
gameSpawn: <world,0,50,0>
minPlayers: 2
maxPlayers: 8
teamMode: SOLO
2. Add Persistence Artifacts
Create artifact entries to store wins, scores, state, and best times. Reference them from the arena definition.
minigame_wins:
artifactId: my_wins
minigame_scores:
artifactId: my_scores
minigame_state:
artifactId: my_state
3. Open the Player Flow
Use action entries to let players browse, join, and interact with minigames. Trigger minigame_open_browser from an NPC or command to show all available games.
minigame_open_browser:
category: Spleef
4. Optional: Add Quest Integration
Create a minigame_completion_fact to track completions, then a minigame_completion_objective that triggers a reward when the player reaches the target count.
minigame_completion_objective:
fact: ref:my_completion_fact
amount: 10
onComplete: ref:give_reward_trigger
Placeholders
Placeholders resolved in minigame messages by MinigamePlaceholders. They are
replaced when a message is sent from a game phase, not registered with
PlaceholderAPI.
| Placeholder | Description |
|---|---|
%arena% | Arena display name. |
%arena_id% | Arena identifier. |
%game_id% | Current game identifier. |
%phase% | Current game phase. |
%players% | Number of players in the game. |
%alive% | Number of players still alive. |
%max_players% | Maximum players allowed by the arena. |
%winner% | Winner name, or Personne when there is none. |
%player% | Player name, in join and elimination messages. |
Resolved per viewing player:
| Placeholder | Description |
|---|---|
%score% | The viewing player's score. |
%alive_status% | alive or eliminated for the viewing player. |
Resolved for position-based messages (spawns, spectator points):
| Placeholder | Description |
|---|---|
%pos_x% | Position X, truncated to an integer. |
%pos_y% | Position Y, truncated to an integer. |
%pos_z% | Position Z, truncated to an integer. |
%pos_world% | World identifier of the position. |
Permissions
| Permission | Description |
|---|---|
minigame.start | Start a minigame. |
Dependencies
| Extension | Required | Usage |
|---|---|---|
| OmniGUI (GuiAndDialogs) | Required | All menus. |
| Protection | Required | Arena regions. |
| Quest (official) | Required | Completion objectives. |
Troubleshooting
The extension is not visible
Check that the installed release matches the supported TypeWriter release and that the related extensions listed in the compatibility section are present.
An entry is missing
In the Typewriter Web panel, use the Search bar or the + button to find or create the entry with its exact identifier. Entry IDs and field names are case-sensitive; do not translate them.
The entry saves but nothing happens
Check that the entry is connected to the trigger, command, objective, event, or menu interaction required by its type. Test with optional permissions and criteria removed, then add them back one at a time.
An integration does not work
Verify the dependency and version shown in the extension card, then check the server log for the first error. Do not replace a missing dependency with a similarly named plugin unless the extension source explicitly supports it.