* feat(bedrock): support vibrant visuals biome data
* Use NBT biome definitions for Bedrock
* Pre-generate Bedrock biome definitions
---------
Co-authored-by: Zoltán Virágh <zoltan.viragh@cloudtalk.io>
* fix(data): map missing main arm and skin tracked IDs for 1.21-1.21.6
* fix(player): send main hand and skin customisation metadata across versions
* fix(data): map missing main arm and skin tracked IDs in source JSON
* fix(protocol): remap item/block state IDs and entity metadata for older Java clients
The server was using reversed ViaVersion mappings (designed for old→new)
to downgrade packets for older clients, which produced ID collisions and
incorrect fallbacks for 26.1-exclusive items and block states.
Changes:
- Replace ViaVersion with ViaBackwards mapping files for item ID and
block state remapping, which provide the correct new→old direction
with proper closest-item fallbacks for 26.1-exclusive content
- Fix CSetEntityMetadata to remap ItemStack item IDs per client version,
matching the version-aware handling already done for inventory packets
and block state metadata
- Fix TrackedData codegen to resolve Java JSON keys correctly by trying
both bare names and DATA_-prefixed names, and iterate the union of all
version keys instead of only the latest (Bedrock) version
- Fix LootCondition::MatchTool to default to false instead of true,
preventing silk-touch loot table branches from always winning and
causing ores to drop themselves instead of their correct items
Fixes: block drops invisible on older Java clients
Fixes: leather showing as milk bucket on 1.21.11
Fixes: coal ore dropping coal ore instead of coal
Fixes: 26.1-exclusive blocks showing as wrong blocks on older clients
* fix(codegen): remove #[must_use] from trait impl methods in generated code
* fix(codegen): switch entity, sound and block state remapping to ViaBackwards mappings
---------
Co-authored-by: Missing_Love <42416195+Q2297045667@users.noreply.github.com>
* fix(entity): derive hurt sound parity from generated mapping
Keep slime hurt sounds in runtime because they depend on entity size.\n\nMove enderman and undead-family hurt sound mappings into generated data so living.rs dispatches through a shared lookup instead of owning a hardcoded table.
* refactor(entity): derive hurt sound lookup from entities data
The Extractor companion now emits hurt_sound through entities.json. Keep Pumpkin's hurt_sound_for_entity_type helper narrow and generated while moving its source of truth to entity data.
Slime remains a runtime special case because its hurt sound depends on size rather than static entity metadata.
* refactor(entity): fold hurt sound helper into entity codegen
Move hurt-sound helper generation into the existing entity codegen path.
Remove the standalone helper builder and generated file now that hurt_sound is sourced from entities.json. Runtime dispatch stays unchanged and slime remains a runtime size-based exception.
* refactor(entity): inline hurt sound into EntityType
Remove the standalone entity_hurt_sound feature and helper path.
Hurt sounds now live directly on generated EntityType values, while runtime behavior stays the same and slime remains the size-based runtime exception.