From 1ec365af322e8f0920bfc4e9d3a81f9d25f5ce99 Mon Sep 17 00:00:00 2001 From: David McNett Date: Wed, 26 Aug 2020 11:13:43 -0500 Subject: [PATCH 1/6] Blind version bump for 1.16.2 --- README.md | 4 ++-- bot/mcbot.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b5a6cf1..970876b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Go-MC -![Version](https://img.shields.io/badge/Minecraft-1.16.1-blue.svg) -![Protocol](https://img.shields.io/badge/Protocol-736-blue.svg) +![Version](https://img.shields.io/badge/Minecraft-1.16.2-blue.svg) +![Protocol](https://img.shields.io/badge/Protocol-751-blue.svg) [![GoDoc](https://godoc.org/github.com/Tnze/go-mc?status.svg)](https://godoc.org/github.com/Tnze/go-mc) [![Go Report Card](https://goreportcard.com/badge/github.com/Tnze/go-mc)](https://goreportcard.com/report/github.com/Tnze/go-mc) [![Build Status](https://travis-ci.org/Tnze/go-mc.svg?branch=master)](https://travis-ci.org/Tnze/go-mc) diff --git a/bot/mcbot.go b/bot/mcbot.go index 4d76c16..c5aebea 100644 --- a/bot/mcbot.go +++ b/bot/mcbot.go @@ -14,7 +14,7 @@ import ( ) // ProtocolVersion , the protocol version number of minecraft net protocol -const ProtocolVersion = 736 +const ProtocolVersion = 751 // JoinServer connect a Minecraft server for playing the game. func (c *Client) JoinServer(addr string, port int) (err error) { From 9c05d5ff0461a1209ed7c45dd7277fcafa0facad Mon Sep 17 00:00:00 2001 From: David McNett Date: Sun, 30 Aug 2020 20:17:33 -0500 Subject: [PATCH 2/6] Update packetIDs to 1.16.2 protocol 751 --- data/packetIDs.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/data/packetIDs.go b/data/packetIDs.go index 7b64e17..ff65297 100644 --- a/data/packetIDs.go +++ b/data/packetIDs.go @@ -17,10 +17,9 @@ const ( BossBar ServerDifficulty ChatMessageClientbound - MultiBlockChange + TabComplete - TabComplete //0x10 - DeclareCommands + DeclareCommands //0x10 WindowConfirmationClientbound CloseWindowClientbound WindowItems @@ -35,9 +34,9 @@ const ( UnloadChunk ChangeGameState OpenHorseWindow + KeepAliveClientbound - KeepAliveClientbound //0x20 - ChunkData + ChunkData //0x20 Effect Particle UpdateLight @@ -52,9 +51,9 @@ const ( OpenBook OpenWindow OpenSignEditor + CraftRecipeResponse - CraftRecipeResponse //0x30 - PlayerAbilitiesClientbound + PlayerAbilitiesClientbound //0x30 CombatEvent PlayerInfo FacePlayer @@ -65,6 +64,7 @@ const ( ResourcePackSend Respawn EntityHeadLook + MultiBlockChange SelectAdvancementTab WorldBorder Camera From ec0365d9c8bf2e96a1047e1666669054e85c972a Mon Sep 17 00:00:00 2001 From: David McNett Date: Sun, 30 Aug 2020 21:48:52 -0500 Subject: [PATCH 3/6] Non-working attempt at parsing new biomesData format --- bot/ingame.go | 40 +++++++++++++++++++++++++++++----------- data/packetIDs.go | 7 ++++--- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/bot/ingame.go b/bot/ingame.go index 5f96286..6975f57 100644 --- a/bot/ingame.go +++ b/bot/ingame.go @@ -4,9 +4,10 @@ import ( "bytes" "errors" "fmt" - "github.com/google/uuid" "io/ioutil" + "github.com/google/uuid" + "github.com/Tnze/go-mc/bot/world" "github.com/Tnze/go-mc/bot/world/entity" "github.com/Tnze/go-mc/chat" @@ -191,6 +192,7 @@ func handleDisconnectPacket(c *Client, p pk.Packet) error { } if c.Events.Disconnect != nil { + fmt.Println("c.Events.Disconnect=%+v\n", c.Events.Disconnect) return c.Events.Disconnect(reason) } return nil @@ -331,6 +333,7 @@ func handleUpdateHealthPacket(c *Client, p pk.Packet) (err error) { func handleJoinGamePacket(c *Client, p pk.Packet) error { var ( eid pk.Int + hardcore pk.Boolean gamemode pk.UnsignedByte previousGm pk.UnsignedByte worldCount pk.VarInt @@ -340,14 +343,14 @@ func handleJoinGamePacket(c *Client, p pk.Packet) error { dimension pk.Int worldName pk.Identifier hashedSeed pk.Long - maxPlayers pk.UnsignedByte + maxPlayers pk.VarInt viewDistance pk.VarInt rdi pk.Boolean // Reduced Debug Info ers pk.Boolean // Enable respawn screen isDebug pk.Boolean isFlat pk.Boolean ) - err := p.Scan(&eid, &gamemode, &previousGm, &worldCount, &worldNames, &dimension, &worldName, + err := p.Scan(&eid, &hardcore, &gamemode, &previousGm, &worldCount, &worldNames, &dimension, &worldName, &hashedSeed, &maxPlayers, &rdi, &ers, &isDebug, &isFlat) if err != nil { return err @@ -453,17 +456,25 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error { if !c.settings.ReceiveMap { return nil } + var ( X, Z pk.Int FullChunk pk.Boolean - IgnoreOldData pk.Boolean PrimaryBitMask pk.VarInt Heightmaps struct{} Biomes = biomesData{fullChunk: (*bool)(&FullChunk)} Data chunkData BlockEntities blockEntities ) - if err := p.Scan(&X, &Z, &FullChunk, &IgnoreOldData, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Biomes, &Data, &BlockEntities); err != nil { + if err := p.Scan(&X, &Z, &FullChunk, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Biomes, &Data, &BlockEntities); err != nil { + fmt.Println("-- ") + fmt.Printf("X=%v Z=%v\n", X, Z) + fmt.Printf("Fullchunk %v\n", FullChunk) + fmt.Printf("BitMask=%v\n", PrimaryBitMask) + fmt.Printf("Heightmaps: %v\n", Heightmaps) + fmt.Printf("Biomes: %+v\n", Biomes) + fmt.Printf("Data: %+v\n", Data) + fmt.Println("-- ") return err } chunk, err := world.DecodeChunkColumn(int32(PrimaryBitMask), Data) @@ -476,21 +487,28 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error { return err } +// +// None of this works and I'm all out of ideas +// type biomesData struct { fullChunk *bool - data [1024]int32 + data []pk.VarInt } func (b *biomesData) Decode(r pk.DecodeReader) error { if b.fullChunk == nil || !*b.fullChunk { return nil } - for i := range b.data { - err := (*pk.Int)(&b.data[i]).Decode(r) - if err != nil { - return err - } + + var nobe pk.VarInt // Number of BlockEntities + if err := nobe.Decode(r); err != nil { + return err } + b.data = make([]pk.VarInt, nobe) + if _, err := r.Read(b.data); err != nil { + return err + } + return nil } diff --git a/data/packetIDs.go b/data/packetIDs.go index ff65297..cfc5dc3 100644 --- a/data/packetIDs.go +++ b/data/packetIDs.go @@ -134,10 +134,11 @@ const ( PlayerDigging EntityAction SteerVehicle + DisplayedRecipe RecipeBookData - NameItem - ResourcePackStatus //0x20 + NameItem //0x20 + ResourcePackStatus AdvancementTab SelectTrade SetBeaconEffect @@ -151,5 +152,5 @@ const ( AnimationServerbound Spectate PlayerBlockPlacement - UseItem //0x2E + UseItem //0x2F ) From ee164b05d4e28e275cd43e585b8248b7aeab9953 Mon Sep 17 00:00:00 2001 From: David McNett Date: Sun, 30 Aug 2020 21:55:53 -0500 Subject: [PATCH 4/6] Remove debugging line --- bot/ingame.go | 1 - 1 file changed, 1 deletion(-) diff --git a/bot/ingame.go b/bot/ingame.go index 6975f57..ecbe4a2 100644 --- a/bot/ingame.go +++ b/bot/ingame.go @@ -192,7 +192,6 @@ func handleDisconnectPacket(c *Client, p pk.Packet) error { } if c.Events.Disconnect != nil { - fmt.Println("c.Events.Disconnect=%+v\n", c.Events.Disconnect) return c.Events.Disconnect(reason) } return nil From d3acd41542b59433343e410348afd1993cede965 Mon Sep 17 00:00:00 2001 From: David McNett Date: Mon, 31 Aug 2020 11:35:09 -0500 Subject: [PATCH 5/6] Successful decoding of biomesData --- bot/ingame.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/bot/ingame.go b/bot/ingame.go index ecbe4a2..fba7247 100644 --- a/bot/ingame.go +++ b/bot/ingame.go @@ -486,9 +486,6 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error { return err } -// -// None of this works and I'm all out of ideas -// type biomesData struct { fullChunk *bool data []pk.VarInt @@ -499,13 +496,19 @@ func (b *biomesData) Decode(r pk.DecodeReader) error { return nil } - var nobe pk.VarInt // Number of BlockEntities - if err := nobe.Decode(r); err != nil { + var nobd pk.VarInt // Number of Biome Datums + if err := nobd.Decode(r); err != nil { return err } - b.data = make([]pk.VarInt, nobe) - if _, err := r.Read(b.data); err != nil { - return err + + b.data = make([]pk.VarInt, nobd) + + for i := 0; i < int(nobd); i++ { + var d pk.VarInt + if err := d.Decode(r); err != nil { + return err + } + b.data[i] = d } return nil From 48dca250ed7e5e88f90d8f3ff586134486c69596 Mon Sep 17 00:00:00 2001 From: David McNett Date: Mon, 31 Aug 2020 11:47:38 -0500 Subject: [PATCH 6/6] Remove debugging output --- bot/ingame.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/bot/ingame.go b/bot/ingame.go index fba7247..2aa87c5 100644 --- a/bot/ingame.go +++ b/bot/ingame.go @@ -466,14 +466,6 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error { BlockEntities blockEntities ) if err := p.Scan(&X, &Z, &FullChunk, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Biomes, &Data, &BlockEntities); err != nil { - fmt.Println("-- ") - fmt.Printf("X=%v Z=%v\n", X, Z) - fmt.Printf("Fullchunk %v\n", FullChunk) - fmt.Printf("BitMask=%v\n", PrimaryBitMask) - fmt.Printf("Heightmaps: %v\n", Heightmaps) - fmt.Printf("Biomes: %+v\n", Biomes) - fmt.Printf("Data: %+v\n", Data) - fmt.Println("-- ") return err } chunk, err := world.DecodeChunkColumn(int32(PrimaryBitMask), Data)