verify pass: resolve VERIFY flags (corrections + citations + honest UNCONFIRMED)

Corrected real errors: several 1.7.x release dates, resource_pack_send version,
config packet ordering, structured-component count (56), PLAYER_LOADED (1.21.4),
entity_sound_effect field order. Confirmed+cited the rest; remaining ~19 items
re-marked UNCONFIRMED (third-party/ViaLegacy/26.2 internals unreachable from refs).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
claude-timemachine
2026-06-19 15:03:44 +02:00
parent d73c1c9537
commit a3d5f64ef5
25 changed files with 179 additions and 119 deletions
+49 -22
View File
@@ -12,27 +12,33 @@
|---|---|---|---|
| 1.7.2 | 4 | 2013-10-25 | — |
| 1.7.3 | 4 | 2013-10-26 | yes, with 1.7.2 |
| 1.7.4 | 4 | 2013-12-09 <!-- VERIFY exact date --> | yes, with 1.7.23 |
| 1.7.5 | 4 | 2014-02-26 <!-- VERIFY exact date --> | yes, with 1.7.24 |
| 1.7.4 | 4 | 2013-12-10 | yes, with 1.7.23 |
| 1.7.5 | 4 | 2014-02-26 | yes, with 1.7.24 |
| 1.7.6 | **5** | 2014-04-09 | **incompatible** with 1.7.25 |
| 1.7.7 | **5** | 2014-04-10 <!-- VERIFY exact date --> | yes, with 1.7.6 |
| 1.7.8 | **5** | 2014-06-16 <!-- VERIFY exact date --> | yes, with 1.7.67 |
| 1.7.9 | **5** | 2014-06-16 <!-- VERIFY exact date --> | yes, with 1.7.68 |
| 1.7.7 | **5** | 2014-04-09 | yes, with 1.7.6 |
| 1.7.8 | **5** | 2014-04-11 | yes, with 1.7.67 |
| 1.7.9 | **5** | 2014-04-14 | yes, with 1.7.68 |
| 1.7.10 | **5** | 2014-06-26 | yes, with 1.7.69 |
Sources:
- minecraft.wiki `/w/Java_Edition_1.7.2` (fetched 2026-06-19) — release date, protocol 4, Netty rewrite
- minecraft.wiki `/w/Java_Edition_1.7.4` (fetched 2026-06-19) — release date 2013-12-10 (pre-release was 2013-12-09; full release differs)
- minecraft.wiki `/w/Java_Edition_1.7.5` (fetched 2026-06-19) — release date 2014-02-26, protocol 4 confirmed
- minecraft.wiki `/w/Java_Edition_1.7.6` (fetched 2026-06-19) — release date 2014-04-09, protocol 5 confirmed
- minecraft.wiki `/w/Java_Edition_1.7.7` (fetched 2026-06-19) — release date 2014-04-09, protocol 5 confirmed
- minecraft.wiki `/w/Java_Edition_1.7.8` (fetched 2026-06-19) — release date 2014-04-11, protocol 5 confirmed
- minecraft.wiki `/w/Java_Edition_1.7.9` (fetched 2026-06-19) — release date 2014-04-14, protocol 5 confirmed
- minecraft.wiki `/w/Java_Edition_1.7.10` (fetched 2026-06-19) — release date 2014-06-26, protocol 5, compatibility note
- `/tmp/mcproto-refs/minecraft-data/data/pc/1.7/version.json``{"version":5,"minecraftVersion":"1.7.10","majorVersion":"1.7"}`
The protocol-version page on minecraft.wiki (fetched 2026-06-19) listed all of
1.7.21.7.10 as protocol 4; the per-version pages for 1.7.6 and 1.7.10
individually confirm protocol 5, and the minecraft-data canonical record for
`1.7.10` is version 5. The per-version pages are the higher-fidelity source;
<!-- VERIFY --> the exact boundary (whether 1.7.21.7.5 = 4 and 1.7.61.7.10 = 5
is consistent with the protocol-version list being incomplete/erroneous for the
1.7 range).
`1.7.10` is version 5. The per-version pages are the higher-fidelity source.
The split is confirmed: 1.7.21.7.5 = protocol 4; 1.7.61.7.10 = protocol 5.
The protocol-version list page is incomplete/erroneous for the 1.7 range.
(Sources: minecraft.wiki per-version articles for 1.7.6 and 1.7.10, fetched 2026-06-19;
`minecraft-data/data/pc/1.7/version.json`.)
---
@@ -126,14 +132,22 @@ Key changes at the wire level:
`packet_named_entity_spawn` (Play 0x0C S→C) already carried a `data` array of
property `{name, value, signature}` triples in the minecraft-data 1.7 schema
— this is the textures property bag that carries the signed skin URL.
<!-- VERIFY --> whether this field was added in 1.7.2 or specifically in 1.7.6
(it is present in the 1.7.10 protocol.json which covers protocol 5).
<!-- UNCONFIRMED: the data[] property array is present in the 1.7.10 protocol.json
(protocol 5) but minecraft-data has no separate schema for protocol 4 (1.7.21.7.5),
so we cannot determine from local sources whether this field was present in 1.7.2
or was added in 1.7.6. The signed-URL skin overhaul in 1.7.6 makes 1.7.6 the more
likely introduction point, but no protocol-4 protocol.json exists to diff against. -->
- **Name-change infrastructure**: Server-side preparation for player name
changing (actual service launched 2015-02-04). No packet-schema change, but
UUID-keyed identity was reinforced.
- **Per-server resource pack option**: `packet_resource_pack_send` <!--
VERIFY --> exact packet ID / whether this is a new Play packet in protocol 5 or
re-uses an existing custom\_payload channel.
- **Per-server resource pack option**: The 1.7.6 UI change ("per-server resource
pack" option with prompt/enabled/disabled modes) was a client UI feature, not a
new Play packet. `packet_resource_pack_send` does **not** appear in the 1.7
protocol.json — it was added in 1.8 as Play CB 0x48. The 1.7.6 feature
operated through the existing client options flow, not a new wire packet.
(Source: `/tmp/mcproto-refs/minecraft-data/data/pc/1.7/protocol.json` play.toClient
mapper — no resource_pack_send entry; 1.8 protocol.json play.toClient 0x48 =
"resource_pack_send".)
- The 1.7.6 client was incompatible with 1.7.21.7.5 servers (confirmed by
minecraft.wiki 1.7.6; fetched 2026-06-19), making the protocol-5 boundary
hard.
@@ -179,8 +193,13 @@ No S→C packets in this state.
Notes:
- No Login Compression packet (0x03) — that is a 1.8 addition.
- `publicKey` and `verifyToken` use **i16** (signed 16-bit) as the length
prefix, not VarInt; this is a known 1.7 quirk that 1.8 also retains
<!-- VERIFY --> exact format change in 1.8 if any.
prefix, not VarInt. **1.8 changed both** to VarInt-prefixed buffers (both
S→C Encryption Request and C→S Encryption Response / sharedSecret). This was
confirmed to be a 1.8 change by comparing `packet_encryption_begin` in both
`protocol.json` files: 1.7 uses `{"countType":"i16"}`, 1.8 uses
`{"countType":"varint"}` for all four buffer fields across both directions.
(Source: `minecraft-data/data/pc/1.7/protocol.json` and
`minecraft-data/data/pc/1.8/protocol.json` login.toClient + login.toServer.)
- `uuid` in Login Success is transmitted as a **string** (hyphenated UUID text),
not as two i64 fields — that encoding came later.
@@ -325,8 +344,12 @@ Source: `protocol.json` `types.position_iii` / `position_isi` / `position_ibi`.
The client-to-server Player Position packets include a `stance` field (f64)
representing the player's eye height offset above their feet (typically `y + 1.62`).
The server uses this for hitbox calculations. The `stance` field was **removed in
1.8** when the server began computing it server-side.
<!-- VERIFY --> exact removal version.
1.8** when the server began computing it server-side. Confirmed: `packet_position`
and `packet_position_look` in `minecraft-data/data/pc/1.7/protocol.json` contain
`stance:f64`; the same packets in `data/pc/1.8/protocol.json` do not — the field
is entirely absent. Removal version: 1.8 (protocol 47).
(Source: `minecraft-data/data/pc/1.7/protocol.json` and `data/pc/1.8/protocol.json`
play.toServer `packet_position` field lists.)
### Plugin Message channel data length
In 1.7, `packet_custom_payload` (both directions) uses an **i16** length prefix
@@ -420,12 +443,12 @@ detail.
|---|---|---|
| Framing | VarInt length + VarInt ID | Same in 1.8+ |
| Compression | None | Login Compression added in 1.8 (0x03 Login packet) |
| Encryption | RSA-1024 key exchange, AES/CFB8 shared secret, verifyToken — same mechanism as 1.8+ | i16 length prefix on `publicKey`/`verifyToken` buffers (vs VarInt in later versions <!-- VERIFY -->) |
| Encryption | RSA-1024 key exchange, AES/CFB8 shared secret, verifyToken — same mechanism as 1.8+ | i16 length prefix on `publicKey`/`verifyToken` buffers; changed to VarInt in 1.8 (confirmed from `packet_encryption_begin` in both `protocol.json` files) |
| Entity IDs in Play | Mix of i32 and VarInt (e.g. `entity_destroy` uses i32 array, `animation` uses VarInt) | Standardised to VarInt in 1.8 |
| Position encoding | Three separate i32/i16/u8 fields | Packed 64-bit Position type added in 1.8 |
| Slot NBT | `compressedNbt` (zlib-compressed) | Uncompressed NBT after 1.8 |
| Player stance | Client sends `stance` (f64) in position packets | Removed in 1.8 |
| Login Success UUID | String (hyphenated text) | Two i64 fields in 1.16+ <!-- VERIFY exact version --> |
| Login Success UUID | String (hyphenated text) | Binary UUID (two i64 fields) from 1.16 (confirmed: `ClientboundBaseProtocol1_16.java` in ViaVersion overrides `passthroughUUID` to use `Types.UUID` instead of `Types.STRING`; `ClientboundBaseProtocol1_7.java` uses `Types.STRING`) |
| Player List Item | Simple {name, online, ping} per-packet | Replaced with action-tagged packet in 1.8 |
| Chunk format | zlib-compressed section bitmask + addBitMap; separate MapChunkBulk for multi-chunk | Restructured in 1.9 |
@@ -439,8 +462,12 @@ Velocity modern forwarding uses a **Login Plugin Request / Response** exchange i
the Login state (added in 1.13). 1.7 clients do not support Login Plugin
messages; a Velocity-in-modern-mode proxy cannot forward 1.7 clients without a
ViaLegacy bridge that intercepts the Login Plugin exchange on behalf of the 1.7
client. <!-- VERIFY --> exact Velocity behaviour when a 1.7 client hits a
modern-forwarding backend.
client. <!-- UNCONFIRMED: exact Velocity behaviour (disconnect vs handshake failure
vs silent passthrough) when a 1.7 client hits modern-forwarding without ViaLegacy.
ViaVersion source in the ref set does not include Velocity's login-plugin handler,
and no Velocity source is present in /tmp/mcproto-refs/. Known to require ViaLegacy
to intercept the Login Plugin exchange; what Velocity does without it is not
verifiable from local refs. -->
---