Repository navigation
v1.0.0
Anvil 1.0.0 rebuilds every add-on file on a typed JSON model and adds
support for Minecraft 1.26.60. It is a breaking release: projects built
on 0.9.x need their scripts updated.
Highlights
- Every component, document and file is a typed dataclass validated
against the Minecraft schemas at export, with clear ValueError messages. - The Jinja templates (.jsont) are gone: every file is written from Python.
- Full Minecraft 1.26.60 support, including the stricter entity schemas.
JSON model (anvil.lib.jsonmodel)
- New declarative engine: JsonObject, JsonValue, JsonComponent,
JsonCustomComponent, JsonContainer and JsonFile. - Field rules are typing.Annotated metadata (InRange, Length, Unique,
MinMax, ExactMinMax, RangeMinMax, Keyed, Hex, Pairs...) compiled into
checks, encoders and JSON schemas (schema). - JSON loading with from_json; unknown keys raise ValueError.
- All type aliases and enums live in anvil.lib.jsonmodel.types and
anvil.lib.jsonmodel.enums. - Component clashes are class-based: clashing components cannot be used
together in a block, a permutation or a component group.
Components and objects
- Entities, blocks, items and biomes: every component rewritten from the
Microsoft and Mojang references; parts have add_/set_ builders. - Actors: flattened modules, typed client/server descriptions, one class
each for animations, animation controllers and render controllers,
add_*_property builders, entity.set_display_name. - Items: plain Item class; attachables are item.client (ItemClient).
- Blocks: plain Block class; Block.descriptor() returns a BlockDescriptor
(name, states, tags). - Biomes: typed descriptions, server and client files created on use.
- Crafting: recipes and the crafting catalog split into typed modules.
- Features, feature rules, structures, loot tables, trade tables,
dialogue, UI, particles, PBR, camera, sounds, textures, geometry,
animations and voxel shapes are all typed files. - Molang: pack setting queries, Math.sign / Math.copy_sign, strict lerp.
Minecraft 1.26.60
- Vanilla data updated to 1.26.60; experimental vanilla content moved to
anvil.beta.vanilla. Vanilla factories only accept real ids. - Stricter entity schemas: {min, max} ranges (jump_delay, timer time,
attack damage, economy_trade_table discounts), transformation delay and
sound lists, trail radius, no tags with states in block descriptors. - block_entity entity_storage and container title (experimental).
- Server sound definitions are no longer experimental (1.26.60 schema).
- Dimensions are components in anvil.api.dimension (format 1.26.50,
vanilla overrides only). - Loot tables write format_version 1.26.60; new biome_has_tag condition.
- mega_trunk trunk_width accepts a range; jigsaw on_placed.
- Manifest multiselect pack setting.
- Script modules: @minecraft/server 2.11.0, @minecraft/server-ui 2.3.0.
Beta (features.experimental)
- anvil.beta.blocks.components: BlockCollisionBoxMinMax (min/max boxes
or a voxel shape from a Blockbench model), BlockEnchantmentPowerTransmitter,
BlockVibrationProperties, BlockNeighborChange. - anvil.beta.actors.components: EntityReflectProjectiles.
Project and tooling
- Config redesign: anvilconfig.json sections package, manifest, features,
build and anvil (no migration from the old layout). - pathlib everywhere, orjson everywhere, ValueError for user errors.
- tools/update_vanilla.py rebuilds the vanilla module from bedrock-samples.
- Docs: guides and API reference rewritten for the typed API.
- New issue and PR templates and contribution guide. The 0.9.x changelog
is archived in the docs; release notes now live on GitHub Releases.