Commit Graph

5 Commits

Author SHA1 Message Date
Ludovic Marie 0b581f9ffe Give each crate's probe example its own target name
horizon-client, horizon-world and horizon-protocol each had an example
named `probe`. Cargo copies every crate's examples into one
<profile>/examples/ directory, so parallel parity harnesses sharing a
target dir could run another crate's probe (CI parity run 40055656303:
command_parse ran the horizon-world dispatcher). The examples are now
client_probe, world_probe and protocol_probe ([[example]] in each
Cargo.toml; the files stay where they are), and every harness builds
and runs its own crate's name.

tools/parity.py recognises the new names when it counts the probes a
harness ran, and renames the old `probe` in recorded artifacts to the
crate's target (from the record's -p, else its probe sources), so the
prebuild still builds them instead of dropping them as unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 08:08:18 +02:00
Ludovic Marie 858f701ee8 Run the horizon-client parity probes from one binary
81 client examples that harnesses run become modules of examples/probe:
harnesses run `probe <name> ...` (or `cargo run --example probe -- <name>`),
and the shared helpers (audio_common, hud_fixture, chat_screen_fixture)
move with them. The benchmarks and manual tools stay standalone examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 16:30:38 +02:00
Ludovic Marie ce87bfb8c7 Tools read the pinned Minecraft version from research-lock.json
lab.VERSION, lab.GAME (.local/minecraft/<version>) and lab.RESOURCES
(.local/horizon-client/<version>) come from the lock, and lab.version_info()
reads the pinned client jar's version.json. Every harness, generator and
tool that named 26.3 (resource folders, jar and source paths, result
records, the vanilla client's --version and asset index, the bare login
client's protocol, the benchmark's options.txt data version, the packet id
table's header) uses them, so a candidate worktree pinned to another version
runs them unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:22:20 +02:00
Ludovic Marie 13102892c4 Render, save and gift copper golems as vanilla does
The copper golem takes its weathering's texture and glowing eyes, saves
and loads next_weather_age and weather_state, starts with its weathering
unset instead of weathering on its first tick, and throws what it carries
to the player as BehaviorUtils.throwItem does. Iron golems offer their
poppy to copper golems too (#candidate_for_iron_golem_gift) and put it on
an empty antenna when the offer runs out beside one.

The entity model harness now poses the copper golem with its idle and
chest interaction animations (44 cases), and the entity death loot harness
includes it (1,595 cases over 88 types); both match vanilla.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:31:52 +02:00
Ludovic Marie 723ec3bb8a Drop entity death loot exactly as vanilla's LivingEntity.die does
Entity loot tables now run on the faithful loot engine with an entity
context: the victim, the killer and direct attacker, the damage type and
its tags, the last player to hurt it and their luck, entity predicates
(flags, equipment, components, sheep, cube size, raider captains,
vehicles, entity type tags), damage source predicates, killed_by_player,
random_chance_with_enchanted_bonus, enchanted_count_increase, furnace_smelt
and tag entries. Draws come from the world's random sequence for the table.

mobs::drops ports dropAllDeathLoot: Monster loot for babies, equipment
drops in EquipmentSlot order with Looting's equipment_drops effect and
durability, the fox's mouth item, the wither's star, the charged creeper
head hook, horse inventories and chests, and getBaseExperienceReward with
the equipment bonus and baby zombie reward, split into orbs.

Fixes found on the way: sheep dropped their wool twice, baby monsters
dropped nothing, armour bonus experience and the equipment slot order were
wrong, hoglins were fire immune, and fishing treasure was unreachable (the
hook predicate format changed).

tools/test_entity_death_loot_parity.py: 1,578 cases over 87 entity types
match vanilla.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:56:39 +02:00