Data types

The reusable value shapes that fields expect — modifiers, effects, text and more.

Powers, actions and conditions are the nouns and verbs of Apoli. Data types are the smaller pieces they’re made of: the shape of an attribute modifier, a status effect, a bit of text, an item stack. Learn a data type once and you know it everywhere it appears.

What counts as a data type

Anything a field expects that isn’t just a raw number or string. Some are objects, some are strings with special meaning:

Data typeLooks likeUsed by
Identifier"apoli:heal"every type, power ids, tags
Attribute modifier{ operation, value, attribute }apoli:attribute
Text component"Fast" or a JSON text objectname, description
Status effect{ effect, duration, amplifier }apoli:apply_effect
Item stack{ item, count, components }item actions, give
HUD render{ should_render, bar_index }resources & cooldowns
Shape / Space"sphere" · "local"radius & velocity fields
Comparison"<=" with compare_toapoli:health, resources

Identifier

An identifier names something in namespace:path form — apoli:attribute, minecraft:diamond, my_pack:mana. If you write just path with no namespace, Minecraft assumes minecraft:. Identifiers are case-sensitive and lowercase.

Comparisons

Numeric conditions and resource checks share a comparison shape: a comparison operator and a compare_to value.

{ "comparison": ">=", "compare_to": 10 }

Operators: <, <=, ==, >=, >, !=.

On apoli:resource, compare_to also accepts an Expression, so a resource can be compared against another resource or an entity stat rather than a fixed number:

{ "comparison": ">=", "compare_to": "example:spell_cost" }

Single or list, almost everywhere

Many fields accept either a single value or a list of them. apoli:attribute takes modifier (one) or modifiers (many); apoli:apply_effect takes effect as one object or an array. When a page says “single or list”, both forms are valid — use whichever reads better.

Next