Skip to content

Multi-Version

This page serves as a quick-reference/guide on differences that came up as the Beta-era protocol was developed, including some info on Beta 1.8 and beyond.

WARNING

This is not a proper page and just for taking notes/as a reference (hence why it's hidden from the sidebar), so it will be less structured and less formal than other pages. It may be removed at any time.

Beta 1.8

Beta 1.8.x is a version often disliked by legacy Minecraft players, due to its addition of the hunger bar and less nostalgic world generation. However, it has interesting features for server admins like creative mode and flying, and the protocol still resembles Beta 1.7.3 closely.

To implement basic support, make the following changes to the login packet:

Clientbound

swift
func write(to buffer: inout ByteBuffer) throws {
    buffer.writeInteger(entityId)
    buffer.writeString16("")
    buffer.writeInteger(worldSeed)

    if beta18 {
        buffer.writeInteger(Int32(1)) // 0 for survival, 1 for creative
        buffer.writeInteger(dimension.rawValue)
        buffer.writeInteger(Int8(2)) // normal difficulty
        buffer.writeInteger(UInt8(128)) // world height
        buffer.writeInteger(UInt8(8)) // max players
    } else {
        buffer.writeInteger(dimension.rawValue)
    }
}

Serverbound

swift
init(from buffer: inout ByteBuffer) throws {
    protocolVersion = try buffer.readInteger()
    username = try buffer.readString16()
    let _: Int64 = try buffer.readInteger()

    if beta18 {
        let _: Int32 = try buffer.readInteger()
        let _: Int8 = try buffer.readInteger()
        let _: Int8 = try buffer.readInteger()
        let _: UInt8 = try buffer.readInteger()
        let _: UInt8 = try buffer.readInteger()
    } else {
        let _: Int8 = try buffer.readInteger()
    }
}

Other modified packets

Keep Alive

Now carries an int that the recipient echoes back.

FieldType
Keep Alive IDInteger

Set Health

Two fields appended after the existing Health.

FieldTypeDescription
FoodShort0 to 20
SaturationFloat

Respawn

The body is fully replaced. Wire order:

FieldTypeDescription
DimensionByte
DifficultyByte
Game ModeByte0 survival, 1 creative
World HeightShortAlways 128. This is a Byte in the Login packet.
World SeedLong

Game Event

A trailing byte is appended. It carries the new game mode (0/1) for state 3 ("game mode changed"), and is sent regardless of the state.

FieldType
Game ModeByte

Open Container

The Title field's type changed from String8 to String16.

New packets

Spawn XP Orb

Packet IDDirectionMojang NameMCP Name
0x1AClientboundTODOPacket26EntityExpOrb

Position is in block space.

FieldTypeDescription
Entity IDInteger
XIntegerThe X block position of the orb
YIntegerThe Y block position of the orb
ZIntegerThe Z block position of the orb
CountShortThe amount of XP the orb is worth

Apply Mob Effect

Packet IDDirectionMojang NameMCP Name
0x29ClientboundTODOPacket41EntityEffect
FieldTypeDescription
Entity IDInteger
Effect IDByte
AmplifierByteEffect tier minus one (0 = I)
DurationShortIn ticks

Remove Mob Effect

Packet IDDirectionMojang NameMCP Name
0x2AClientboundTODOPacket42RemoveEntityEffect
FieldType
Entity IDInteger
Effect IDByte

Set Experience

Packet IDDirectionMojang NameMCP Name
0x2BClientboundTODOPacket43Experience
FieldTypeDescription
Bar ProgressBytePosition of the green fill in the XP bar
LevelByteNumber rendered above the XP bar
Total XPShort

Creative Set Slot

Packet IDDirectionMojang NameMCP Name
0x6BBothTODOPacket107CreativeSetSlot

Sent by the client to set a slot in their inventory while in creative mode.

FieldTypeDescription
SlotShortThe destination slot. -1 means "drop into the world".
Item IDShort
CountShort
MetadataShort

Player List Item

Packet IDDirectionMojang NameMCP Name
0xC9ClientboundTODOPacket201PlayerInfo

Adds, updates, or removes an entry in the in-game player list overlay.

FieldTypeDescription
UsernameString16
OnlineByte1 to add or update, 0 to remove the entry
PingShortLatency in milliseconds. Bar count is <150, <300, <600, <1000, or <0 for none.

Server List Ping

Packet IDDirectionMojang NameMCP Name
0xFEServerboundTODOPacket254ServerPing

Empty payload. The server is expected to respond with a Disconnect packet whose reason holds the MOTD.

Registry additions

These don't change any packet shapes, but the new IDs can't be sent to a Beta 1.7.3 client.

Blocks

IDName
97Silverfish Block
98Stone Bricks
99Brown Mushroom Cap
100Red Mushroom Cap
101Iron Bars
102Glass Pane
103Melon
104Pumpkin Stem
105Melon Stem
106Vines
107Fence Gate
108Brick Stairs
109Stone Brick Stairs

Items

IDName
104Melon Slice
105Pumpkin Seeds
106Melon Seeds
107Raw Beef
108Steak
109Raw Chicken
110Cooked Chicken
111Rotten Flesh
112Ender Pearl

Entities

IDNameNotes
2XP OrbSpawned with its own packet (0x1A)
58Enderman
59Cave Spider
60Silverfish

Mob Effects

Referenced by 0x29 Apply Mob Effect and 0x2A Remove Mob Effect.

IDName
1Speed
2Slowness
3Haste
4Mining Fatigue
5Strength
6Instant Health
7Instant Damage
8Jump Boost
9Nausea
10Regeneration
11Resistance
12Fire Resistance
13Water Breathing
14Invisibility
15Blindness
16Night Vision
17Hunger
18Weakness
19Poison

MISSING

TODO: beta 1.2 and 1.1 sharing the same protocol version is suspicious, could be minecraft.wiki mistake

Versions

Version NameProtocol VersionMinecraft Wiki Page
Alpha v1.2.66https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol?oldid=2769659
Beta 1.1_017?TODO
Beta 1.1_028?https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol?oldid=2769678
Beta 1.2_028?https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol?oldid=2769711
Beta 1.3_019https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol?oldid=2769723
Beta 1.4_0110TODO
Beta 1.5_0211TODO
Beta 1.6.613TODO
Beta 1.7.314https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol?oldid=2769763
Beta 1.8.117https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol?oldid=2769858
1.0.022TODO