Fix bugs to load chunks

This commit is contained in:
Tnze
2021-12-27 20:48:30 +08:00
parent e507d82b83
commit a33937625e
3 changed files with 77 additions and 37 deletions

View File

@ -120,7 +120,7 @@ func ChunkFromSave(c *save.Chunk, secs int) *Chunk {
}
}
biomesData := *(*[]uint64)((unsafe.Pointer)(&v.BlockStates.Data))
biomesData := *(*[]uint64)((unsafe.Pointer)(&v.Biomes.Data))
biomesPalette := v.Biomes.Palette
biomesRawPalette := make([]int, len(biomesPalette))
for i, v := range biomesPalette {
@ -130,7 +130,7 @@ func ChunkFromSave(c *save.Chunk, secs int) *Chunk {
i := int32(int8(v.Y)) - c.YPos
sections[i].blockCount = blockCount
sections[i].States = NewStatesPaletteContainerWithData(16*16*16, stateData, stateRawPalette)
sections[i].Biomes = NewBiomesPaletteContainerWithData(16*16*16*2, biomesData, biomesRawPalette)
sections[i].Biomes = NewBiomesPaletteContainerWithData(4*4*4, biomesData, biomesRawPalette)
}
for i := range sections {
if sections[i].States == nil {

View File

@ -28,16 +28,20 @@ func NewStatesPaletteContainer(length int, defaultValue state) *PaletteContainer
func NewStatesPaletteContainerWithData(length int, data []uint64, pat []int) *PaletteContainer {
var p palette
var n int
if len(pat) == 1 {
n := bits.Len(uint(len(pat) - 1))
switch n {
case 0:
p = &singleValuePalette{pat[0]}
n = 0
} else {
n = statesCfg{}.bits(bits.Len(uint(len(pat))))
case 1, 2, 3, 4:
n = 4
fallthrough
case 5, 6, 7, 8:
p = &linearPalette{
values: pat,
bits: n,
}
default:
p = &globalPalette{}
}
return &PaletteContainer{
bits: n,
@ -58,16 +62,17 @@ func NewBiomesPaletteContainer(length int, defaultValue state) *PaletteContainer
func NewBiomesPaletteContainerWithData(length int, data []uint64, pat []int) *PaletteContainer {
var p palette
var n int
if len(pat) == 1 {
n := bits.Len(uint(len(pat) - 1))
switch n {
case 0:
p = &singleValuePalette{pat[0]}
n = 0
} else {
n = biomesCfg{}.bits(bits.Len(uint(len(pat))))
case 1, 2, 3:
p = &linearPalette{
values: pat,
bits: n,
}
default:
p = &globalPalette{}
}
return &PaletteContainer{
bits: n,