Skip to content

Testing a species ​

Quick loop ​

/reload                              picks up data/ changes
F3 + T                               picks up assets/ changes
/ancientcreature species list        confirm it loaded
/ancientcreature summon mypack:stegosaurus

Editing a species and running /reload updates attributes, size and AI on creatures already in the world — no need to kill and respawn.

Checklist ​

CheckHow
It loads/ancientcreature species list shows the id
Behaviour resolved as intended/ancientcreature species get <id> lists the final component set
Hitbox matches physicalF3 + B and look at the box
It rendersIf invisible, the log names the missing geometry or texture
Animations playWalk it around, hit it, watch state changes
Size and growthSpawn a baby with {Age:-24000} and compare
Survives a restartSave, quit, reload — species and variant persist
SoundsAmbient, hurt, death, step, attack
BreedingFeed two adults; an egg is laid and hatches the same species
Hunting/ancientcreature hunger <targets> 0, then watch it pick a target
Identification GUIOpen the Fossil Identification Chamber — it should be listed and framed
Full progressionFossil → DNA → genome → embryo → egg → capsule

Hunger in Jade ​

Hunger decides whether a predator attacks, and it is otherwise invisible. If Jade is installed, looking at a creature shows it:

Tyrannosaurus Rex
Hunger: 14/20
Fed - not hunting

The second line only appears once the value has crossed a threshold — red Hungry - will hunt at or below hunt_threshold, green Fed - not hunting at or above full_threshold. In the gap between them the creature is in the middle of the band, still finishing whatever hunt it started.

Toggle the readout under Jade's own settings, as Creature Hunger.

The value comes straight from synchronised entity data, so it is live and needs no server round-trip. It does not appear until the species' datapack is loaded, because until then the creature is running on fallback values rather than its own.

Without Jade, /ancientcreature hunger reports the same thing and can also set it.

Deliberate breakage ​

Worth doing once so you recognise the messages:

Disable the datapack, keep the resource pack, /reload. The creature goes inert — no AI, default size — and logs:

No species definition for 'mypack:stegosaurus'. Creatures of this species will stay inert with
default size and attributes until the datapack providing it is loaded.

Re-enable and /reload: it recovers. The species id is never rewritten, so nothing is lost.

Break the JSON. Put "width": 0 in and /reload. The file is named, the reason given, the species skipped — and every other species still loads.

Rename a bone in the geometry but not the animation. The animation still plays; the renamed channel is dropped with a warning naming the animation and the bone.

Common problems ​

SymptomLikely cause
Not in species listDatapack half missing, or the file failed to parse — check the log
Listed but invisibleNo client entity with the species id as its identifier, or a wrong geometry or texture in it; the log says which
Renders but in T-poseNo controller in scripts.animate, or its states play animations missing from the client entity's animations map
Saddle or armor doesn't showThe client entity has no render controller drawing the gear layers; see render controllers
Texture scrambledtexture_width/texture_height in the geometry don't match the PNG
Hitbox wrong sizephysical in the datapack, not render_scale in the resource pack
Too big/small in the GUITune gui.scale in the species settings file
Ignores you entirelyNo behaviour components, the ones chosen do not target players, or the creature is simply fed — check /ancientcreature hunger
Dies on landAn aquatic species breathes water by default and dries out on land; give it water, or set respiration
Flying creature walksentity_category is not "flying", so the flight components skip themselves

Automated tests ​

The mod's own tests parse every shipped species, client entity, render controller, geometry, animation and controller through the real loaders, check the geometry baker against vanilla models and Blockbench's UV rules, and exercise Molang, animation sampling and genetics:

bash
./gradlew :common:test

They also check that a broken definition is rejected — so if you are contributing a species to the mod itself, adding it there gets you the same coverage.

Ancient Creature is in beta; species formats may change between releases.