PRs waiting on a minecraft-data PR
PRs waiting on a protodef release
PRs that fix minecraft-data's data
Wire-layout and feature-flag fixes, each checked against a decompiled STREAM_CODEC. The recipe pair is unrelated to the rest and closes PrismarineJS/minecraft-data#182.
PRs ready to review
Green CI, mergeable, not waiting on another PR or a release.
| PR |
Status |
| #4021 |
ready, green — was your only objection |
| #4083 |
ready, green — closes #1587, half of #3274 |
| #4064 |
ready, green |
| #4067 |
ready, green — also fixes one of the master CI flakes |
| #4068 |
ready, green |
| #4069 |
ready, green |
| #4071 |
ready, green |
| #4073 |
ready, green |
| #4085 |
ready, green |
| #4086 |
ready, green |
| #4087 |
ready, green |
| #4088 |
ready, green |
| #4093 |
ready, green |
| #4100 |
ready, green |
| #4101 |
ready, green |
| #4102 |
ready, green |
| #4103 |
ready, green |
| #4104 |
ready, green |
| #4107 |
ready, green |
| #4108 |
ready, green |
| #4111 |
ready, green — same file as #4112, second one rebases |
| #4112 |
ready, green — same file as #4111, second one rebases |
| #4115 |
ready, green |
| #4116 |
ready, green |
| #4118 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#375 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#376 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#377 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#378 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#379 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#380 |
ready, green |
| PrismarineJS/mineflayer-pathfinder#381 |
ready, green |
| PrismarineJS/node-minecraft-protocol#1522 |
ready, green |
| PrismarineJS/node-minecraft-protocol#1523 |
ready, green |
| PrismarineJS/node-minecraft-protocol#1524 |
ready, green |
| PrismarineJS/node-minecraft-protocol#1527 |
ready, green — unblocks PrismarineJS/node-minecraft-protocol#1526 |
| PrismarineJS/prismarine-item#185 |
ready, green |
| PrismarineJS/prismarine-item#188 |
ready, green — read after PrismarineJS/prismarine-item#189 |
| PrismarineJS/prismarine-item#189 |
ready, green |
| ProtoDef-io/node-protodef#178 |
ready, green |
| ProtoDef-io/node-protodef#179 |
ready, green |
| ProtoDef-io/node-protodef#180 |
ready, green |
| ProtoDef-io/node-protodef#177 |
ready, green — pushed a response to @extremeheat's review on 12 Sep, five threads still open |
| ProtoDef-io/ProtoDef#65 |
ready, green — moves with ProtoDef-io/node-protodef#177 |
| PrismarineJS/minecraft-data#1292 |
ready, green — @extremeheat said on 12 Sep he might fix this himself |
| PrismarineJS/prismarine-viewer#488 |
ready, green |
| PrismarineJS/prismarine-viewer#490 |
ready, green — closes PrismarineJS/prismarine-viewer#57 |
| PrismarineJS/prismarine-viewer#506 |
ready, green |
| PrismarineJS/prismarine-viewer#509 |
ready, green |
| PrismarineJS/prismarine-viewer#513 |
ready, green |
| PrismarineJS/prismarine-viewer#514 |
ready, green |
(51 PRs)
PRs blocked on me
Other states
Red CI from master, not from the PR
| Repo and job |
Failure |
Affected PRs |
mineflayer — MC 1.16.5 1.17.1 1.18.2 1.19 red since 7 Sep, MC 1.19.2 1.19.3 1.19.4 1.20.1 since 12 Sep |
One flaky external test per run, a different one each time (master run) |
#4074, #4075, #4081, #4099 |
mineflayer-pathfinder — build (24.x) |
Physics test: Simulated states don't match Bot: (0.5, 3.7967356006686925, 13.30954454956581) !== Simulation: (0.5, 3.495200877005912, 13.45929100856761) |
PrismarineJS/mineflayer-pathfinder#382, on the identical assertion |
Stacked on another open PR's branch
Ordering, both sides on master
Open design questions
Duplicates
A. Vanilla-client packet parity — 18
What mineflayer puts on the wire, diffed against the decompiled client (LocalPlayer.tick, MultiPlayerGameMode, ServerGamePacketListenerImpl). The symptom is usually that something works against a permissive server and does nothing against one that checks. Split out of #4066.
| PR |
Title |
Status |
| #4063 |
physics: send the movement input packets the vanilla client sends |
not ready, green — safe to merge, sneak fix inert until the minecraft-data release |
| #4064 |
health: send player_loaded when the vanilla client would |
ready, green |
| #4065 |
Send the client brand and Client Information when the vanilla client does |
not ready, green — @rom1504's question unanswered |
| #4069 |
send held_item_slot only when the slot differs from the slot the server holds |
ready, green |
| #4085 |
use_item and use_item_on like the vanilla client: shared prediction sequence, cursor on the clicked face, no empty-hand use, swing after the packet |
ready, green |
| #4094 |
Swing every tick while digging, skip STOP on instant breaks and abort with face DOWN |
not ready, green — stacked on #4085 |
| #4086 |
Send the client_command respawn after win_game with the actionId field |
ready, green |
| #4087 |
Report resource packs as ACCEPTED, DOWNLOADED, SUCCESSFULLY_LOADED and deny once |
ready, green |
| #4089 |
Right-click entities like the vanilla client: interact pair, real sneak state, hit point |
not ready, red — waits on the minecraft-data release |
| #4093 |
Dismount by holding sneak for one tick on 1.21.3+ |
ready, green |
| #4107 |
Answer pings and teleports at the start of the next tick, in arrival order |
ready, green |
| #4108 |
physics: a teleport leaves the standing flag alone |
ready, green |
| #4114 |
placeEntity: write a complete use_item when placing a boat |
ready, green — #4085 first is preferred |
| #4115 |
placeBlock: derive the face and the cursor from a raycast, like the client does |
ready, green |
| #4118 |
Expose the interaction ranges the server sends, and the reach check vanilla makes |
ready, green |
| PrismarineJS/node-minecraft-protocol#1522 |
Match the vanilla client in the login/configuration handshake: cookies, brand, per-login chat session, known packs |
ready, green |
| PrismarineJS/node-minecraft-protocol#1523 |
write the 0 holder id for inline registryEntryHolder entries |
ready, green |
| PrismarineJS/node-minecraft-protocol#1525 |
send a command with no signable argument as chat_command |
ready, green — after PrismarineJS/node-minecraft-protocol#1526 |
B. mineflayer state tracking and API surface — 18
Not packet parity: what mineflayer remembers. State surviving a login it should not, an event fired without its argument, a getter returning the wrong shape.
| PR |
Title |
Status |
| #4021 |
placeBlock: reject an occupied target up front |
ready, green — was your only objection |
| #4027 |
inventory: claim clicked slots by hash on 1.21.5+ |
not ready, red — waits on PrismarineJS/prismarine-item#184 |
| #4062 |
entities: read the 1.21.2+ entity_teleport layout |
not ready, green — approved; waits on the minecraft-data release |
| #4068 |
drop the physics tick backlog after an event-loop stall instead of draining it |
ready, green |
| #4071 |
reset teams and scoreboards on every login |
ready, green |
| #4073 |
make bot.controlState's properties enumerable |
ready, green |
| #4081 |
give teamRemoved the team that was removed |
not ready, red — master CI is red, not this PR |
| #4083 |
Track the abilities the server grants |
ready, green — closes #1587, half of #3274 |
| #4099 |
cancel the deferred respawn reply once it is stale, and write no movement packets outside play |
not ready, red — master CI is red, not this PR |
| #4100 |
Make the named scoreboard display slots non-enumerable |
ready, green |
| #4101 |
Throw a descriptive error when bot.chat is called before login |
ready, green |
| #4102 |
Normalize open_window titles to ChatMessage |
ready, green |
| #4103 |
Window state across close, re-login and respawn: stateId per window, close_window on respawn, closeWindow(null) |
ready, green |
| #4104 |
Accept play-phase resource packs when no resourcePack listener answers them |
ready, green |
| #4111 |
Read the scoreboard objective title as a chat component |
ready, green — same file as #4112, second one rebases |
| #4112 |
scoreboard: read the 1.20.3+ objective and score packets |
ready, green — same file as #4111, second one rebases |
| #4116 |
waitForTicks: say when it is physics that is missing, not the server |
ready, green |
| PrismarineJS/prismarine-physics#142 |
Obey the flight the server grants in the abilities packet |
not ready, green — after #4083, which exposes the state it acts on |
C. prismarine-item: 1.20.5+ item components — 4
Components are on the wire but items are still read as pre-1.20.5 NBT, so name, lore and custom data come back in the wrong shape or not at all.
D. prismarine-viewer — 10
Two threads: the viewer drawing the wrong thing (nothing below y=0, no skins, no dropped items, invisible entities drawn), and a host/mesher split so the render path stops holding the event loop (PrismarineJS/prismarine-viewer#490 → PrismarineJS/prismarine-viewer#510 → PrismarineJS/prismarine-viewer#511).
| PR |
Title |
Status |
| PrismarineJS/prismarine-viewer#484 |
Add Minecraft 26.1 support |
not ready, red — empty render on 1.14.4 |
| PrismarineJS/prismarine-viewer#488 |
Render negative-Y sections on 1.18+ worlds |
ready, green |
| PrismarineJS/prismarine-viewer#490 |
Render player skins |
ready, green — closes PrismarineJS/prismarine-viewer#57 |
| PrismarineJS/prismarine-viewer#506 |
Render dropped items |
ready, green |
| PrismarineJS/prismarine-viewer#509 |
resolve entity bone parents by name, whatever their case |
ready, green |
| PrismarineJS/prismarine-viewer#513 |
Unload chunks the server unloads, and follow the world across a transfer |
ready, green |
| PrismarineJS/prismarine-viewer#514 |
Draw nothing for an invisible entity, like the vanilla client |
ready, green |
| PrismarineJS/prismarine-viewer#503 |
viewer.waitForReady() for a fully textured first frame |
not ready, green — conflicting, needs retargeting to master |
| PrismarineJS/prismarine-viewer#510 |
Decode host images without holding the event loop |
not ready, green — stacked on PrismarineJS/prismarine-viewer#490 |
| PrismarineJS/prismarine-viewer#511 |
Parse the block states in the mesher, not on the calling thread |
not ready, green — stacked on PrismarineJS/prismarine-viewer#510 |
E. mineflayer-pathfinder createHuman — 8
createHuman behaving unlike a player. Independent of each other and of the groups above.
F. Test and CI plumbing — 7
No behaviour change. Tests passing for the wrong reason, or suites that have never run. The old -g <version> filter in nmp meant declare_commands handling, lpVec3 and ping have never run in any job.
G. ProtoDef, upstream — 5
Not PrismarineJS, but the same reviewers and PrismarineJS work sits behind them. ProtoDef-io/node-protodef#177 and ProtoDef-io/ProtoDef#65 are the hash datatype for PrismarineJS/prismarine-item#184; the rest came from chasing unreadable packets in the harness.
PRs waiting on a minecraft-data PR
PRs waiting on a protodef release
PRs that fix minecraft-data's data
Wire-layout and feature-flag fixes, each checked against a decompiled
STREAM_CODEC. The recipe pair is unrelated to the rest and closes PrismarineJS/minecraft-data#182.protocol.jsondesynced from the yaml, needsnpm run buildPRs ready to review
Green CI, mergeable, not waiting on another PR or a release.
(51 PRs)
PRs blocked on me
26.1 (26.1) / protocol.json is desynced from yaml, please run 'npm run build'; the PR editsprotocol.jsonwithout regeneratingmasterbuild (1.14.4)renders an empty frame; the dep releases it was waiting on have all shippedOther states
Red CI from
master, not from the PRmineflayer—MC 1.16.5 1.17.1 1.18.2 1.19red since 7 Sep,MC 1.19.2 1.19.3 1.19.4 1.20.1since 12 Sepmineflayer-pathfinder—build (24.x)Physics test:Simulated states don't match Bot: (0.5, 3.7967356006686925, 13.30954454956581) !== Simulation: (0.5, 3.495200877005912, 13.45929100856761)Stacked on another open PR's branch
Ordering, both sides on
mastersequence: 0this writes with a real shared counterlib/scoreboard.js; whichever lands second needs a rebaseOpen design questions
use_entity.hand, so whatever is decided here applies to it, but nobody has commented there. PrismarineJS/minecraft-data#1292 reverts four other 1.21.6 mappers on the same reasoning and keepsentity_action.actionIdas a mapper, which is the case for naming them.HashedSlothashing belongs in a generichashprotodef type (ProtoDef-io/node-protodef#177, ProtoDef-io/ProtoDef#65) or inprismarine-item. @extremeheat's feedback on where the hashing code should live is on ProtoDef-io/node-protodef#177; I pushed a response there on 12 Sep.Duplicates
A. Vanilla-client packet parity — 18
What mineflayer puts on the wire, diffed against the decompiled client (
LocalPlayer.tick,MultiPlayerGameMode,ServerGamePacketListenerImpl). The symptom is usually that something works against a permissive server and does nothing against one that checks. Split out of #4066.player_loadedwhen the vanilla client wouldheld_item_slotonly when the slot differs from the slot the server holdsuse_itemanduse_item_onlike the vanilla client: shared prediction sequence, cursor on the clicked face, no empty-hand use, swing after the packetclient_commandrespawn afterwin_gamewith the actionId fieldplaceEntity: write a completeuse_itemwhen placing a boatplaceBlock: derive the face and the cursor from a raycast, like the client doesregistryEntryHolderentrieschat_commandB. mineflayer state tracking and API surface — 18
Not packet parity: what mineflayer remembers. State surviving a login it should not, an event fired without its argument, a getter returning the wrong shape.
placeBlock: reject an occupied target up frontentity_teleportlayoutbot.controlState's properties enumerableteamRemovedthe team that was removedbot.chatis called before loginopen_windowtitles toChatMessageclose_windowon respawn,closeWindow(null)resourcePacklistener answers themwaitForTicks: say when it is physics that is missing, not the serverC. prismarine-item: 1.20.5+ item components — 4
Components are on the wire but items are still read as pre-1.20.5 NBT, so name, lore and custom data come back in the wrong shape or not at all.
Item.toHashedNotchfor 1.21.5+window_clickslot claimscustom_datacomponent asitem.nbton 1.20.5+displayNameD. prismarine-viewer — 10
Two threads: the viewer drawing the wrong thing (nothing below y=0, no skins, no dropped items, invisible entities drawn), and a host/mesher split so the render path stops holding the event loop (PrismarineJS/prismarine-viewer#490 → PrismarineJS/prismarine-viewer#510 → PrismarineJS/prismarine-viewer#511).
viewer.waitForReady()for a fully textured first frameE. mineflayer-pathfinder createHuman — 8
createHumanbehaving unlike a player. Independent of each other and of the groups above.gotorejects an unreachable goal instead of resolving;stop()no longer latches while idlewalkTofor the goal in flight joins that walk instead of superseding itwalkToandlookAtsay so when physics is disabledF. Test and CI plumbing — 7
No behaviour change. Tests passing for the wrong reason, or suites that have never run. The old
-g <version>filter in nmp meantdeclare_commands handling,lpVec3andpinghave never run in any job.playerJoinMC_VERSIONinstead of a title grepdeclare_commandstree the packet's rootIndexG. ProtoDef, upstream — 5
Not PrismarineJS, but the same reviewers and PrismarineJS work sits behind them. ProtoDef-io/node-protodef#177 and ProtoDef-io/ProtoDef#65 are the
hashdatatype for PrismarineJS/prismarine-item#184; the rest came from chasing unreadable packets in the harness.hashdatatypehashdatatype — spec side of ProtoDef-io/node-protodef#177partialReadErrorwith the chunk it could not read