improve chunk palette handling and logging; fix biome format and storage comparison logic
This commit is contained in:
@@ -50,7 +50,7 @@ func (c Chunk) ToStorage(version string) (toChunk *level.Chunk, err error) {
|
|||||||
toChunk.Sections[i].BlockCount = int16(f.Len)
|
toChunk.Sections[i].BlockCount = int16(f.Len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
f = level.MakeBiomeFormat(version)
|
||||||
for i, s := range c.Sections {
|
for i, s := range c.Sections {
|
||||||
pallete := make([]int32, len(s.Biomes.Palette))
|
pallete := make([]int32, len(s.Biomes.Palette))
|
||||||
for j, p := range s.Biomes.Palette {
|
for j, p := range s.Biomes.Palette {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -48,7 +49,14 @@ func TestRegionFile(t *testing.T) {
|
|||||||
fmt.Println("Chunk loaded successfully")
|
fmt.Println("Chunk loaded successfully")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadPacketToChunk(b []byte) (chunk *level.Chunk, err error) {
|
||||||
|
buffer := bytes.NewBuffer(b)
|
||||||
|
chunk, err = level.ReadChunkFromChunkPacketData(buffer, "1.21.11", 384)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func TestConverToPacket(t *testing.T) {
|
func TestConverToPacket(t *testing.T) {
|
||||||
|
slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||||
f, err := os.Open("./testdata/r.0.0.mca")
|
f, err := os.Open("./testdata/r.0.0.mca")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to open file: %v", err)
|
t.Errorf("Failed to open file: %v", err)
|
||||||
@@ -90,4 +98,21 @@ func TestConverToPacket(t *testing.T) {
|
|||||||
t.Errorf("Chunk data is different: %v", cmp.Diff(a, b))
|
t.Errorf("Chunk data is different: %v", cmp.Diff(a, b))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aChunk, err := loadPacketToChunk(a)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to load chunk from packet: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bChunk, err := loadPacketToChunk(b)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to load chunk from file: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !aChunk.Equals(packetChunk) {
|
||||||
|
t.Errorf("Chunk is different: %v", cmp.Diff(aChunk, packetChunk))
|
||||||
|
}
|
||||||
|
if !bChunk.Equals(aChunk) {
|
||||||
|
t.Errorf("Chunk is different: %v", cmp.Diff(bChunk, aChunk))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-2
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
"log/slog"
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/admin-else/strom/data"
|
"github.com/admin-else/strom/data"
|
||||||
@@ -43,7 +44,7 @@ func MakeBlockFormat(version string) StorageFormat {
|
|||||||
return StorageFormat{
|
return StorageFormat{
|
||||||
AvailableBpes: []uint8{0, 4, 5, 6, 7, 8, directBpe},
|
AvailableBpes: []uint8{0, 4, 5, 6, 7, 8, directBpe},
|
||||||
BiggestDirect: true,
|
BiggestDirect: true,
|
||||||
Len: BiomesPerChunkSection,
|
Len: BlocksPerChunkSection,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ func ReadSectionStorage(r io.Reader, format StorageFormat) (s *Storage, err erro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if paletteLen <= 0 {
|
if paletteLen < 0 {
|
||||||
err = BadPaletteLenErr
|
err = BadPaletteLenErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -79,6 +80,16 @@ func ReadSectionStorage(r io.Reader, format StorageFormat) (s *Storage, err erro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if slog.Default().Enabled(nil, slog.LevelDebug) {
|
||||||
|
b, _ := data.LookupBlockByStateId("1.21.11", v)
|
||||||
|
if b == nil {
|
||||||
|
slog.Debug("unknown palette block in chunk packet", "id", v)
|
||||||
|
} else {
|
||||||
|
slog.Debug("palette block in chunk packet", "id", v, "name", b.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
pallette = append(pallette, v)
|
pallette = append(pallette, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -36,8 +36,8 @@ func (r StorageFormat) Import(data []uint64, bpe uint8, palette []int32) (s *Sto
|
|||||||
if !slices.Contains(r.AvailableBpes, bpe) {
|
if !slices.Contains(r.AvailableBpes, bpe) {
|
||||||
var newBpe uint8
|
var newBpe uint8
|
||||||
for _, newBpe = range r.AvailableBpes {
|
for _, newBpe = range r.AvailableBpes {
|
||||||
if bpe < newBpe {
|
if bpe <= newBpe {
|
||||||
continue
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var tmps *Storage
|
var tmps *Storage
|
||||||
|
|||||||
Reference in New Issue
Block a user