Skip to content

Diagnosing broken content

A resource pack fails silently. An item with a missing texture looks perfect in every log and wrong on every screen. Ember Forge validates the pack before publishing and tells you exactly what it could not render.

/emberforge doctor

112 item(s) will not render and were left out of the pack.
Worst packs:
  gardenplus — 45
  builderslab — 27
  cosmetic_expansion_v1 — 14
Causes:
  missing texture — 14
  missing model — 29
  missing parent — 69
Full detail: plugins/EmberForge/content-report.txt

The report is rewritten on every build, so it is never stale, and it names the exact file:

cosmetic_expansion_v1:chicken_hat  missing texture  assets/cosmetic_expansion_v1/textures/chicken_hat.png
builderslab:acacia_wall_rack       missing model    assets/builderslab/models/item/acacia_wall_rack.json
iadeco:painting_burst              missing parent   assets/minecraft/models/item/base/furniture_painting.json

What the causes mean

Cause Meaning
missing texture The model asks for a .png the pack does not contain
missing model The item points at a model file that is not there
missing parent The model inherits from another model that is absent
unreadable model The .json could not be parsed

Anything listed is left out of the pack on purpose, so it renders as its plain base item rather than as a magenta-and-black missing-texture block. Fixing the source pack is what brings it back.

What validation actually checks

Each dispatch entry is resolved the way the client would:

  1. the model file exists,
  2. its parent chain resolves — including parents like item/base/furniture_painting, which look vanilla but are shipped by a content pack,
  3. every texture it names exists,
  4. every #variable a face refers to is defined by the model or a parent,
  5. and every reference is first resolved through sprite aliases.

That last one matters more than it sounds.

Sprite aliases are not file paths

A texture atlas can name a sprite something other than its path:

{"type": "single", "resource": "minecraft:item/iron_pickaxe", "sprite": "ia:908"}

A model then references ia:908, and no file of that name exists anywhere. A validator that only checks file existence concludes the item is broken and deletes content that renders perfectly well. Ember Forge merges every atlas it finds — additively, like fonts — and resolves aliases before judging anything.