recive Chunk data

This commit is contained in:
JunDao
2019-05-19 21:27:07 +08:00
parent 845b7949dd
commit bb7fffbce6
7 changed files with 187 additions and 159 deletions

View File

@ -3,10 +3,13 @@ package bot
import (
"bytes"
"errors"
"io"
"io/ioutil"
// "math"
// "time"
"fmt"
"github.com/Tnze/go-mc/bot/world"
"github.com/Tnze/go-mc/bot/world/entity"
"github.com/Tnze/go-mc/chat"
"github.com/Tnze/go-mc/data"
@ -82,7 +85,7 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) {
case data.HeldItemChangeClientbound:
err = handleHeldItemPacket(c, p)
case data.ChunkData:
////err = handleChunkDataPacket(c, p)
err = handleChunkDataPacket(c, p)
case data.PlayerPositionAndLookClientbound:
err = handlePlayerPositionAndLookPacket(c, p)
sendPlayerPositionAndLookPacket(c) // to confirm the position
@ -345,10 +348,30 @@ func handleJoinGamePacket(c *Client, p pk.Packet) error {
return nil
}
// The PluginMessageData only used in recive PluginMessage packet.
// When decode it, read to end.
type pluginMessageData []byte
//Encode a PluginMessageData
func (p *pluginMessageData) Encode(r io.Writer) error {
_, err := r.Write([]byte(*p))
return err
}
//Decode a PluginMessageData
func (p *pluginMessageData) Decode(r pk.DecodeReader) error {
data, err := ioutil.ReadAll(r)
if err != nil {
return err
}
*p = pluginMessageData(data)
return nil
}
func handlePluginPacket(c *Client, p pk.Packet) error {
var (
Channel pk.Identifier
Data pk.PluginMessageData
Data pluginMessageData
)
if err := p.Scan(&Channel, &Data); err != nil {
return err
@ -405,15 +428,15 @@ func handleHeldItemPacket(c *Client, p pk.Packet) error {
return nil
}
// func handleChunkDataPacket(g *Client, p pk.Packet) error {
// if !g.settings.ReciveMap {
// return nil
// }
func handleChunkDataPacket(c *Client, p pk.Packet) error {
if !c.settings.ReciveMap {
return nil
}
// c, x, y, err := unpackChunkDataPacket(p, g.Info.Dimension == 0)
// g.wd.chunks[chunkLoc{x, y}] = c
// return err
// }
chunk, x, z, err := world.UnpackChunkDataPacket(p, c.Dimension == 0)
c.Wd.Chunks[world.ChunkLoc{x, z}] = chunk
return err
}
// var isSpawn bool