decode Biomes data

This commit is contained in:
Tnze
2019-12-14 22:30:12 +08:00
parent 55c7e2163b
commit 4384646214
2 changed files with 22 additions and 11 deletions

View File

@ -442,14 +442,14 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error {
FullChunk pk.Boolean FullChunk pk.Boolean
PrimaryBitMask pk.VarInt PrimaryBitMask pk.VarInt
Heightmaps struct{} Heightmaps struct{}
Biomes = biomesData{fullChunk: (*bool)(&FullChunk)}
Data chunkData Data chunkData
BlockEntities blockEntities BlockEntities blockEntities
) )
// TODO: Biomes data in this packet if err := p.Scan(&X, &Z, &FullChunk, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Biomes, &Data, &BlockEntities); err != nil {
if err := p.Scan(&X, &Z, &FullChunk, &PrimaryBitMask, pk.NBT{V: &Heightmaps}, &Data, &BlockEntities); err != nil {
return err return err
} }
chunk, err := world.DecodeChunkColumn(bool(FullChunk), int32(PrimaryBitMask), Data) chunk, err := world.DecodeChunkColumn(int32(PrimaryBitMask), Data)
if err != nil { if err != nil {
return fmt.Errorf("decode chunk column fail: %v", err) return fmt.Errorf("decode chunk column fail: %v", err)
} }
@ -459,6 +459,24 @@ func handleChunkDataPacket(c *Client, p pk.Packet) error {
return err return err
} }
type biomesData struct {
fullChunk *bool
data [1024]int32
}
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
}
}
return nil
}
type chunkData []byte type chunkData []byte
type blockEntities []blockEntitie type blockEntities []blockEntitie
type blockEntitie struct { type blockEntitie struct {

View File

@ -9,7 +9,7 @@ import (
) )
//DecodeChunkColumn decode the chunk data structure //DecodeChunkColumn decode the chunk data structure
func DecodeChunkColumn(isFull bool, mask int32, data []byte) (*Chunk, error) { func DecodeChunkColumn(mask int32, data []byte) (*Chunk, error) {
var c Chunk var c Chunk
r := bytes.NewReader(data) r := bytes.NewReader(data)
for sectionY := 0; sectionY < 16; sectionY++ { for sectionY := 0; sectionY < 16; sectionY++ {
@ -60,14 +60,7 @@ func DecodeChunkColumn(isFull bool, mask int32, data []byte) (*Chunk, error) {
//用数据填充区块 //用数据填充区块
fillSection(&c.sections[sectionY], perBits(byte(BitsPerBlock)), DataArray, palette) fillSection(&c.sections[sectionY], perBits(byte(BitsPerBlock)), DataArray, palette)
} }
// if isFull { //need recive Biomes datas
// _, err := pk.ReadNBytes(data, 256*4)
// if err != nil {
// return nil, fmt.Errorf("read Biomes fail: %v", err)
// }
// }
// fmt.Println(c)
return &c, nil return &c, nil
} }