decode Biomes data
This commit is contained in:
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user