> 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/v4/developer-portal/integrations.md).

# System Integrations

Reference for integrations with PlaceholderAPI, LuckPerms, and WorldEdit.

***

## 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.
