> For the complete documentation index, see [llms.txt](https://buildsystem.eintosti.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://buildsystem.eintosti.de/reference/integrations.md).

# Placeholders & Integrations

Placeholders BuildSystem exposes, and the plugins it defers to.

How BuildSystem exposes its data to other plugins, and how it defers to them.

Everything here is server configuration rather than code: placeholders you paste into another plugin's config, contexts you use in LuckPerms rules, and one behaviour note about WorldEdit. No Java required.

***

## 1. PlaceholderAPI Placeholders

Placeholders retrieve settings and world metadata. If a world parameter is omitted, the player's current world is queried.

### Settings Placeholders

**Format**: `%buildsystem_settings_<setting_name>%`

| Placeholder                                | Outputs          | Description                           |
| ------------------------------------------ | ---------------- | ------------------------------------- |
| `%buildsystem_settings_clearinventory%`    | `true` / `false` | Inventory clear state.                |
| `%buildsystem_settings_disableinteract%`   | `true` / `false` | Interaction prevention status.        |
| `%buildsystem_settings_glasscolor%`        | String           | Selected glass pane color name.       |
| `%buildsystem_settings_hideplayers%`       | `true` / `false` | Hide other players state.             |
| `%buildsystem_settings_instantplacesigns%` | `true` / `false` | Sign text popup bypass state.         |
| `%buildsystem_settings_keepnavigator%`     | `true` / `false` | Retain navigator item setting.        |
| `%buildsystem_settings_navigatortype%`     | `NEW` / `OLD`    | Type of navigator layout.             |
| `%buildsystem_settings_nightvision%`       | `true` / `false` | Nightvision active status.            |
| `%buildsystem_settings_noclip%`            | `true` / `false` | Spectator noclip active status.       |
| `%buildsystem_settings_opentrapdoors%`     | `true` / `false` | Right-click iron doors opening state. |
| `%buildsystem_settings_placeplants%`       | `true` / `false` | Anywhere plant placement state.       |
| `%buildsystem_settings_scoreboard%`        | `true` / `false` | Scoreboard visibility status.         |
| `%buildsystem_settings_slabbreaking%`      | `true` / `false` | Double-slab single-break status.      |
| `%buildsystem_settings_spawnteleport%`     | `true` / `false` | Auto spawn teleport status.           |
| `%buildsystem_settings_worldsort%`         | String           | Sort method name.                     |

### World Placeholders

**Format**: `%buildsystem_<value>%` (queried world) or `%buildsystem_<value>_<world_name>%` (target world)

| Placeholder                     | Outputs           | Description                                        |
| ------------------------------- | ----------------- | -------------------------------------------------- |
| `%buildsystem_blockbreaking%`   | `true` / `false`  | Block break allowed status.                        |
| `%buildsystem_blockplacement%`  | `true` / `false`  | Block place allowed status.                        |
| `%buildsystem_builders%`        | String List       | Whitelisted builders.                              |
| `%buildsystem_buildersenabled%` | `true` / `false`  | Builder whitelist active status.                   |
| `%buildsystem_creation%`        | Formatted Date    | World creation timestamp.                          |
| `%buildsystem_creator%`         | String            | World creator name.                                |
| `%buildsystem_creatorid%`       | UUID              | World creator UUID.                                |
| `%buildsystem_explosions%`      | `true` / `false`  | Explosions enabled status.                         |
| `%buildsystem_lastedited%`      | Formatted Date    | Timestamp of the last block edit in the world.     |
| `%buildsystem_lastloaded%`      | Formatted Date    | Timestamp of the last time the world was loaded.   |
| `%buildsystem_lastunloaded%`    | Formatted Date    | Timestamp of the last time the world was unloaded. |
| `%buildsystem_loaded%`          | `true` / `false`  | Memory loaded status.                              |
| `%buildsystem_material%`        | Material ID       | GUI representation icon block.                     |
| `%buildsystem_time%`            | String            | Formatted in-game time for the world.              |
| `%buildsystem_mobai%`           | `true` / `false`  | Mob AI status.                                     |
| `%buildsystem_permission%`      | Permission Node   | Join permission required (`-` for none).           |
| `%buildsystem_private%`         | `true` / `false`  | Private visibility status.                         |
| `%buildsystem_project%`         | String            | World project name.                                |
| `%buildsystem_physics%`         | `true` / `false`  | Block physics enabled status.                      |
| `%buildsystem_spawn%`           | `x;y;z;yaw;pitch` | World spawn coordinates.                           |
| `%buildsystem_status%`          | Status Name       | Progress state.                                    |
| `%buildsystem_type%`            | Dimension Type    | World dimension layout.                            |
| `%buildsystem_world%`           | String            | World name.                                        |

***

## 2. LuckPerms Contexts

BuildSystem registers two context calculators dynamically. You can use these contexts in LuckPerms permission trees to grant permissions conditionally.

### Build Mode Context

* **Context Key**: `buildsystem:build-mode`
* **Values**: `true` / `false`
* **Use Case**: Grant builder tools or WorldEdit permissions only when players are in build mode (`/build`).

### World Role Context

* **Context Key**: `buildsystem:role`
* **Values**: `creator` / `builder` / `guest`
* **Use Case**: Grant access to administrative commands only in worlds where the player holds the target role.

***

## 3. WorldEdit Protection Hook

When the configuration `block-worldedit-non-builder` is enabled in `config.yml`, BuildSystem registers a listener to WorldEdit's API.

* **Block Checks**: If a player attempts to run a selection modification (e.g. `//set`, `//copy`, `//paste`) or use a WorldEdit brush tool inside a world where they are registered as a `guest` (neither creator nor in the builder whitelist), the action is cancelled.
* **Bypass**: Can be bypassed via `buildsystem.bypass.builders` or `buildsystem.admin` permission nodes.

***

## 4. EssentialsX Warp Hook

Warps pointing into a build world that BuildSystem has unloaded used to fail with "warp not found", because EssentialsX resolves the stored location before the world exists again.

* **Behaviour**: When a player runs `/warp`, BuildSystem reads the warp's target world and loads it if it is an unloaded build world, so the warp resolves normally.
* **Requirements**: EssentialsX installed. Nothing to configure.
* **Limitations**: Only `/warp` is covered. Other EssentialsX teleports into unloaded worlds (homes, `/tp` to an offline player) still fail; keep those worlds in `world.unload.blacklisted-worlds`.
