
M1 - Machine One AI Interface
Operate the Minecraft client through a local text interface, for automation and AI control.
Список изменений
Fixed
-
Pressing Escape with M1 loaded no longer dismisses the pause menu.
ScreenWatch's PAUSE reflex (added 0.15.x for the unattended aim/pick stall) killed EVERYPauseScreenthat was not inside the deliberatepause-verb grace window -- including the one the operator opened by hand, one client tick later, sometimes before it drew a frame. The reflex now tells the two apart by WINDOW FOCUS, which is exact rather than heuristic: vanilla can only summon that screen two ways, and they sit on opposite sides of the focus flag.GameRenderer.renderopens it only while!minecraft.isWindowActive() && options.pauseOnLostFocus, after 500ms unfocused (1.20.1GameRendererL1059-1064);KeyboardHandleropens it on key 256, and a key press only reaches a FOCUSED window (L420-423). Both callpauseGame(false), so thePauseScreen(showsPauseMenu)flag canNOT discriminate -- read out of the decompiled sources, not assumed, and re-checked present and unchanged in 1.20, 1.20.6, 1.21, 1.21.5, 1.21.9, 1.21.11, 26.1, 26.2 and 26.3-snapshot-7. A pause seen while the window is focused is latched to that screen INSTANCE, so alt-tabbing away from a menu the operator opened does not make it vanish behind him. The lost-focus reflex is unchanged. -
The agent layer never ran on ANY Forge or NeoForge cell. The loader glue's client-tick handler stopped after
PickupUpgrade.tick, soAgentRuntime.tick-- and with it the agent loop (ActionQueue, every queued multi-tick action: attack/defend/follow/mine-area/recover/craft/sleep) andScreenWatch(death auto-respawn, sign-dialog dismissal, the pause reflex) -- plusDamageWatch.tickandHungerWatch.tickwere dead on all 24 non-Fabric cells. Only the two Fabric client entrypoints ever called them. The glue carried a comment claiming it was "kept identical to the Fabric glue"; it had not been since the agent layer landed. All nine loader entrypoint masters now run the same eight-call chain, in the same order, as the Fabric client. -
M1SrvNet.tickwas missing entirely from theneoforge_earlyshape (NeoForge 1.20.2, 1.20.3, 1.20.4), so the/m1srvserver-query backchannel could never complete a round trip there. -
VaultNet.onSystemLinewas not fed on Forge or NeoForge (except theneoforge_26shape): the system-chat handler forwarded only toM1SrvNet, so Bank Vault's/bank apireplies -- the async[bv]report path behind every multiplayervaultverb -- never arrived. The handler now feeds both, matching the FabricClientReceiveMessageEvents.GAMEhandler.
Changed
mod_versionstamped 0.17.0 in all 34 cells. 0.16.1 changed shared code that every cell compiles but bumped onlyFabric/26, leaving 33 cells stamped 0.16.0 over 0.16.1 sources -- the same "shipped code under an unchanged version name" trap the project hit once before. Minor rather than patch because the Forge/NeoForge jars gain the whole agent layer.
Notes
pack_formatwas audited across all 34 cells againstMemory/knowledge/pack-formats.mdand is fully compliant: plain int at N <= 64, nopack.mcmetaon the Fabric/NeoForge 1.21.9-1.21.11 cells, the exact-single range on the DATA major for Forge 1.21.10 (88) and 1.21.11 (94), and the${packFormat}range template on both 26 cells. The older "Forge 1.21.10/1.21.11 stale pack_format" follow-up is closed.- Smoketested: 13/13 PASS, every PNG eyeballed (Raider
Client_Tests, 2026-08-25). Tier = CRITICAL (1.20.1, 1.21.1, 1.21.11, 26.1.2 on all applicable loaders -- the publish gate), EXTENDED with Forge/1.20.6 and NeoForge/1.20.2 so that all ELEVEN distinct entrypoint shapes are covered, since the entrypoints are what this release actually changed. Every frame is a real in-world render, and 12 of the 13 show a live block-outline at the crosshair -- direct evidence thatGameRenderer.pick()is running andhitResultis not stale, which is the surface the ScreenWatch change touches. (The exception, NeoForge 1.20.2, spawned inside a leaf canopy, so there is no valid pick target; the frame is otherwise a clean in-world render.) - Behaviour evidence for the parity fix, observed on a real client: Forge 1.21.1 emitted
BOTH a DamageWatch
[alert] took 20.0 damage (health 20.0 -> 0.0) -- DEADreport and a ScreenWatch death report, and NeoForge 26.1.2 emitted the DamageWatch one. Those strings can only be produced byDamageWatch/ScreenWatch, which are reached only throughAgentRuntime.tick-- the call these entrypoints did not make before 0.17.0. All four probed cells also auto-respawned with nobody clicking Respawn. - What is NOT proven: a repeatable two-directional behaviour gate. Three attempts each
scored wrong in an instructive way -- see
minecraft/m1.md-- and the one that ends green has never been shown to go red, so it is not evidence. The COMPLETE tier (every MC version inside every jar's claimed range) has also not been run; this is CRITICAL + shape completion.
