Your first item¶
Ember Forge reads the same YAML layouts the major content plugins use, so a minimal ItemsAdder-style item works as-is.
Create plugins/ItemsAdder/contents/mypack/configs/items.yml:
info:
namespace: mypack
items:
ruby:
display_name: "<#ff5f8f>Ruby"
resource:
material: PAPER
model_path: "mypack:item/ruby"
Put the model and texture where the namespace expects them:
contents/mypack/resourcepack/assets/mypack/models/item/ruby.json
contents/mypack/resourcepack/assets/mypack/textures/item/ruby.png
Then:
Both pack layouts work¶
Content packs ship in two different shapes, and Ember Forge reads both:
resourcepack/assets/<namespace>/models/... # the "assets" layout
resourcepack/<namespace>/models/... # the bare layout
Roughly a third of real packs use the second form. Reading only the first is a common bug — the items register fine, then render as a plain base item because their assets were never copied.
Base material and model id¶
| Key | Meaning |
|---|---|
resource.material |
The vanilla item the custom model rides on |
resource.model_path |
Namespaced model, e.g. mypack:item/ruby |
resource.model_id |
Optional fixed custom-model-data value |
Leave model_id out and Ember Forge assigns one from model-data-start,
skipping anything in reserved-model-data. Assigned ids are recorded in
plugins/EmberForge/model-ids.yml and reused, so an item keeps its id across
rebuilds — otherwise every item already in a player's chest would change
appearance on the next restart.