From d5979b2c3dc742e1cad8a8e5ed23a437f09105db Mon Sep 17 00:00:00 2001 From: adman Date: Wed, 6 May 2026 22:38:24 +0200 Subject: [PATCH] feat(util, anvil): add FloorDiv utility and nil-check in ChunkAt --- level/anvil/mca.go | 5 +++++ util/math.go | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/level/anvil/mca.go b/level/anvil/mca.go index 2d63860..009ddcd 100644 --- a/level/anvil/mca.go +++ b/level/anvil/mca.go @@ -62,12 +62,17 @@ func ReadChunkHeader(r *os.File) (ch *ChunkHeader, err error) { return } +// ChunkAt returns the chunk at the given position, or nil if it is empty. func (c *ChunkHeader) ChunkAt(f *os.File, x, z int32) (n *nbt.Tag, err error) { if x < 0 || z < 0 || x >= ChunksWidthRegionFile || z >= ChunksWidthRegionFile { err = fmt.Errorf("chunk out of bounds") return } off, size := chunkLocation(c.Chunk[chunkXZtoIndex(x, z)]) + if off == 0 { + return nil, nil + } + _, err = f.Seek(int64(off), 0) if err != nil { return diff --git a/util/math.go b/util/math.go index 395f6ea..dd659bc 100644 --- a/util/math.go +++ b/util/math.go @@ -2,6 +2,10 @@ package util import "math" +func FloorDiv(a, b int32) int32 { + return (a - ((a%b + b) % b)) / b +} + func BpeByNum(x float64) uint8 { return uint8(math.Ceil(math.Log2(x))) }