Extractioncraft Configuration
Extractioncraft uses several configuration files. The main settings live in config.yml and messaging.yml. Content packages, loot tables, and loot pools each have their own config folders.
config.yml
| Key | Type | Default | Description |
|---|---|---|---|
deleteItemsOnFailToExtract | Boolean | true | Whether players lose all items if they fail to extract from a match using one of the extraction points. When enabled, premade content is balanced around this risk. Disabling it makes content easier to farm with less reason to engage extraction mechanics. |
The wipe only applies once the match is actually live: a player who leaves while the instance is still in its waiting or countdown state keeps their inventory. Once the match is running, every exit that is not a successful extraction (leaving, disconnecting, dying, or being removed by the plugin) clears the whole inventory.
messaging.yml
All messages support & color codes. Placeholders are noted per row.
| Key | Default | Description |
|---|---|---|
failedToJoinOngoingMatchAsPlayerMessage | Can't join this match - it has already started! | Shown when a player tries to join an in-progress match |
failedToJoinOngoingMatchAsPlayerInstanceIsFull | Can't join this match - the instance is already full! | Shown when the match has reached its max player count |
failedToJoinOngoingMatchAsPlayerNoPermission | Can't join this match - you don't have the permission! | Shown when a player lacks join permission |
failedToJoinMatchAsSpectatorNoSpectatorsAllowedMessage | Can't join this match - spectators are not allowed! | Configurable message for when spectating is disabled for the content package. Not currently emitted by the MagmaCore match runtime: the spectate attempt is silently rejected without sending any message. |
failedToJoinMatchAsSpectatorNoPermission | Can't spectate this match - you don't have the permission! | Configurable message for when a player lacks spectate permission. Not currently emitted by the MagmaCore match runtime: a spectator who lacks permission is shown failedToJoinOngoingMatchAsPlayerNoPermission instead. |
matchJoinAsPlayerMessage | [Extractioncraft] You are now in the match, $player! | Chat message on joining a match as a player. The MagmaCore runtime only substitutes the $count placeholder (with the minimum player count) in this string; $player is not substituted, so the default text shows $player literally. |
matchJoinAsPlayerTitle | Extract! | Title shown when joining a match |
matchJoinAsPlayerSubtitle | Grab the loot and head to an extraction point! | Configurable join subtitle. Not currently used by the MagmaCore match runtime: the subtitle actually shown on join is matchStartingSubtitle. |
matchJoinAsSpectatorTitle | (empty) | Configurable spectator-join title. Not currently emitted by the MagmaCore match runtime. |
matchJoinAsSpectatorSubtitle | Now spectating! | Configurable spectator-join subtitle. Not currently emitted by the MagmaCore match runtime. |
matchJoinAsSpectatorMessage | [Extractioncraft] You are now spectating a match! Do &a/extractioncraft quit &fto stop spectating! | Configurable spectator-join chat message. Not currently emitted by the MagmaCore match runtime. |
matchLeaveAsPlayerMessage | [Extractioncraft] You have left the match, $player! | Configurable leave message. Not currently emitted by the MagmaCore match runtime, and $player is not substituted. |
matchLeaveAsSpectatorMessage | [Extractioncraft] You have left the match, $player! | Configurable spectator leave message. Not currently emitted by the MagmaCore match runtime, and $player is not substituted. |
matchFailedToStartNotEnoughPlayersMessage | This match requires $count players before starting - can't start yet! | Shown when /exc start is used without enough players. The MagmaCore runtime replaces the $amount placeholder with the minimum player count, so customise this message using $amount rather than $count if you want the number to be substituted. |
matchStartingMessage | [Extractioncraft] Match starting! | Configurable match-start chat message. Not currently emitted by the MagmaCore match runtime (the countdown is shown via the title/subtitle instead). |
matchStartingTitle | Match starting! | Title shown during the 3-second countdown. $count is replaced with the remaining seconds. |
matchStartingSubtitle | in $count... | Subtitle during the 3-second countdown. $count is replaced with the remaining seconds. |
preventTeleportInMessage | [Extractioncraft] You have attempted to teleport into an ongoing match - you can't do that! | Configurable message for blocked teleports into a match world. The teleport itself is cancelled by the runtime, but this message is not currently sent to the player. |
preventTeleportOutMessage | [Extractioncraft] You have attempted to teleport from an ongoing match - you can't do that! | Configurable message for blocked teleports out of a match. The teleport itself is cancelled by the runtime, but this message is not currently sent to the player. |
Content Package Configuration
Content packages are YAML files in the content_packages/ folder. Each defines a playable map configuration.
| Key | Type | Default | Description |
|---|---|---|---|
isEnabled | Boolean | true | Whether the package counts as installed. This drives the colour of its entry in /exc setup (true = installed/green, false = downloaded but not installed/yellow), and the setup menu toggles it for you. It does not remove the package from /exc createMatch. |
name | String | (required) | Display name of the package (supports & color codes) |
description | String list | (required) | Description lines shown in the setup menu |
downloadLink | String | (optional) | URL shown in chat when you click a not-downloaded package in the setup menu |
version | Integer | 0 | Content version number. Extractioncraft's content-state check only distinguishes not-downloaded / installed / not-installed, so this value is not currently compared against anything. |
folderName | String | (required) | Name of the schematics subfolder for this package |
usesEliteMobs | Boolean | false | Declarative flag indicating the package uses EliteMobs content. Not enforced at runtime. |
usesBetterStructures | Boolean | false | Declarative flag indicating the package uses BetterStructures content. Not enforced at runtime. |
usesFreeMinecraftModules | Boolean | false | Declarative flag indicating the package uses FreeMinecraftModels content. Not enforced at runtime. Note the YAML key is spelt usesFreeMinecraftModules (with "Modules") in source. |
betterStructuresModulesContainerName | String | (optional) | The BetterStructures module generator config filename passed to the world generator when /exc createMatch runs, e.g. kobold_mines_module_generator_10.yml. This is the key that actually decides which map gets generated. |
spectatable | Boolean | false | Configurable spectator toggle. Extractioncraft does not pass this value into the match instance it builds, so the runtime always treats matches as non-spectatable and spectator joins are rejected regardless of what you set here. |
pvpEnabled | Boolean | true | Whether PvP is enabled during matches. When false, friendly fire is blocked for the whole match world. |
minPlayers | Integer | 1 | Minimum players required to start a match. /exc start refuses below this, and the countdown aborts (ending the match) if the count drops below it mid-countdown. |
maxPlayers | Integer | 100 | Maximum players allowed in a match. All five premade Kobold Mines packages override this to 8. The current build registers no join command, so only the creator ever enters a match and this cap is never reached. |
chestLootTables | String list | [] | Loot tables used for chests, formatted as filename.yml:weight |
barrelLootTables | String list | [] | Loot tables used for barrels, formatted as filename.yml:weight |
Loot Table Weight Format
Chest and barrel loot table entries use the format <loot_table_filename.yml>:<weight>. When a player opens a container, one loot table is selected based on weighted probability.
Example:
chestLootTables:
- kobold_mines_chest_high_loot_table_10.yml:.2
- kobold_mines_chest_low_loot_table_10.yml:.2
barrelLootTables:
- kobold_mines_barrel_loot_table_10.yml:1
The :weight half is mandatory — an entry without a colon and a number fails to parse and stops the content package from loading. Weights are relative to each other, so the example above gives each of the two chest tables an equal 50% share. A filename that does not match a file in loot_tables/ logs a warning at startup and will break container looting for that package.