Basic support for 1.16.1

This commit is contained in:
genanik
2020-07-01 11:32:58 +08:00
parent 32a6898b12
commit 444229216a
6 changed files with 35 additions and 20 deletions

View File

@ -49,13 +49,16 @@ func NewClient() (c *Client) {
//PlayInfo content player info in server. //PlayInfo content player info in server.
type PlayInfo struct { type PlayInfo struct {
Gamemode int //游戏模式 Gamemode int //游戏模式
Hardcore bool //是否是极限模式 Hardcore bool //是否是极限模式
Dimension int //维度 Dimension int //维度
Difficulty int //难度 Difficulty int //难度
LevelType string //地图类型 // LevelType string //地图类型 1.16删了
ViewDistance int //视距 ViewDistance int //视距
ReducedDebugInfo bool //减少调试信息 ReducedDebugInfo bool //减少调试信息
WorldName string //当前世界的名字
IsDebug bool //调试
IsFlat bool //超平坦世界
// SpawnPosition Position //主世界出生点 // SpawnPosition Position //主世界出生点
} }

View File

@ -9,7 +9,7 @@ import (
type eventBroker struct { type eventBroker struct {
GameStart func() error GameStart func() error
ChatMsg func(msg chat.Message, pos byte) error ChatMsg func(msg chat.Message, pos byte, sender string) error
Disconnect func(reason chat.Message) error Disconnect func(reason chat.Message) error
HealthChange func() error HealthChange func() error
Die func() error Die func() error

View File

@ -279,13 +279,13 @@ func handleChatMessagePacket(c *Client, p pk.Packet) (err error) {
sender pk.UUID sender pk.UUID
) )
err = p.Scan(&s, &pos) err = p.Scan(&s, &pos, &sender)
if err != nil { if err != nil {
return err return err
} }
if c.Events.ChatMsg != nil { if c.Events.ChatMsg != nil {
err = c.Events.ChatMsg(s, byte(pos)) err = c.Events.ChatMsg(s, byte(pos), string(sender.Encode()))
} }
return err return err
@ -327,17 +327,25 @@ func handleUpdateHealthPacket(c *Client, p pk.Packet) (err error) {
func handleJoinGamePacket(c *Client, p pk.Packet) error { func handleJoinGamePacket(c *Client, p pk.Packet) error {
var ( var (
eid pk.Int eid pk.Int
gamemode pk.UnsignedByte gamemode pk.UnsignedByte
previousGm pk.UnsignedByte
worldCount pk.VarInt
worldNames pk.Identifier
_ pk.NBT
//dimensionCodec pk.NBT
dimension pk.Int dimension pk.Int
worldName pk.Identifier
hashedSeed pk.Long hashedSeed pk.Long
maxPlayers pk.UnsignedByte maxPlayers pk.UnsignedByte
levelType pk.String
viewDistance pk.VarInt viewDistance pk.VarInt
rdi pk.Boolean // Reduced Debug Info rdi pk.Boolean // Reduced Debug Info
ers pk.Boolean // Enable respawn screen ers pk.Boolean // Enable respawn screen
isDebug pk.Boolean
isFlat pk.Boolean
) )
err := p.Scan(&eid, &gamemode, &dimension, &hashedSeed, &maxPlayers, &levelType, &rdi, &ers) err := p.Scan(&eid, &gamemode, &previousGm, &worldCount, &worldNames, &dimension, &worldName,
&hashedSeed, &maxPlayers, &rdi, &ers, &isDebug, &isFlat)
if err != nil { if err != nil {
return err return err
} }
@ -346,9 +354,12 @@ func handleJoinGamePacket(c *Client, p pk.Packet) error {
c.Gamemode = int(gamemode & 0x7) c.Gamemode = int(gamemode & 0x7)
c.Hardcore = gamemode&0x8 != 0 c.Hardcore = gamemode&0x8 != 0
c.Dimension = int(dimension) c.Dimension = int(dimension)
c.LevelType = string(levelType) c.WorldName = string(worldName)
c.ViewDistance = int(viewDistance) c.ViewDistance = int(viewDistance)
c.ReducedDebugInfo = bool(rdi) c.ReducedDebugInfo = bool(rdi)
c.IsDebug = bool(isDebug)
c.IsFlat = bool(isFlat)
return nil return nil
} }
@ -442,13 +453,14 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error {
var ( var (
X, Z pk.Int X, Z pk.Int
FullChunk pk.Boolean FullChunk pk.Boolean
IgnoreOldData pk.Boolean
PrimaryBitMask pk.VarInt PrimaryBitMask pk.VarInt
Heightmaps struct{} Heightmaps struct{}
Biomes = biomesData{fullChunk: (*bool)(&FullChunk)} Biomes = biomesData{fullChunk: (*bool)(&FullChunk)}
Data chunkData Data chunkData
BlockEntities blockEntities BlockEntities blockEntities
) )
if err := p.Scan(&X, &Z, &FullChunk, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Biomes, &Data, &BlockEntities); err != nil { if err := p.Scan(&X, &Z, &FullChunk, &IgnoreOldData, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Biomes, &Data, &BlockEntities); err != nil {
return err return err
} }
chunk, err := world.DecodeChunkColumn(int32(PrimaryBitMask), Data) chunk, err := world.DecodeChunkColumn(int32(PrimaryBitMask), Data)

View File

@ -13,7 +13,7 @@ import (
) )
// ProtocolVersion , the protocol version number of minecraft net protocol // ProtocolVersion , the protocol version number of minecraft net protocol
const ProtocolVersion = 578 const ProtocolVersion = 736
// JoinServer connect a Minecraft server for playing the game. // JoinServer connect a Minecraft server for playing the game.
func (c *Client) JoinServer(addr string, port int) (err error) { func (c *Client) JoinServer(addr string, port int) (err error) {

View File

@ -38,7 +38,7 @@ func onGameStart() error {
return nil //if err isn't nil, HandleGame() will return it. return nil //if err isn't nil, HandleGame() will return it.
} }
func onChatMsg(c chat.Message, pos byte) error { func onChatMsg(c chat.Message, pos byte, uuid string) error {
log.Println("Chat:", c.ClearString()) // output chat message without any format code (like color or bold) log.Println("Chat:", c.ClearString()) // output chat message without any format code (like color or bold)
return nil return nil
} }

View File

@ -37,11 +37,11 @@ const (
OpenHorseWindow OpenHorseWindow
KeepAliveClientbound //0x20 KeepAliveClientbound //0x20
ChunkData // TODO Pre ChunkData
Effect Effect
Particle Particle
UpdateLight UpdateLight
JoinGame // TODO Pre JoinGame
MapData MapData
TradeList TradeList
EntityRelativeMove EntityRelativeMove
@ -97,8 +97,8 @@ const (
Advancements Advancements
EntityProperties EntityProperties
EntityEffect EntityEffect
DeclareRecipes // TODO Pre DeclareRecipes
Tags //0x5B Tags //0x5B
) )
// Serverbound packet IDs // Serverbound packet IDs