From a4293f6f1a67b2c3f98ace2367257eb69725a841 Mon Sep 17 00:00:00 2001 From: Flonja <20887403+Flonja@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:51:48 +0200 Subject: [PATCH] Check if the data in a block entity is nil, so that there won't be an assign to nil map panic --- server/session/chunk.go | 9 +++++++++ server/world/mcdb/db.go | 3 +++ 2 files changed, 12 insertions(+) diff --git a/server/session/chunk.go b/server/session/chunk.go index a1f5e8b40..0c717906f 100644 --- a/server/session/chunk.go +++ b/server/session/chunk.go @@ -100,6 +100,9 @@ func (s *Session) subChunkEntry(offset protocol.SubChunkOffset, ind int16, col * for pos, b := range col.BlockEntities { if n, ok := b.(world.NBTer); ok && col.Chunk.SubIndex(int16(pos.Y())) == ind { d := n.EncodeNBT() + if d == nil { + continue + } d["x"], d["y"], d["z"] = int32(pos[0]), int32(pos[1]), int32(pos[2]) _ = enc.Encode(d) } @@ -178,6 +181,9 @@ func (s *Session) sendBlobHashes(pos world.ChunkPos, dim world.Dimension, c *chu for bp, b := range blockEntities { if n, ok := b.(world.NBTer); ok { d := n.EncodeNBT() + if d == nil { + continue + } d["x"], d["y"], d["z"] = int32(bp[0]), int32(bp[1]), int32(bp[2]) _ = enc.Encode(d) } @@ -220,6 +226,9 @@ func (s *Session) sendNetworkChunk(pos world.ChunkPos, dim world.Dimension, c *c for bp, b := range blockEntities { if n, ok := b.(world.NBTer); ok { d := n.EncodeNBT() + if d == nil { + continue + } d["x"], d["y"], d["z"] = int32(bp[0]), int32(bp[1]), int32(bp[2]) _ = enc.Encode(d) } diff --git a/server/world/mcdb/db.go b/server/world/mcdb/db.go index 9c92b6fd5..8cd22fea5 100644 --- a/server/world/mcdb/db.go +++ b/server/world/mcdb/db.go @@ -433,6 +433,9 @@ func (db *DB) storeBlockEntities(batch *leveldb.Batch, k dbKey, blockEntities [] buf := bytes.NewBuffer(nil) enc := nbt.NewEncoderWithEncoding(buf, nbt.LittleEndian) for _, b := range blockEntities { + if b.Data == nil { + continue + } b.Data["x"], b.Data["y"], b.Data["z"] = int32(b.Pos[0]), int32(b.Pos[1]), int32(b.Pos[2]) if err := enc.Encode(b.Data); err != nil { db.conf.Log.Error("store block entities: encode nbt: " + err.Error())