Skip to content

User Guide

Markus Bordihn edited this page Jun 16, 2026 · 2 revisions

Pack Usage

This page is for players and pack authors who want to use Easy Model Entities with resource packs and data packs only. You do not need Java code for this.

✅ Requirements

  • Easy Model Entities is installed on the client and the server.
  • Your data pack contains the server profiles.
  • Your resource pack contains render profiles, .bbmodel files, and textures.
  • Server profiles and render profiles use matching namespaces and IDs.

🧭 Entity Or Block Entity?

Use an entity when your model should move, use pathfinding, or react like a mob. Entities are more flexible, but Minecraft has to manage them as moving objects.

Use a block entity when your model stays at one block position. Block entities are often better for decorations, shrines, mimics, and machines because they do not need mob movement logic.

Recommended stable starting points are humanoid_wandering, quadruped_wandering, statue, and the block entity preset animated_randomly. Some other presets already exist for schema and renderer support, but are still marked as WIP in the Profile Reference.

📁 File Structure

A typical pack looks like this:

data/<namespace>/easy_model_entities/profiles/entity/<id>.json
data/<namespace>/easy_model_entities/profiles/block_entity/<id>.json

assets/<namespace>/easy_model_entities/render_profiles/<id>.json
assets/<namespace>/easy_model_entities/models/<model>.bbmodel
assets/<namespace>/textures/entity/<texture>.png
assets/<namespace>/textures/block/<texture>.png

<namespace> is your pack or mod namespace, for example my_pack.

Server profiles include their type path in commands:

my_pack:entity/little_explorer
my_pack:block_entity/shrine

Render profiles are separate client-side IDs, usually shorter:

my_pack:little_explorer
my_pack:shrine

Model IDs do not include .bbmodel. Texture IDs do include .png.

🪶 Simplified Profiles

For normal pack use, start with the small version. EME fills many fields from the preset:

  • schema_version defaults to the current schema.
  • version can stay empty unless you want client/server asset mismatch checks.
  • dimensions, movement, behavior, and attributes are generated from the server preset.
  • body_type, rendering, and animation are generated from the render preset.
  • model and texture can be generated from the render profile ID if your files use the default paths.

Practical entity setup with default model and texture paths:

data/my_pack/easy_model_entities/profiles/entity/little_explorer.json
assets/my_pack/easy_model_entities/render_profiles/little_explorer.json
assets/my_pack/easy_model_entities/models/little_explorer.bbmodel
assets/my_pack/textures/entity/little_explorer.png

Server profile:

{
  "model_type": "entity",
  "preset_type": "humanoid_wandering",
  "client": {
    "render_profile": "my_pack:little_explorer"
  }
}

Render profile:

{
  "preset_type": "humanoid_wandering"
}

Practical block entity setup keeps the texture explicit, because block textures usually live under textures/block:

{
  "model_type": "block_entity",
  "preset_type": "animated_randomly",
  "client": {
    "render_profile": "my_pack:shrine"
  }
}
{
  "preset_type": "static",
  "texture": "my_pack:textures/block/shrine.png",
  "animation": {
    "mode": "random_idle"
  }
}

The longer examples below show fields that an exporter may generate when the model needs custom dimensions, bounds, versions, or animation tuning.

🧍 Entity Example

Full details are on Entities.

Data pack server profile:

{
  "model_type": "entity",
  "preset_type": "humanoid_wandering",
  "version": "my-entity-v1",
  "client": {
    "render_profile": "my_pack:little_explorer"
  }
}

Resource pack render profile:

{
  "preset_type": "humanoid_wandering",
  "version": "my-entity-v1",
  "model": "my_pack:easy_model_entities/models/little_explorer",
  "texture": "my_pack:textures/entity/little_explorer.png",
  "animation": {
    "walk_speed_multiplier": 0.85
  }
}

Summon it in game:

/easy_model_entities summon my_pack:entity/little_explorer

🧱 Block Entity Example

Full details are on Block Entities.

Data pack server profile for a fixed shrine that only animates sometimes:

{
  "model_type": "block_entity",
  "preset_type": "animated_randomly",
  "version": "my-shrine-v1",
  "client": {
    "render_profile": "my_pack:shrine"
  },
  "dimensions": {
    "width": 1.0,
    "height": 1.35,
    "eye_height": 0.75
  }
}

Resource pack render profile:

{
  "preset_type": "static",
  "version": "my-shrine-v1",
  "model": "my_pack:easy_model_entities/models/shrine",
  "texture": "my_pack:textures/block/shrine.png",
  "animation": {
    "mode": "random_idle"
  }
}

Place it in game:

/easy_model_entities place_block my_pack:block_entity/shrine

animated_randomly selects the EME host block entity that supports random idle animation. The client plays a short idle burst and then waits before playing it again.

🎞️ Animation Modes

  • automatic: EME picks the standard animation from the preset and entity state.
  • random_idle: plays short idle bursts with pauses between them.
  • none: disables built-in automatic animation. This is mainly useful for mods that animate model parts from Java.

🛠️ Useful Commands

List loaded server profiles:

/easy_model_entities list_profiles

Validate loaded profiles:

/easy_model_entities validate_profiles

Debug one profile:

/easy_model_entities debug_profile my_pack:entity/little_explorer

Summon an entity:

/easy_model_entities summon my_pack:entity/little_explorer

Place a block entity:

/easy_model_entities place_block my_pack:block_entity/shrine

🎁 Bundled Examples

The bundled examples use the namespace easy_model_entities_examples. You can use them as templates for your own pack. See Demo Commands for the exact commands.

🧰 Blockbench Plugin

The planned Blockbench plugin workflow is documented as a WIP placeholder on Blockbench Plugin. It explains why models should start as modded_entity, which bone names are useful for automatic animation, and which pack files the export should generate.

Clone this wiki locally