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. |
nightbreak.autoDownloadPluginUpdates | Boolean | false | Shared MagmaCore setting, added to the file after Extractioncraft starts. When true, available Extractioncraft plugin updates download a few minutes after startup and are used after the next restart, unless nightbreak.applyPluginUpdatesWithoutRestart applies them sooner. See automatic updates. |
nightbreak.applyPluginUpdatesWithoutRestart | String | never | Shared MagmaCore setting. never waits for the next restart, when-empty applies a downloaded plugin update the next time no players are online, and immediately applies it as soon as it downloads. Applying an update reloads Extractioncraft, which ends running matches. See applying updates without a restart. |
The wipe applies only after the match has gone live. Leaving while it waits or counts down leaves the inventory untouched. Extracting, a server shutdown or a plugin reload keeps the items and soulbinds unbound ones to the player when the EliteMobs Soulbind enchantment is enabled. With this option set to false, every other exit from a live match soulbinds the items instead of clearing them. See match flow for each way of leaving.
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! | Configurable no-permission message. Not currently sent: Extractioncraft matches set no 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 sent: spectating needs no permission. |
matchJoinAsPlayerMessage | [Extractioncraft] You are now in the match, $player! | Chat message on joining a match as a player. $player is replaced with the player's name and $count with the minimum player count. |
matchJoinAsPlayerTitle | Extract! | Title shown when joining a match |
matchJoinAsPlayerSubtitle | Grab the loot and head to an extraction point! | Subtitle shown when joining a match |
matchJoinAsSpectatorTitle | (empty) | Title shown when joining as a spectator. Extractioncraft has no spectate command, so only spectators admitted by another plugin through the API see it. |
matchJoinAsSpectatorSubtitle | Now spectating! | Subtitle shown when joining as a spectator. Only sent to spectators admitted through the API. |
matchJoinAsSpectatorMessage | [Extractioncraft] You are now spectating a match! Do &a/extractioncraft quit &fto stop spectating! | Chat message on joining as a spectator. Only sent to spectators admitted through the API. $player is replaced with the player's name. |
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 to everyone in the match when /exc start is used without enough players. Only the $amount placeholder is replaced with the minimum player count, so the default text shows $count literally. Use $amount 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! | Countdown title. $count shows 2, 1, then 0 at one-second intervals. |
matchStartingSubtitle | in $count... | Countdown subtitle. $count shows 2, 1, then 0 at one-second intervals. |
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. /exc createMatch still tab-completes a disabled package but refuses to generate it. |
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. The premade packages use https://nightbreak.io/plugin/extractioncraft/. |
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 | (optional) | Written to the premade files but not read by the current code. Whether a package counts as downloaded depends on betterStructuresModulesContainerName. |
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. The generator must be enabled, have isWorldGeneration: true and list at least one installed start module. The setup menu treats the package as downloaded once BetterStructures has loaded this generator. |
spectatable | Boolean | false | Whether the match accepts spectators. Extractioncraft has no spectate command, so this only affects spectators another plugin admits through the API. |
pvpEnabled | Boolean | true | Whether PvP is enabled during matches. When false, players and their projectiles cannot damage other players anywhere in the 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. Values above maxPlayers are lowered to maxPlayers. |
maxPlayers | Integer | 100 | Maximum players allowed in a match (at least 1). All five premade Kobold Mines packages override this to 8. Extractioncraft registers no join command, so only the creator enters a match unless another plugin admits players through the API. |
contentLevel | Integer | 10 | Level passed to EliteMobs when generating chest and barrel loot. Values below 1 become 1. The premade packages use 10, 20, 30, 40 and 50. |
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:
- my_chest_high_loot_table.yml:.2
- my_chest_low_loot_table.yml:.2
barrelLootTables:
- kobold_mines_supplies_loot_table.yml:1
The :weight half is mandatory and must be a positive number. An entry without exactly one colon, with a blank filename, or with a weight that is not a positive number is skipped with a warning. 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 is skipped, as is a table set to isEnabled: false. If no usable table is left, right-clicking that kind of container does nothing.