Commit Graph

27 Commits

Author SHA1 Message Date
Ludovic Marie a995fd3b46 Prepare with horizon-prepare: launcher, release folders, messages and docs
The launcher prepares a version in-process when it ships the preparer sources
the launcher was built with, with the version's own horizon-prepare when they
differ, and with the Python script only for versions made before it. Release
folders ship horizon-prepare and its sources; resources are reused between
versions with the same preparer. The game's messages, PLAY.txt, the docs and
release builds name horizon-prepare, and tools/prepare_native_client.py is a
wrapper of it for the development tools.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:29:33 +02:00
Ludovic Marie cac89a9995 Creative inventory: every tab and the search as vanilla builds them; scrollbar drag
The creative-tabs.json export failed to build the functional blocks tab (no
data-pack registries: banner patterns), and its fallback read decompiled
sources from a path that no longer exists, so the tab was empty and anvils,
crafting and smithing tables were missing from the tabs and the search. The
search also matched only an approximate display name.

VanillaCreativeTabsExporter now builds every tab with vanilla's own
CreativeModeTabs.tryRebuildTabContents over the vanilla data pack's
registries and writes creative-inventory.json: stacks with components, and
the search tab's creative tooltip lines and tags. The client searches them
as SessionSearchTrees does (FullTextSearchTree, IdSearchTree after '#').
Changing tab empties the search box, as in selectTab.

The scrollbar only jumped to the pressed point; holding it now scrolls as
the mouse moves, anywhere, until release (mouseClicked/mouseDragged), and
the wheel and the scroller follow ItemPickerMenu.

tools/test_creative_parity.py compares every tab and 6,793 searches with
the vanilla client's own search trees. horizon-ctl `type` also fills the
creative search box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:24:55 +02:00
Ludovic Marie 6fab5eb279 Merge branch 'main' into parity-base
# Conflicts:
#	README.md
#	crates/horizon-client/src/game.rs
2026-10-12 19:02:09 +02:00
Ludovic Marie 37898e856b Build from the user's own copy of the game instead of downloading it
Horizon no longer fetches anything of Minecraft from Mojang's servers. The
client jar, version JSON, libraries and assets come from the user's official
launcher install, and the server jar is one they downloaded themselves
(--server-jar or HORIZON_SERVER_JAR). Every file is checked against checksums
pinned in research-lock.json, and the prepared .local/ layout is byte-identical
to the old downloads, so the harnesses and the native client are unchanged.

CI keeps the offline checks on GitHub's runners; the vanilla comparisons and
the mod build need the game, so they move to a manual job on a self-hosted
runner that holds the maintainer's own copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:00:18 +02:00
Ludovic Marie 0410a222ea WIP: unfinished hud parity work, stopped for the night
Uncommitted changes the agent had in progress when it was stopped; may not
build or pass its harnesses yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 22:24:03 +02:00
Ludovic Marie 3c45d66e2e Merge remote-tracking branch 'origin/wip/parity-mobs' into t3/minecraft-parity
# Conflicts:
#	crates/horizon-client/src/game.rs
2026-10-08 23:19:58 +02:00
Ludovic Marie 2f74209da1 Port vanilla mob AI framework: goals, A* pathfinding, controls, projectiles
Mobs now run vanilla's tick order with a GoalSelector/target selector
(priorities, MOVE/LOOK/JUMP/TARGET flags), PathNavigation over the
walk/swim/fly/amphibious node evaluators, Move/Look/Jump/BodyRotation
controls and LivingEntity travel in air, water and lava. Path types,
spawn surfaces and keyframe animations come from a new exporter
(VanillaMobDataExporter -> mob-data.json). Farm animals, zombies,
skeletons, creepers and spiders get their vanilla goals; projectiles
(arrows, snowballs, eggs, ender pearls, fireballs) share one system;
natural spawning follows NaturalSpawner with category caps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:39:26 +02:00
Ludovic Marie eb87b65888 Export feature block behavior when preparing the native client
The 127 skipped placed features were all skipped because the worldgen bundle
lacked worldgen/blocks/{block-properties,cached-collision,cached-support}.nbt
and the survival definitions, which prepare_native_client.py only copied from
a previous simple-block parity run. Run the vanilla exporter directly when
those files are missing, and say so in the client when they are absent.
With them, every placed feature of the three dimensions runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:06:35 +02:00
Ludovic Marie 072735b3ef Merge origin/wip/horizon-creative-tabs
Port the creative screen's Escape and E handling into key_pressed, which
the control socket shares with the window, and keep both exporter hashes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:51:15 +02:00
Ludovic Marie f734f237cf WIP snapshot: creative inventory tabs and vanilla exporter
Uncommitted work from a finished agent worktree on ludothinkpad (/home/ludovic/.t3/worktrees/2026-10-03-i-want-you-to-retro-e5fa4461/t3code-ec3c613c), saved before the worktree was removed. Not built or verified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:20:17 +02:00
Ludovic Marie 3a7f2a2fbf Merge remote-tracking branch 'origin/worktree-agent-a2bb16cfb9ff4be19' into t3code/rewrite-minecraft-rust
# Conflicts:
#	tools/prepare_native_client.py
2026-10-08 11:18:39 +02:00
Ludovic Marie 0810ba02e6 Prepare native-client resources from a fresh checkout
Run the worldgen step after vanilla's data generator, which writes the
biome parameter tables it reads, and export entity-types.json with the
existing VanillaEntityTypesExporter. Without these, preparation failed and
the client exited with "No such file or directory" when loading mobs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:18:30 +02:00
Ludovic Marie f211ce9b12 Merge vanilla block behaviours (level module)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 03:30:01 +02:00
Ludovic Marie f9fc6c8ffa Add structure templates, processors and template/fossil features
Load gzip NBT structure templates lazily with vanilla palette ordering,
apply processors (rule, block_ignore, block_rot, gravity, protected_blocks,
capped, jigsaw_replacement, block_age, lava_submerged) and place them with
rotation/mirror, waterlogging and block-entity data (loot seeds). Per-state
rotate/mirror tables and template ordering flags come from a new vanilla
exporter. Template and fossil features now decode, so desert wells,
fossils and sulfur springs generate; their block entities are kept on the
ProtoChunk. The prepare script bundles templates, processor lists, pools,
structures and structure sets.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 02:17:49 +02:00
Ludovic Marie f11931e1d3 Add level block-behaviour module: setBlock, neighbour/shape updates, fluids, redstone, ticks
Behaviours loads per-block class chains, instance configuration and per-state
support/signal/fluid facts exported by VanillaBlockBehaviourExporter, and ports
Level.setBlock with the CollectingNeighborUpdater, updateShape for every
overriding class, canSurvive, FlowingFluid spreading with lava/water
interactions, gravity blocks, rails, tripwires, redstone wire/torches/diodes,
scheduled ticks and random ticks.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 01:22:03 +02:00
Ludovic Marie e7939fe6e3 Merge vanilla overworld generator with decoration
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 23:44:19 +02:00
Ludovic Marie 3777c9009b WIP: playable client — streaming world, lighting, HUD, crafting, saves, audio, items
Checkpoint of the playable client rewrite before build verification.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 23:24:14 +02:00
Ludovic Marie 42f8960604 WIP: checkpoint interrupted agent work
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 23:23:48 +02:00
Ludovic Marie 497cb8e0e3 Add production noise-chunk generator, worldgen resource bundle and bench
GeneratorData loads a worldgen bundle (written by prepare_native_client.py
to the client resource dir) once; OverworldGenerator binds a seed and shares
compiled samplers across threads; GeneratorWorker generates vanilla
BIOMES..TERRAIN proto chunks (noise fill with aquifers, material surface,
carvers) that match the material-stage parity dumps. Decoration is stubbed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 19:14:23 +02:00
Ludovic Marie 5799bc6dc6 Load every vanilla block model and export gameplay facts
Model catalog now binds all registered blockstates. Sprites accept
fractional alpha, interpolated animations and non-16px frames
(resampled into the shared 16px array). Resource preparation extracts
every jar asset and data file, exports per-state light/hardness/sound
facts through a vanilla exporter, and bundles item default components
from vanilla's data generator reports.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 18:52:46 +02:00
Ludovic Marie c82f0ee8be Apply native-validated landing damage to resident player health 2026-10-07 16:56:23 +02:00
Ludovic Marie 5eb1d61e3a Bind native landing and fall callbacks to the resident player scene 2026-10-07 16:20:23 +02:00
Ludovic Marie 405e174e64 Bind stored player motion to resident chunks and live attributes 2026-10-07 15:15:57 +02:00
Ludovic Marie c109f91cc5 Connect resident client chunks to native-validated world collisions 2026-10-07 14:42:44 +02:00
Ludovic Marie a6966ab450 Mesh resident block models with native culling and UV-aware merging 2026-10-06 22:30:16 +02:00
Ludovic Marie 1a88d6c300 Render registry-bound variants and multipart block models 2026-10-06 21:59:03 +02:00
Ludovic Marie e8b66b83fc Add native Horizon development client with textured chunk rendering 2026-10-06 19:17:08 +02:00