LogoAraxer's Bestiary

Troubleshooting & tools

This article lists common issues, how to validate your datapack files, and tips for testing your changes quickly.

Common pitfalls

  • Wrong folder path: Bestiary expects files at data/<your_ns>/bestiary/<entity_ns>/<entity_path>.json. If you put them under data/<your_ns>/bestiary.json or add extra folders, they won’t load.
  • Mismatched entity namespace: For vanilla mobs, use minecraft (e.g., data/my_pack/bestiary/minecraft/zombie.json). For modded mobs, use the mod’s id.
  • Invalid item ids: Unknown items are ignored and logged with a warning.
  • Overriding by accident: Setting any loot entry’s override: true causes a full override for the entity, even if lootOverride is false. Remove those flags if you only intend to supplement.

Quick testing workflow

  1. Place the datapack in world/datapacks (singleplayer) or server/datapacks.
  2. Run /reload in-game or on the server console.
  3. Open the Bestiary for the target entity and inspect the Loot section.
  4. If nothing changed, check your logs.

Reading the logs

Araxer’s Bestiary writes helpful messages:

  • "Loaded bestiary loot data for N entities" — how many JSON files Bestiary parsed.
  • "Using datapack override" — indicates an entity is using datapack-only loot.
  • "Supplemented loot cache with datapack entries" — datapack items were added to entities without loot table results.
  • Warnings like "Invalid bestiary loot file path" or "Unknown item" explain why a file or entry was skipped.

Tip: Enable debug logging if you need deeper insight. Many detailed lines are logged at DEBUG level (depends on your log4j configuration).

Validating JSON

  • Use a JSON linter/formatter to spot missing commas or quotes.
  • Ensure numbers use dots for decimals (0.25), not commas.
  • dropChance should be between 0 and 1. Use -1 or omit for unknown.

Translations

If you use displayNameKey, you must provide a language file somewhere on the client (as a resource pack or mod):

assets/<your_ns>/lang/en_us.json

{
"bestiary.note.rare": "(rare)"
}

Alternatively, use displayName for literal text.

When loot tables don’t exist

On the client or for some entities, Bestiary may not obtain loot table results immediately. In that case, your datapack entries act as a fallback (unless you’ve enabled override). Later, the mod may enrich unknown chances when server-side data becomes available.

What’s not configurable via datapack (currently)

  • Spawn locations/biomes and entity attributes are discovered from the game at runtime. Bestiary does not currently read datapack files for these.

If you need those, consider contributing or opening a feature request.