---
title: In Control! Integration
sidebar_position: 20
---

# In Control! Integration (Minecraft 1.20.1 · Forge)

This page explains how Araxer's Bestiary reads and displays rules from the
In Control! mod so players see accurate, easy‑to‑understand changes to:

- Loot (drops, conditional rules, overrides)
- Spawn locations/conditions (deny/default chains, context, modifiers)
- Attributes (health/damage/speed) modified by spawn rules

It also documents supported rule keys/variants, UI indicators, config toggles,
reload workflow, and troubleshooting.

## Quick start

- Place your rules in:
  - `config/incontrol/loot.json` (or `loot.json5`)
  - `config/incontrol/spawn.json` (or `spawn.json5`)
  - `config/incontrol/spawner.json` (or `spawner.json5`)
- Join a world (SP/MP) or run `/reload` — Bestiary detects In Control!,
  parses rules, and updates the UI automatically (also on join).
- Open the Bestiary for an entity and check:
  - Loot tab: rule‑based drops, conditions, overrides
  - Spawn tab: readable conditions, “Does not spawn” when denied, JSON in
    advanced tooltips (F3+H)
  - Attributes tab: health/damage/speed values adjusted by spawn modifiers

## Supported schema variants (1.20.1)

Bestiary tolerates several common key variants used across 1.20.1 builds and forks:

### Loot rules

- Item list key: `add` | `items` | `drops`
- Single item (top‑level): `item` or `name`
- Chance: `chance` or `random`
- Count: `count` | `amount` | `min`/`max` | `mincount`/`maxcount` | string `itemcount`
- Override: `clear` | `remove` | `replace`
- Flow control: `continue: true` or `stop: false`
- Conditions recognized for display: `biome`/`biomes`, `dimension`, `time`,
  `weather`, `minheight`/`maxheight`/`height`, `difficulty`, `killedby`/`player`,
  `name`, `helditem`, and unknown keys (shown as `key=value`).

### Spawn rules

- Target: `mob` (string) or `mob`/`mobs` (array)
- Result: `result: "deny" | "default" | "allow"` (display and override logic use `deny` & `default`)
- Conditions: `biome`/`biomes`, `biometags`, `dimension`, `time`, `weather`,
  `light`/`lightlevel`, `minheight`/`maxheight`/`height`, `difficulty`, `seesky`,
  `mindist`/`maxdist`, `gamestage`, `name`, `helditem`, custom keys (shown as text)
- Modifiers (shown under “Modified:”):
  - `healthmultiply`, `damagemultiply`, `speed`, `maxhealth`, `potion`
- Metrics (shown as text): `weight`, `mincount`, `persecond`, `attempts`,
  `amount.minimum/maximum`

### Spawner rules

- Read alongside spawn rules; `spawn.json` is not required.
- Target: `mob` (string or array), or `mobs` (array).
- Spawn locations use only `conditions.dimension` (string or array).
- Rates, amounts, water checks, distances, heights, and other settings are ignored.
- Advanced tooltips (F3+H) show the full original spawner rule JSON, including
  settings ignored by the spawn-location summary, just like loot rules.
- Entries without a valid explicit mob or dimension are skipped. Spawner entries
  do not themselves override vanilla spawn locations or modify attributes.

JSON/JSON5 is supported; for `.json5` we tolerate `//` comments and trailing commas.

## Loot — what you’ll see

- Rule‑based items appear alongside vanilla/datapack/GLM unless a rule overrides drops.
- Each rule‑based item can show:
  - A small on‑slot “IC” marker
  - A second line with `When: …` (conditions) when applicable
  - Chance as a number or `?` when not specified or context‑dependent
- Overrides:
  - If a rule uses `clear`/`remove`/`replace`, Bestiary hides vanilla/datapack/GLM
    and shows only In Control! items for that entity. The override note is in the tooltip.
- Advanced tooltips (F3+H):
  - Loot tooltips append the raw rule JSON (pretty‑printed) for quick debugging. There is no heading; only JSON lines are shown.

## Spawn — what you’ll see

- IC entries are listed first in the Spawn tab.
- If a rule denies spawns (`result: "deny"`) and there is no `default` rule
  for that entity, Bestiary shows a single line: `Does not spawn (In Control!)`.
- If there’s a `default` rule (gated) and also a deny fallback:
  - Bestiary prepends the IC condition row (so players see the gate), then shows
    normal vanilla/datapack spawns (no override).
- Readability:
  - Primary row text:
    - If a Biome is present, the row label uses the biome display name (e.g., “Plains”).
    - Otherwise: `In Control! (…inline hint…)` where the hint prioritizes
      Biome Tag → Biome → Dimension → Gamestage
  - Tooltip shows two sections:
    - `When:` for regular conditions (Dimension, Biome/Tag, Y, Time, Weather, etc.)
    - `Modified:` for modifiers (Health ×, Damage ×, Speed ×, Max Health =, Potion: …)
  - Height formatting: `Y ≤ N` for `maxheight`, `Y ≥ N` for `minheight`, `Y = N` for `height`.
  - Display names: Biome names, Potion/effect names, and Held item names are localized rather than raw IDs.
- Advanced tooltips (F3+H):
  - Spawn tooltips append the raw rule JSON (pretty‑printed). There is no heading; only JSON lines are shown.

## Attributes — reflecting spawn modifiers

When spawn rules include modifiers, the Attributes (Info) tab reflects them:

- Health
  - `maxhealth` sets the displayed health value
  - `healthmultiply` multiplies base health; rounding is adjusted to match in‑game
    displays (e.g., Zombie 20 × 2.4 → 49)
  - Hover the value/label for a tooltip: `Modified by In Control!` plus a numeric
    breakdown on hearts/tooltips
- Damage
  - `damagemultiply` applies to base damage; hover shows `Modified by In Control!`
- Movement speed
  - `speed` applies to base movement speed category & tooltip (with numeric details)

All modifiers are parsed once per entity type and cached for performance.

## Config toggles

Server (per‑world, default ON):

```
integrations.incontrol.enableInControlLoot = true
integrations.incontrol.enableInControlSpawn = true
```

Client (optional UI toggles):

```
integrations.incontrol.showInControlLootToggle = false
integrations.incontrol.showInControlModifiedCategory = true
```

- `showInControlLootToggle`: When true, a checkbox appears in the Loot tab to hide/show conditional rule drops. When false, the checkbox is hidden entirely (no space reserved).
- `showInControlModifiedCategory`: When true (default), the “Modified:” section is shown in Spawn tooltips, and the Attributes tab shows a small “Modified by In Control!” hint on Health/Damage when modified. When false, both are hidden (effective values still display).

## Reloading & update flow

- On world/server start: In Control! rules are parsed; Bestiary caches are built.
- On player join: Bestiary ensures current spawn/loot data is synced to the client.
- On datapack `/reload`: Bestiary re‑parses IC files and refreshes its caches.
- Manual command (admin):

```
/bestiary reload incontrol
```

Re-parses IC rule files and clears Bestiary caches for immediate updates.

## Examples

Loot — unconditional add:

```json
[
  { "mob": "minecraft:zombie", "items": [ { "item": "minecraft:gold_ingot", "chance": 0.5, "count": 1 } ] }
]
```

Loot — override and add:

```json
[
  { "mob": "minecraft:zombie", "replace": true, "item": "minecraft:diamond", "random": 1.0 }
]
```

Spawn — deny:

```json
[
  { "mob": "minecraft:phantom", "dimension": "minecraft:overworld", "result": "deny" }
]
```

Spawn — default (gated) + deny fallback:

```json
[
  { "mob": ["enemyexpansion:goblin"], "gamestage": "stage_g", "result": "default" },
  { "mob": ["enemyexpansion:goblin"], "result": "deny" }
]
```

Spawn — modifiers:

```json
[
  { "mob": "minecraft:zombie", "healthmultiply": 2.4 },
  { "mob": "minecraft:skeleton", "damagemultiply": 1.7 },
  { "mob": "minecraft:spider", "speed": 1.3 },
  { "mob": "minecraft:zombie", "maxhealth": 40 },
  { "mob": "minecraft:spider", "potion": "minecraft:strength" }
]
```

## Troubleshooting

- “My rule uses `item`/`random` and Bestiary shows nothing in Loot”
  - Ensure the file top‑level is an array `[...]`. Bestiary supports `item`/`random`
    and also `items`/`drops` arrays; no `add` key required in your build.

- “Spawn tooltips don’t show raw JSON”
  - Turn on advanced tooltips (F3+H). Bestiary also falls back to the first matching
    rule’s JSON if per‑row alignment is missing.

- “I see duplicate IC lines in Spawn”
  - Bestiary now suppresses generic placeholder IC rows (those without readable
    conditions) and de‑duplicates by row text. If you still see duplicates, verify
    your rules aren’t generating identical summaries for multiple matches.

- “Health shows 48 but in game I see 49”
  - Bestiary adjusts rounding to mirror common HUD displays for multipliers (e.g.,
    20 × 2.4 → 49). If you find other mismatches, share the exact rule and value.

## Limitations

- Drop/spawn probabilities may remain context‑dependent; Bestiary avoids guessing
  exact percentages when rules depend on runtime conditions.
- NBT‑specific items are shown by display name; full NBT rendering isn’t exposed
  in the UI.
- Some exotic predicates/keys are passed through as text if not explicitly supported.

## Version & compatibility

- Minecraft 1.20.1 (Forge 47.x)
- In Control! 1.20.1 branch; multiple schema variants supported as listed above
- Works without In Control! installed — Bestiary behaves as usual

---

If you have a pack‑specific schema or want additional keys rendered specially,
open an issue with a sample rule set and screenshots of the desired UI.
