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(orloot.json5)config/incontrol/spawn.json(orspawn.json5)config/incontrol/spawner.json(orspawner.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):
itemorname - Chance:
chanceorrandom - Count:
count|amount|min/max|mincount/maxcount| stringitemcount - Override:
clear|remove|replace - Flow control:
continue: trueorstop: false - Conditions recognized for display:
biome/biomes,dimension,time,weather,minheight/maxheight/height,difficulty,killedby/player,name,helditem, and unknown keys (shown askey=value).
Spawn rules
- Target:
mob(string) ormob/mobs(array) - Result:
result: "deny" | "default" | "allow"(display and override logic usedeny&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.jsonis not required. - Target:
mob(string or array), ormobs(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.
- If a rule uses
- 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 nodefaultrule for that entity, Bestiary shows a single line:Does not spawn (In Control!). - If there’s a
defaultrule (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 ≤ Nformaxheight,Y ≥ Nforminheight,Y = Nforheight. - Display names: Biome names, Potion/effect names, and Held item names are localized rather than raw IDs.
- Primary row text:
- 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
maxhealthsets the displayed health valuehealthmultiplymultiplies 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
damagemultiplyapplies to base damage; hover showsModified by In Control!
- Movement speed
speedapplies 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 = trueintegrations.incontrol.enableInControlSpawn = true
Client (optional UI toggles):
integrations.incontrol.showInControlLootToggle = falseintegrations.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:
[{ "mob": "minecraft:zombie", "items": [ { "item": "minecraft:gold_ingot", "chance": 0.5, "count": 1 } ] }]
Loot — override and add:
[{ "mob": "minecraft:zombie", "replace": true, "item": "minecraft:diamond", "random": 1.0 }]
Spawn — deny:
[{ "mob": "minecraft:phantom", "dimension": "minecraft:overworld", "result": "deny" }]
Spawn — default (gated) + deny fallback:
[{ "mob": ["enemyexpansion:goblin"], "gamestage": "stage_g", "result": "default" },{ "mob": ["enemyexpansion:goblin"], "result": "deny" }]
Spawn — modifiers:
[{ "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/randomand Bestiary shows nothing in Loot”- Ensure the file top‑level is an array
[...]. Bestiary supportsitem/randomand alsoitems/dropsarrays; noaddkey required in your build.
- Ensure the file top‑level is an array
-
“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.