refactor package
This commit is contained in:
35
pkg/protocol/packet/game/client/sections_blocks_update.go
Normal file
35
pkg/protocol/packet/game/client/sections_blocks_update.go
Normal file
@ -0,0 +1,35 @@
|
||||
package client
|
||||
|
||||
//codec:gen
|
||||
type UpdateSectionsBlocks struct {
|
||||
ChunkSectionPosition int64
|
||||
Blocks []int64 `mc:"VarLong"`
|
||||
}
|
||||
|
||||
func (s *UpdateSectionsBlocks) SetSectionPos(x, y, z int32) {
|
||||
s.ChunkSectionPosition = ((int64(x) & 0x3FFFFF) << 42) | (int64(y) & 0xFFFFF) | ((int64(z) & 0x3FFFFF) << 20)
|
||||
}
|
||||
|
||||
func (s UpdateSectionsBlocks) ToSectionPos() (x, y, z int32) {
|
||||
sectionX := int32(s.ChunkSectionPosition >> 42)
|
||||
sectionY := int32(s.ChunkSectionPosition << 44 >> 44)
|
||||
sectionZ := int32(s.ChunkSectionPosition >> 22 >> 42)
|
||||
return sectionX, sectionY, sectionZ
|
||||
}
|
||||
|
||||
func (s *UpdateSectionsBlocks) AddBlock(x, y, z int, stateID int32) {
|
||||
s.Blocks = append(s.Blocks, int64(stateID)<<12|(int64(x)<<8|int64(y)<<4|int64(z)))
|
||||
}
|
||||
|
||||
func (s UpdateSectionsBlocks) ParseBlocks() map[[3]int32]int32 {
|
||||
m := make(map[[3]int32]int32)
|
||||
for _, block := range s.Blocks {
|
||||
blockStateId := block >> 12
|
||||
blockLocalX := (block >> 8) & 0xF
|
||||
blockLocalY := block & 0xF
|
||||
blockLocalZ := (block >> 4) & 0xF
|
||||
|
||||
m[[3]int32{int32(blockLocalX), int32(blockLocalY), int32(blockLocalZ)}] = int32(blockStateId)
|
||||
}
|
||||
return m
|
||||
}
|
Reference in New Issue
Block a user