Skip to content

Overview

A species in Ancient Creature is identified by a resource id — ancientcreature:triceratops, mypack:stegosaurus — and defined entirely by data files. There is no Java involved in adding one.

Where things live

ConcernLocationReloads with
Gameplay: size, attributes, AI, sounds, growth, diet, hunger, fossil biomedata/<ns>/ancientcreature/species/<name>.json/reload
Appearance: geometry, texture, variants, GUI framingassets/<ns>/ancientcreature/species/<name>.jsonF3+T
Modelassets/<ns>/ancientcreature/geo/<name>.geo.jsonF3+T
Animationsassets/<ns>/ancientcreature/animations/<name>.animation.jsonF3+T
Animation controllerassets/<ns>/ancientcreature/animation_controllers/<name>.controller.jsonF3+T

The file's path under species/ is the id. A file at data/mypack/ancientcreature/species/stegosaurus.json defines mypack:stegosaurus.

Why gameplay and appearance are separate

Gameplay data lives under data/ and appearance under assets/ so that:

  • a dedicated server never loads a model, texture or animation — it only needs the data/ half;
  • a resource pack can restyle a creature without touching balance;
  • a datapack can rebalance a creature without shipping any art.

The server sends its species definitions to each client on join and after every reload, because the client needs the physical size and growth to size the entity locally. Models and textures are never sent through packets — they come from the resource pack like any other asset.

One entity type

Every species spawns as ancientcreature:ancient_creature. It swaps its navigation and movement control when the species is applied, so land, aquatic and flying creatures all share the single type.

The three ids from before the migration — ancientcreature:triceratops, :tyrannosaurus_rex and :megalodon — are no longer registered, which means creatures saved under them in an older world are lost. See Migration.

Predators hunt when hungry

Every creature has a hunger meter. Predators only pick prey once it falls far enough, and stop once they have eaten, so they do not attack everything that walks past.

This gates prey selection only. Fighting back, driving off hostile mobs and the attack goals themselves are never gated, so a well-fed creature still defends itself.

What a pack cannot do

Behaviour is chosen from a closed set of components. A pack picks and configures them; it cannot introduce new Java behaviour. Animation controller conditions use a small documented expression grammar, not arbitrary code.

Anything a pack gets wrong is reported in the log with the file and the reason, and that one file is skipped. Other species keep loading.

Next

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