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:
+49
-22
@@ -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.2–3 |
|
||||
| 1.7.5 | 4 | 2014-02-26 <!-- VERIFY exact date --> | yes, with 1.7.2–4 |
|
||||
| 1.7.4 | 4 | 2013-12-10 | yes, with 1.7.2–3 |
|
||||
| 1.7.5 | 4 | 2014-02-26 | yes, with 1.7.2–4 |
|
||||
| 1.7.6 | **5** | 2014-04-09 | **incompatible** with 1.7.2–5 |
|
||||
| 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.6–7 |
|
||||
| 1.7.9 | **5** | 2014-06-16 <!-- VERIFY exact date --> | yes, with 1.7.6–8 |
|
||||
| 1.7.7 | **5** | 2014-04-09 | yes, with 1.7.6 |
|
||||
| 1.7.8 | **5** | 2014-04-11 | yes, with 1.7.6–7 |
|
||||
| 1.7.9 | **5** | 2014-04-14 | yes, with 1.7.6–8 |
|
||||
| 1.7.10 | **5** | 2014-06-26 | yes, with 1.7.6–9 |
|
||||
|
||||
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.2–1.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.2–1.7.5 = 4 and 1.7.6–1.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.2–1.7.5 = protocol 4; 1.7.6–1.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.2–1.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.2–1.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. -->
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user