Chunk converters return error now
This commit is contained in:
@ -140,7 +140,10 @@ func loadAllChunks(dim *server.SimpleDim, file string, rx, rz int) error {
|
|||||||
if err := c.Load(data); err != nil {
|
if err := c.Load(data); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
chunk := level.ChunkFromSave(&c)
|
chunk, err := level.ChunkFromSave(&c)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
dim.LoadChunk(level.ChunkPos{X: rx<<5 + x, Z: rz<<5 + z}, chunk)
|
dim.LoadChunk(level.ChunkPos{X: rx<<5 + x, Z: rz<<5 + z}, chunk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,7 @@ var biomesNames = []string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ChunkFromSave convert save.Chunk to level.Chunk.
|
// ChunkFromSave convert save.Chunk to level.Chunk.
|
||||||
func ChunkFromSave(c *save.Chunk) *Chunk {
|
func ChunkFromSave(c *save.Chunk) (*Chunk, error) {
|
||||||
secs := len(c.Sections)
|
secs := len(c.Sections)
|
||||||
sections := make([]Section, secs)
|
sections := make([]Section, secs)
|
||||||
for _, v := range c.Sections {
|
for _, v := range c.Sections {
|
||||||
@ -196,11 +196,11 @@ func ChunkFromSave(c *save.Chunk) *Chunk {
|
|||||||
var err error
|
var err error
|
||||||
sections[i].BlockCount, sections[i].States, err = readStatesPalette(v.BlockStates.Palette, v.BlockStates.Data)
|
sections[i].BlockCount, sections[i].States, err = readStatesPalette(v.BlockStates.Palette, v.BlockStates.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return nil, err
|
||||||
}
|
}
|
||||||
sections[i].Biomes, err = readBiomesPalette(v.Biomes.Palette, v.Biomes.Data)
|
sections[i].Biomes, err = readBiomesPalette(v.Biomes.Palette, v.Biomes.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return nil, err
|
||||||
}
|
}
|
||||||
sections[i].SkyLight = v.SkyLight
|
sections[i].SkyLight = v.SkyLight
|
||||||
sections[i].BlockLight = v.BlockLight
|
sections[i].BlockLight = v.BlockLight
|
||||||
@ -220,7 +220,7 @@ func ChunkFromSave(c *save.Chunk) *Chunk {
|
|||||||
OceanFloor: NewBitStorage(bitsForHeight, 16*16, oceanFloor),
|
OceanFloor: NewBitStorage(bitsForHeight, 16*16, oceanFloor),
|
||||||
WorldSurface: NewBitStorage(bitsForHeight, 16*16, worldSurface),
|
WorldSurface: NewBitStorage(bitsForHeight, 16*16, worldSurface),
|
||||||
},
|
},
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readStatesPalette(palette []save.BlockState, data []uint64) (blockCount int16, paletteData *PaletteContainer[BlocksState], err error) {
|
func readStatesPalette(palette []save.BlockState, data []uint64) (blockCount int16, paletteData *PaletteContainer[BlocksState], err error) {
|
||||||
@ -261,7 +261,7 @@ func readBiomesPalette(palette []string, data []uint64) (*PaletteContainer[Biome
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ChunkToSave convert level.Chunk to save.Chunk
|
// ChunkToSave convert level.Chunk to save.Chunk
|
||||||
func ChunkToSave(c *Chunk, dst *save.Chunk) {
|
func ChunkToSave(c *Chunk, dst *save.Chunk) (err error) {
|
||||||
secs := len(c.Sections)
|
secs := len(c.Sections)
|
||||||
sections := make([]save.Section, secs)
|
sections := make([]save.Section, secs)
|
||||||
for i, v := range c.Sections {
|
for i, v := range c.Sections {
|
||||||
@ -269,16 +269,20 @@ func ChunkToSave(c *Chunk, dst *save.Chunk) {
|
|||||||
states := &s.BlockStates
|
states := &s.BlockStates
|
||||||
biomes := &s.Biomes
|
biomes := &s.Biomes
|
||||||
s.Y = int8(int32(i) + dst.YPos)
|
s.Y = int8(int32(i) + dst.YPos)
|
||||||
states.Palette, states.Data = writeStatesPalette(v.States)
|
states.Palette, states.Data, err = writeStatesPalette(v.States)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
biomes.Palette, biomes.Data = writeBiomesPalette(v.Biomes)
|
biomes.Palette, biomes.Data = writeBiomesPalette(v.Biomes)
|
||||||
s.SkyLight = v.SkyLight
|
s.SkyLight = v.SkyLight
|
||||||
s.BlockLight = v.BlockLight
|
s.BlockLight = v.BlockLight
|
||||||
}
|
}
|
||||||
dst.Sections = sections
|
dst.Sections = sections
|
||||||
//dst.Heightmaps.MotionBlocking = c.HeightMaps.MotionBlocking.Raw()
|
//dst.Heightmaps.MotionBlocking = c.HeightMaps.MotionBlocking.Raw()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeStatesPalette(paletteData *PaletteContainer[BlocksState]) (palette []save.BlockState, data []uint64) {
|
func writeStatesPalette(paletteData *PaletteContainer[BlocksState]) (palette []save.BlockState, data []uint64, err error) {
|
||||||
rawPalette := paletteData.palette.export()
|
rawPalette := paletteData.palette.export()
|
||||||
palette = make([]save.BlockState, len(rawPalette))
|
palette = make([]save.BlockState, len(rawPalette))
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
@ -287,11 +291,13 @@ func writeStatesPalette(paletteData *PaletteContainer[BlocksState]) (palette []s
|
|||||||
palette[i].Name = b.ID()
|
palette[i].Name = b.ID()
|
||||||
|
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
if err := nbt.NewEncoder(&buffer).Encode(b, ""); err != nil {
|
err = nbt.NewEncoder(&buffer).Encode(b, "")
|
||||||
panic(err)
|
if err != nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if _, err := nbt.NewDecoder(&buffer).Decode(&palette[i].Properties); err != nil {
|
_, err = nbt.NewDecoder(&buffer).Decode(&palette[i].Properties)
|
||||||
panic(err)
|
if err != nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data = append(data, paletteData.data.Raw()...)
|
data = append(data, paletteData.data.Raw()...)
|
||||||
|
Reference in New Issue
Block a user