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())