8.6 KiB
28 - Integrations
Iris integrates with selected Bukkit plugins for world management, selections, external blocks/items/entities, Mythic skill conditions, PlaceholderAPI, and tree felling. Soft-depends declare load order only; Iris still checks isPluginEnabled / readiness before use. Integrations are Bukkit-family unless noted. See also 04 - Commands & Permissions.md, 06 - Worlds & Lifecycle.md, 09 - PlaceholderAPI.md, 19 - Objects.md, and 93 - API - Tree Feller.md.
Tutorial: prove an integration boundary
Choose one boundary and one observable result:
| Boundary | Positive proof | Negative control |
|---|---|---|
| WorldEdit | Make a cuboid selection, run /iris object we, and save a disposable object |
Clear the selection; Iris must report that no area is selected |
| Multiverse-Core | Create or update a disposable Iris world and confirm generator Iris:<pack> in Multiverse |
In a separate disposable test copy, restart without Multiverse installed; Iris must skip the link without failing its own world lifecycle |
| External item/block/entity provider | Validate one exact namespaced key and generate one consumer in a new chunk | An invalid key logs and resolves empty without crashing generation |
| MythicMobs conditions | irisbiome or irisregion passes inside the named Iris resource |
The same condition returns false outside Iris or with engine access unavailable |
| PlaceholderAPI | Complete the direct parse sequence in 09 - PlaceholderAPI.md |
A player outside Iris receives the documented unavailable values |
| Tree feller | A sneaking survival player with permission and an axe fells a provenanced Iris tree | A player-planted or hand-built tree remains intact |
- Start from a server where Iris alone passes its fresh-world smoke.
- Install one integration and its required dependencies; perform a full restart rather than a plugin reload.
- Confirm enable order and that both plugins report ready without a linkage or missing-class exception.
- Exercise the smallest read-only path listed in that integration section, then one controlled mutation such as a selection conversion, external item resolution, or managed-world import.
- Restart and repeat the same path. Test one unavailable/invalid external key so failure behavior is also known.
- Add the next integration only after the current boundary passes.
Soft-depend presence is not proof that an external provider is ready. Diagnose integration failures with both plugins' versions and startup order before changing an Iris pack.
Soft-depends and load order (plugin.yml)
| Plugin | Relation | Role |
|---|---|---|
| PlaceholderAPI | softdepend | %iris_...% expansion |
| CraftEngine | softdepend | External blocks/items |
| Nexo | softdepend | External blocks/items |
| ItemsAdder | softdepend | External blocks/items |
| SCore | softdepend | Dependency of ExecutableItems ecosystems; no Iris provider class |
| ExecutableItems | softdepend | External items |
| MythicLib | softdepend | Dependency of MMOItems ecosystems; no Iris provider class |
| MMOItems | softdepend | External blocks/items |
| eco | softdepend | Dependency of EcoItems; no Iris provider class |
| EcoItems | softdepend | External items |
| MythicMobs | softdepend | External entities + skill conditions |
| MythicCrucible | softdepend | External blocks/items |
| KGenerators | softdepend | External blocks/items |
| WorldEdit | softdepend | Selection for object/wand workflows |
| Multiverse-Core | loadbefore (Iris loads first) |
World import/generator sync and remove |
Multiverse is listed under loadbefore, not softdepend: Iris enables before Multiverse-Core so Multiverse can see Iris as a generator plugin.
WorldEdit
WorldEditLink reflects into WorldEdit when the plugin is enabled.
| Use | Behavior |
|---|---|
| Selection read | Returns an Iris Cuboid for the player's current WorldEdit selection in their world, or null if none |
| Wand / object tools | With world.worldEditWandCUI default true, a WorldEdit selection is accepted where Iris wants a selection without holding the Iris wand |
/iris object we |
Converts the current WorldEdit selection into a real Iris wand selection |
| Limit | position2 does not work on a WorldEdit-only selection until /iris object we runs |
WorldEdit is not required for .schem import: Iris parses schematic NBT itself. See 19 - Objects.md.
Multiverse-Core
MultiverseCoreLink uses the Multiverse Core API when Multiverse-Core is enabled.
| Operation | Behavior |
|---|---|
| World create/update | Imports or updates the Multiverse world with generator Iris:<pack>, autoLoad=false, environment from the Bukkit world, spawn adjust off |
| World remove | Removes the Multiverse world config entry and saves worlds config; throws if Multiverse refuses removal |
| Inactive Multiverse | Calls no-op / return false |
Studio open/close and world lifecycle paths use the same link when Multiverse is present. See 06 - Worlds & Lifecycle.md.
External data providers (item / block / entity plugins)
ExternalDataSVC activates built-in providers when their plugins are ready, including late enable via PluginEnableEvent. Packs reference external content by namespaced ids resolved through the active provider for that namespace and DataType (ITEM, BLOCK, ENTITY).
| Plugin id | Provider | Namespaces / match | Types |
|---|---|---|---|
| CraftEngine | CraftEngineDataProvider |
Any CraftEngine item/block/furniture key that exists | ITEM, BLOCK |
| Nexo | NexoDataProvider |
nexo |
ITEM, BLOCK |
| ItemsAdder | ItemAdderDataProvider |
Namespaces reported by ItemsAdder for items/blocks | ITEM, BLOCK |
| ExecutableItems | ExecutableItemsDataProvider |
executable_items |
ITEM |
| MMOItems | MMOItemsDataProvider |
Blocks: mmoitems; items: two-part type namespace (type_subtype:id) |
ITEM, BLOCK |
| EcoItems | EcoItemsDataProvider |
ecoitems |
ITEM |
| MythicMobs | MythicMobsDataProvider |
mythicmobs |
ENTITY |
| MythicCrucible | MythicCrucibleDataProvider |
crucible |
ITEM, BLOCK |
| KGenerators | KGeneratorsDataProvider |
kgenerators |
ITEM, BLOCK |
Third parties may register additional providers with ExternalDataSVC#registerProvider if the plugin id is not already taken. Missing resources log and resolve empty rather than crashing generation.
MythicMobs skill conditions
When MythicMobs is active, Iris registers location conditions:
| Condition | Fields | Check |
|---|---|---|
irisbiome |
biome/b (comma list of load keys), surface/s (boolean, default false) |
Surface biome or full column biome via Iris engine |
irisregion |
region/r (comma list of load keys) |
Region load key at X/Z |
Both return false outside Iris worlds or when engine access is missing.
PlaceholderAPI
Soft-depend + expansion id iris. Full key list and migration: 09 - PlaceholderAPI.md.
Tree feller (operator)
Standalone tree felling is Bukkit-only. It removes whole Iris-generated trees when a sneaking survival player breaks a provenanced log with an axe.
Settings (settings.json)
| Key | Default | Meaning |
|---|---|---|
treeFeller.enabled |
false |
Master switch for the standalone path only |
treeFeller.durabilityPreservationChance |
0 |
Percent chance a log costs no axe durability (standalone path); clamped 0..100 on read |
Permission
| Node | Default | Meaning |
|---|---|---|
iris.treefeller |
op |
Required for standalone felling |
Standalone requirements (all required)
treeFeller.enabledistrue- Player has
iris.treefeller GameMode.SURVIVAL- Player is sneaking
- Broken block is tagged as a log
- Main-hand item is an axe
- Block has Iris tree provenance in the mantle (Iris-placed tree, not player-planted saplings or hand-placed logs)
Iris listens at EventPriority.HIGHEST for its own standalone request. Other plugins can drive felling with INTEGRATION_OVERRIDE (bypasses enabled switch and permission only) through IrisTreeFellerService; that API is documented in 93 - API - Tree Feller.md.
Runtime notes for operators
- Discovery walks mantle provenance (bounds: 131072 members, 1e6 visits, 256-block axis distance); oversize trees fall back to removing only the broken block
- Removal is paced across ticks
- Run ends if the player stops sneaking, changes hotbar slot/hand, leaves survival/world, breaks the axe, or swaps the axe item
- Leaves never cost durability/cost hooks; logs do
Platforms
WorldEdit, Multiverse, external data providers, Mythic conditions, PlaceholderAPI, and the tree feller are Bukkit-family. Modded loaders do not use these plugin soft-depends. See 30 - Platform Differences.md.