Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 15:02

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.