diff --git a/crates/level/Cargo.toml b/crates/level/Cargo.toml index 764fe56c..6beb536b 100644 --- a/crates/level/Cargo.toml +++ b/crates/level/Cargo.toml @@ -4,8 +4,8 @@ version = "0.1.0" edition = "2024" [features] -# default = ["rusty-leveldb"] -default = ["mojang-leveldb"] +deny-unknown-fields = [] +default = ["mojang-leveldb", "deny-unknown-fields"] mojang-leveldb = ["dep:leveldb-sys"] # rusty-leveldb = ["dep:rusty-leveldb", "dep:miniz_oxide"] @@ -33,6 +33,8 @@ bytemuck = { workspace = true } smallvec = "1.15.1" rustc-hash = "2.1.1" nohash-hasher = "0.2.0" +paste.workspace = true +serde_repr.workspace = true [dev-dependencies] tar = { workspace = true } diff --git a/crates/level/output.txt b/crates/level/output.txt new file mode 100644 index 00000000..d1049e9b --- /dev/null +++ b/crates/level/output.txt @@ -0,0 +1,1447 @@ + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s + + +running 1 test +keys count: 658 +key: Key { chunk: ChunkPosition(0, 0), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 0), dimension: End, data: BlockEntity } +BlockEntity { x: 0, y: 62, z: 1, is_movable: true, data: EndPortal } +BlockEntity { x: 0, y: 62, z: 2, is_movable: true, data: EndPortal } +BlockEntity { x: 1, y: 62, z: 0, is_movable: true, data: EndPortal } +BlockEntity { x: 1, y: 62, z: 1, is_movable: true, data: EndPortal } +BlockEntity { x: 1, y: 62, z: 2, is_movable: true, data: EndPortal } +BlockEntity { x: 2, y: 62, z: 1, is_movable: true, data: EndPortal } +BlockEntity { x: 2, y: 62, z: 0, is_movable: true, data: EndPortal } +key: Key { chunk: ChunkPosition(0, 0), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, 0), dimension: End, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(0, 0), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 0), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 11, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 15, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 11, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 15, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 13, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 9, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 13, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 9, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 9, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 11, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 15, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 13, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 15, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 9, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 9, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 11, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 15, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 13, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 15, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 9, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 11, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 15, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 13, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 13, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 15, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 11, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 13, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 11, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 9, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 13, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 9, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 11, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +key: Key { chunk: ChunkPosition(0, 0), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, 1), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 1), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 11, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 15, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 11, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 15, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 13, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 9, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 13, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 9, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 9, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 11, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 15, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 13, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 15, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 9, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 9, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 11, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 15, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 13, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 15, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 9, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 11, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 15, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 13, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 13, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 15, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 11, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 13, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 11, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 9, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 13, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 9, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 11, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +key: Key { chunk: ChunkPosition(0, 1), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, 2), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 2), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, 2), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(0, 2), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 2), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 11, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 15, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 11, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 15, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 13, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 9, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 13, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 9, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 9, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 11, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 15, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 13, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 15, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 9, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 9, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 11, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 15, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 13, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 15, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 9, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 11, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 15, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 13, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 13, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 15, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 11, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 13, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 11, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 9, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 13, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 9, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 11, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +key: Key { chunk: ChunkPosition(0, 2), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, 3), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 3), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 11, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 15, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 11, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 15, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 13, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 9, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 13, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 9, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 9, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 11, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 15, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 13, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 15, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 9, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 9, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 11, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 15, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 13, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 15, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 9, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 11, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 15, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 13, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 13, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 15, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 11, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 13, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 11, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 9, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 13, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 9, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 11, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +key: Key { chunk: ChunkPosition(0, 3), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, 4), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, 4), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 11, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 15, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 11, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 15, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 13, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 9, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 13, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 9, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 9, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 11, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 15, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 13, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 15, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 9, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 9, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 11, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 15, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 13, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 15, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 9, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 11, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 15, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 13, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 13, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 15, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 11, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 13, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 11, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 9, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 13, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 9, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 11, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +key: Key { chunk: ChunkPosition(0, 4), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, -3), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, -3), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(0, -3), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(0, -1), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(0, -1), dimension: End, data: BlockEntity } +BlockEntity { x: 0, y: 62, z: -2, is_movable: true, data: EndPortal } +BlockEntity { x: 0, y: 62, z: -1, is_movable: true, data: EndPortal } +BlockEntity { x: 1, y: 62, z: -2, is_movable: true, data: EndPortal } +BlockEntity { x: 1, y: 62, z: -1, is_movable: true, data: EndPortal } +BlockEntity { x: 2, y: 62, z: -1, is_movable: true, data: EndPortal } +key: Key { chunk: ChunkPosition(0, -1), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(1, 0), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(1, 0), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(1, 0), dimension: End, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(1, 0), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(1, 0), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 21, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 17, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 31, y: 70, z: 9, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 21, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 21, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 21, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 31, y: 70, z: 13, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 19, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 19, y: 70, z: 5, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 23, y: 70, z: 13, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 31, y: 70, z: 5, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 29, y: 70, z: 5, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 31, y: 70, z: 1, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 19, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 19, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 29, y: 70, z: 15, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 11, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 25, y: 70, z: 11, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 23, y: 70, z: 9, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 19, y: 70, z: 11, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 25, y: 70, z: 13, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 23, y: 70, z: 5, is_movable: true, data: Bed(Bed { color: Orange }) } +BlockEntity { x: 29, y: 70, z: 3, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 25, y: 70, z: 1, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 23, y: 70, z: 7, is_movable: true, data: Bed(Bed { color: Orange }) } +BlockEntity { x: 19, y: 70, z: 1, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 29, y: 70, z: 11, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 21, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 25, y: 70, z: 5, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 23, y: 70, z: 3, is_movable: true, data: Bed(Bed { color: Orange }) } +BlockEntity { x: 17, y: 70, z: 13, is_movable: true, data: Noteblock(Noteblock { note: 8 }) } +BlockEntity { x: 31, y: 70, z: 3, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 25, y: 70, z: 3, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 17, y: 70, z: 9, is_movable: true, data: Noteblock(Noteblock { note: 7 }) } +BlockEntity { x: 23, y: 70, z: 15, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 25, y: 70, z: 15, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 31, y: 70, z: 7, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 29, y: 70, z: 13, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 25, y: 70, z: 7, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 29, y: 70, z: 1, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 25, y: 70, z: 9, is_movable: true, data: Bed(Bed { color: Blue }) } +BlockEntity { x: 17, y: 70, z: 7, is_movable: true, data: Noteblock(Noteblock { note: 6 }) } +BlockEntity { x: 31, y: 70, z: 15, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 31, y: 70, z: 11, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 1, is_movable: true, data: Bed(Bed { color: Orange }) } +BlockEntity { x: 29, y: 70, z: 7, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 15, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 17, y: 70, z: 3, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 29, y: 70, z: 9, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +key: Key { chunk: ChunkPosition(1, 0), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(1, 1), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(1, 1), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 21, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 17, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 31, y: 70, z: 25, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 21, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 21, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 21, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 17, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 17, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 29, y: 70, z: 19, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 21, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 31, y: 70, z: 19, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 23, y: 70, z: 29, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 19, y: 70, z: 21, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 31, y: 70, z: 21, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 29, y: 70, z: 21, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 31, y: 70, z: 17, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 19, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 19, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 29, y: 70, z: 31, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 27, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 25, y: 70, z: 27, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 25, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 19, y: 70, z: 27, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 25, y: 70, z: 29, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 25, y: 70, z: 17, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 23, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 19, y: 70, z: 17, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 29, y: 70, z: 27, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 29, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 21, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 25, y: 70, z: 21, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 19, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 25, y: 70, z: 19, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 17, y: 70, z: 25, is_movable: true, data: Noteblock(Noteblock { note: 11 }) } +BlockEntity { x: 23, y: 70, z: 31, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 25, y: 70, z: 31, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 31, y: 70, z: 23, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 29, y: 70, z: 29, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 25, y: 70, z: 23, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 29, y: 70, z: 17, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 23, is_movable: true, data: Noteblock(Noteblock { note: 10 }) } +BlockEntity { x: 23, y: 70, z: 17, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 29, y: 70, z: 23, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 12 }) } +BlockEntity { x: 25, y: 70, z: 25, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 21, y: 70, z: 31, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 17, y: 70, z: 19, is_movable: true, data: Noteblock(Noteblock { note: 9 }) } +BlockEntity { x: 29, y: 70, z: 25, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +key: Key { chunk: ChunkPosition(1, 1), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(1, 2), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(1, 2), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 17, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 21, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 17, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 21, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 21, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 19, y: 70, z: 37, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 23, y: 70, z: 37, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 29, y: 70, z: 35, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 45, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 17, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 17, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 29, y: 70, z: 37, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 17, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 19, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 25, y: 70, z: 47, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 47, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 29, y: 70, z: 39, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 33, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 19, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 29, y: 70, z: 47, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 43, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 25, y: 70, z: 43, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 41, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 19, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 25, y: 70, z: 45, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 25, y: 70, z: 33, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 39, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 17, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 14 }) } +BlockEntity { x: 21, y: 70, z: 47, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 17, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 13 }) } +BlockEntity { x: 29, y: 70, z: 41, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 25, y: 70, z: 35, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 23, y: 70, z: 35, is_movable: true, data: Bed(Bed { color: Magenta }) } +BlockEntity { x: 25, y: 70, z: 37, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 19, y: 70, z: 33, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 29, y: 70, z: 43, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 21, y: 70, z: 45, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 17, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 15 }) } +BlockEntity { x: 21, y: 70, z: 43, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 25, y: 70, z: 39, is_movable: true, data: Bed(Bed { color: Brown }) } +BlockEntity { x: 29, y: 70, z: 45, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 39, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 29, y: 70, z: 33, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 41, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 19, y: 70, z: 35, is_movable: true, data: Noteblock(Noteblock { note: 16 }) } +BlockEntity { x: 25, y: 70, z: 41, is_movable: true, data: Bed(Bed { color: Brown }) } +key: Key { chunk: ChunkPosition(1, 2), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(1, 3), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(1, 3), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 17, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 21, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 17, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 21, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 21, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 19, y: 70, z: 53, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 23, y: 70, z: 53, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 29, y: 70, z: 51, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 61, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 17, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 17, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 29, y: 70, z: 53, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 17, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 19, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 19, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 29, y: 70, z: 63, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 59, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 25, y: 70, z: 59, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 57, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 29, y: 70, z: 59, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 19, y: 70, z: 49, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 21, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 25, y: 70, z: 53, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 51, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 21, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 29, y: 70, z: 49, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 25, y: 70, z: 61, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 19, y: 70, z: 59, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 25, y: 70, z: 55, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 55, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 25, y: 70, z: 49, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 19, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 20 }) } +BlockEntity { x: 25, y: 70, z: 57, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 29, y: 70, z: 57, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 17, y: 70, z: 51, is_movable: true, data: Noteblock(Noteblock { note: 17 }) } +BlockEntity { x: 17, y: 70, z: 55, is_movable: true, data: Noteblock(Noteblock { note: 18 }) } +BlockEntity { x: 21, y: 70, z: 63, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 25, y: 70, z: 51, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 21, y: 70, z: 61, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 17, y: 70, z: 57, is_movable: true, data: Noteblock(Noteblock { note: 19 }) } +BlockEntity { x: 23, y: 70, z: 63, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 25, y: 70, z: 63, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 49, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 29, y: 70, z: 55, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 29, y: 70, z: 61, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +key: Key { chunk: ChunkPosition(1, 3), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(1, 4), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(1, 4), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 17, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 21, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 17, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 21, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 21, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 19, y: 70, z: 69, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 23, y: 70, z: 69, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 29, y: 70, z: 67, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 77, is_movable: true, data: Bed(Bed { color: Yellow }) } +BlockEntity { x: 17, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 17, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 29, y: 70, z: 69, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 0 }) } +BlockEntity { x: 17, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 19, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 25, y: 70, z: 79, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 79, is_movable: true, data: Bed(Bed { color: Yellow }) } +BlockEntity { x: 29, y: 70, z: 71, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 65, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 19, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 29, y: 70, z: 79, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 23, y: 70, z: 75, is_movable: true, data: Bed(Bed { color: Yellow }) } +BlockEntity { x: 25, y: 70, z: 75, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 73, is_movable: true, data: Bed(Bed { color: Yellow }) } +BlockEntity { x: 19, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 1 }) } +BlockEntity { x: 25, y: 70, z: 77, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 25, y: 70, z: 65, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 71, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 19, y: 70, z: 65, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 29, y: 70, z: 75, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 19, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 2 }) } +BlockEntity { x: 17, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 22 }) } +BlockEntity { x: 21, y: 70, z: 79, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 25, y: 70, z: 67, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 23, y: 70, z: 67, is_movable: true, data: Bed(Bed { color: LightBlue }) } +BlockEntity { x: 25, y: 70, z: 69, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 17, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 21 }) } +BlockEntity { x: 29, y: 70, z: 73, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 77, is_movable: true, data: Noteblock(Noteblock { note: 5 }) } +BlockEntity { x: 17, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 23 }) } +BlockEntity { x: 21, y: 70, z: 75, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 25, y: 70, z: 71, is_movable: true, data: Bed(Bed { color: Green }) } +BlockEntity { x: 29, y: 70, z: 77, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 71, is_movable: true, data: Noteblock(Noteblock { note: 3 }) } +BlockEntity { x: 29, y: 70, z: 65, is_movable: true, data: ChiseledShelf(ChiseledShelf { items: None, last_interacted_slot: None }) } +BlockEntity { x: 21, y: 70, z: 73, is_movable: true, data: Noteblock(Noteblock { note: 4 }) } +BlockEntity { x: 19, y: 70, z: 67, is_movable: true, data: Noteblock(Noteblock { note: 24 }) } +BlockEntity { x: 25, y: 70, z: 73, is_movable: true, data: Bed(Bed { color: Green }) } +key: Key { chunk: ChunkPosition(1, 4), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(2, 0), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(2, 0), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(2, 0), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(2, 0), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(2, 0), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 39, y: 70, z: 5, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 13, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 15, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 7, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 3, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 11, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 9, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 1, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +key: Key { chunk: ChunkPosition(2, 0), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(2, 1), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(2, 1), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(2, 1), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(2, 1), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(2, 1), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 39, y: 70, z: 17, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 25, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 19, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 27, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 21, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 39, y: 70, z: 23, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +key: Key { chunk: ChunkPosition(2, 1), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(2, -2), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(2, -2), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(2, -2), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(3, 0), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(3, 0), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 57, y: 70, z: 13, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 5, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 7, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 15, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 15, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 13, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 3, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 11, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 1, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 1, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 9, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 3, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 13, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 7, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 15, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 11, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 5, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 1, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 9, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 7, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 3, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 11, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 9, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 5, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +key: Key { chunk: ChunkPosition(3, 0), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(3, 1), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(3, 1), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 57, y: 70, z: 17, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 25, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 27, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 19, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 29, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 17, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 21, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 31, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 19, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 23, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 27, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 21, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 31, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 27, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 25, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 23, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 19, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 29, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 23, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 25, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 31, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 17, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 29, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 21, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +key: Key { chunk: ChunkPosition(3, 1), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(3, 2), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(3, 2), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 57, y: 70, z: 45, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 37, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 39, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 47, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 47, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 45, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 35, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 43, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 33, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 33, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 41, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 35, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 45, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 39, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 47, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 57, y: 70, z: 43, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 37, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 33, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 41, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 39, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 35, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 43, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 59, y: 70, z: 41, is_movable: true, data: Sign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 63, y: 70, z: 37, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +key: Key { chunk: ChunkPosition(3, 2), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(4, 0), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(4, 0), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 69, y: 70, z: 1, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 5, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 15, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 5, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 3, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 7, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 3, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 5, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 15, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 1, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 3, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 5, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 1, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 9, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 5, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 13, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 15, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 11, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 11, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 9, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 9, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 13, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 1, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 9, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 13, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 11, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 11, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 7, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 1, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 15, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 7, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 3, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 13, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 13, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 7, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 7, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 11, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 15, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 3, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 9, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +key: Key { chunk: ChunkPosition(4, 0), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(4, 0), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(4, 1), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(4, 1), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 65, y: 70, z: 19, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 19, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 17, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 17, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 21, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 19, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 21, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 31, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 19, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 23, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 17, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 21, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 29, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 31, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 23, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 19, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 27, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 25, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 29, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 27, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 23, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 27, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 23, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 73, y: 70, z: 17, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 31, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 29, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 25, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 21, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 17, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 71, y: 70, z: 25, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 69, y: 70, z: 25, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 27, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 65, y: 70, z: 31, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +BlockEntity { x: 67, y: 70, z: 29, is_movable: true, data: HangingSign(Sign { back_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, front_text: SignText { hide_glow_outline: false, ignore_lighting: false, persist_formatting: true, sign_text_color: -16777216, filtered_text: "", text: "", text_owner: "" }, is_waxed: false }) } +key: Key { chunk: ChunkPosition(4, 1), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(7, 20), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(7, 20), dimension: Overworld, data: BiomeState } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 202, y: -23, z: -521, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 201, y: -24, z: -521, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 203, y: -14, z: -516, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 201, y: -24, z: -516, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 204, y: -7, z: -524, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward_ominous.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Ominous, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 204, y: -24, z: -524, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(12, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 200, y: -15, z: -509, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 202, y: -23, z: -511, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 200, y: -14, z: -509, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(12, -32), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 221, y: -36, z: -522, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 213, y: -25, z: -523, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 213, y: -24, z: -523, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 223, y: -35, z: -514, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward_ominous.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Ominous, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 221, y: -36, z: -520, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 222, y: -36, z: -522, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 212, y: -19, z: -521, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 222, y: -36, z: -520, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 212, y: -19, z: -516, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 211, y: -8, z: -516, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 209, y: -19, z: -516, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 209, y: -9, z: -521, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(13, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 212, y: -19, z: -511, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 216, y: -34, z: -497, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 209, y: -19, z: -508, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 220, y: -29, z: -507, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 216, y: -34, z: -501, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:guster_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 221, y: -36, z: -497, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 221, y: -36, z: -502, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 216, y: -29, z: -506, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:guster_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 221, y: -36, z: -507, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/corridor.json"), loot_table_seed: Some(0), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 216, y: -29, z: -507, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 216, y: -34, z: -505, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 219, y: -34, z: -504, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 221, y: -36, z: -505, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/corridor.json"), loot_table_seed: Some(0), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 209, y: -9, z: -511, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 214, y: -44, z: -506, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/reward.json"), loot_table_seed: Some(78754412), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 218, y: -2, z: -504, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 215, y: -2, z: -501, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 218, y: -12, z: -504, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 218, y: -2, z: -501, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(13, -32), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 221, y: -36, z: -490, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/corridor.json"), loot_table_seed: Some(0), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 216, y: -34, z: -495, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 221, y: -36, z: -495, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 216, y: -29, z: -491, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 223, y: -17, z: -488, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 218, y: -2, z: -488, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 214, y: -18, z: -489, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 216, y: -34, z: -496, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 216, y: -29, z: -496, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 221, y: -36, z: -496, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:scrape_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 214, y: -17, z: -489, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 215, y: -12, z: -491, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 215, y: -2, z: -491, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 223, y: -7, z: -488, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 218, y: -12, z: -488, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 216, y: -1, z: -496, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 223, y: 0, z: -488, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward_ominous.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Ominous, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 223, y: -29, z: -491, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/small_melee/silverfish/ominous", spawn_data: SpawnData { type_id: "minecraft:silverfish", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/small_melee/silverfish/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 218, y: -2, z: -491, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 218, y: -12, z: -496, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 223, y: -24, z: -491, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/small_melee/silverfish/ominous", spawn_data: SpawnData { type_id: "minecraft:silverfish", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/small_melee/silverfish/normal", cooldown_end_at: 0 }) } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(13, -31), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 238, y: -31, z: -562, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(14, -36), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 230, y: -34, z: -550, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 230, y: -34, z: -545, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 236, y: -35, z: -550, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 230, y: -34, z: -555, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(14, -35), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 230, y: -34, z: -540, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 238, y: -34, z: -535, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/melee/zombie/ominous", spawn_data: SpawnData { type_id: "minecraft:zombie", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/melee/zombie/normal", cooldown_end_at: 0 }) } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(14, -34), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 224, y: -36, z: -522, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 224, y: -36, z: -520, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 237, y: -29, z: -524, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 225, y: -36, z: -522, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 237, y: -29, z: -518, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:guster_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 225, y: -36, z: -520, is_movable: true, data: Bed(Bed { color: White }) } +BlockEntity { x: 238, y: -29, z: -514, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 237, y: -29, z: -528, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 237, y: -34, z: -528, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 238, y: -44, z: -527, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/reward.json"), loot_table_seed: Some(447466149), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 235, y: -44, z: -519, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/supply.json"), loot_table_seed: Some(-51343305), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(14, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 227, y: -34, z: -499, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 230, y: -34, z: -497, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 227, y: -34, z: -503, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/corridor.json"), loot_table_seed: Some(0), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 230, y: -34, z: -500, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:scrape_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 230, y: -29, z: -502, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 230, y: -29, z: -506, is_movable: true, data: FlowerPot(FlowerPot { plant_block: Some(BlockDef { name: "minecraft:deadbush", version: Some([1, 21, 60, 33]), states: {} }) }) } +BlockEntity { x: 230, y: -34, z: -502, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 225, y: -36, z: -507, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 230, y: -29, z: -505, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 230, y: -34, z: -505, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:flow_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 230, y: -34, z: -506, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 226, y: -29, z: -507, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 230, y: -34, z: -507, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 227, y: -8, z: -503, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 227, y: -7, z: -503, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 225, y: -16, z: -501, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(14, -32), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 225, y: -36, z: -490, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 230, y: -34, z: -495, is_movable: true, data: FlowerPot(FlowerPot { plant_block: Some(BlockDef { name: "minecraft:deadbush", version: Some([1, 21, 60, 33]), states: {} }) }) } +BlockEntity { x: 226, y: -28, z: -491, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 224, y: -7, z: -496, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/slow_ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 226, y: -28, z: -496, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 230, y: -34, z: -496, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 225, y: -16, z: -491, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 226, y: -7, z: -491, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(14, -31), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 248, y: -31, z: -562, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(15, -36), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 243, y: -32, z: -557, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/ranged/poison_skeleton/ominous", spawn_data: SpawnData { type_id: "minecraft:bogged", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/ranged/poison_skeleton/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 255, y: -27, z: -545, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward_ominous.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Ominous, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 243, y: -33, z: -553, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(15, -35), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 245, y: -30, z: -531, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 245, y: -40, z: -531, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 243, y: -34, z: -537, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 245, y: -39, z: -531, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 245, y: -29, z: -531, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 247, y: -38, z: -535, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22747 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 243, y: -34, z: -541, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/breeze/ominous", spawn_data: SpawnData { type_id: "minecraft:breeze", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/breeze/normal", cooldown_end_at: 0 }) } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(15, -34), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 242, y: -36, z: -519, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 252, y: -34, z: -514, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/corridor.json"), loot_table_seed: Some(0), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 254, y: -29, z: -514, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 248, y: -34, z: -514, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: Some(["minecraft:guster_pottery_sherd", "minecraft:brick", "minecraft:brick", "minecraft:brick"]) }) } +BlockEntity { x: 252, y: -34, z: -528, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 254, y: -34, z: -528, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 253, y: -34, z: -528, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 254, y: -29, z: -523, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 244, y: -29, z: -524, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 244, y: -34, z: -514, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 249, y: -29, z: -524, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 248, y: -36, z: -519, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/corridor.json"), loot_table_seed: Some(0), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 247, y: -36, z: -519, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 247, y: -34, z: -514, is_movable: true, data: DecoratedPot(DecoratedPot { loot_table: Some("loot_tables/pots/trial_chambers/corridor.json"), loot_table_seed: Some(0), animation: 0, item: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 0, damage: 0, name: "", tag: None, was_picked_up: false }, sherds: None }) } +BlockEntity { x: 253, y: -29, z: -521, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/melee/zombie/ominous", spawn_data: SpawnData { type_id: "minecraft:zombie", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/melee/zombie/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 243, y: -36, z: -521, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/melee/zombie/ominous", spawn_data: SpawnData { type_id: "minecraft:zombie", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/melee/zombie/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 248, y: -36, z: -521, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/melee/zombie/ominous", spawn_data: SpawnData { type_id: "minecraft:zombie", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/melee/zombie/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 243, y: -29, z: -521, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/small_melee/silverfish/ominous", spawn_data: SpawnData { type_id: "minecraft:silverfish", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/small_melee/silverfish/normal", cooldown_end_at: 0 }) } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(15, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 257, y: -33, z: -562, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 257, y: -32, z: -562, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(16, -36), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 256, y: -34, z: -555, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 270, y: 46, z: -547, is_movable: true, data: MobSpawner(MobSpawner { display_entity_height: 1.8, display_entity_scale: 1.0, display_entity_width: 0.8, spawn_count: 4, max_nearby_entities: 6, spawn_range: 4, max_spawn_delay: 800, entity_identifier: "minecraft:zombie", min_spawn_delay: 200, delay: 20, required_player_range: 16 }) } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(16, -35), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 256, y: -34, z: -540, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(16, -34), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 262, y: -36, z: -521, is_movable: true, data: Chest(Chest { findable: 0, force_unpair: None, loot_table: Some("loot_tables/chests/trial_chambers/intersection.json"), loot_table_seed: Some(1548673742), pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 265, y: -23, z: -524, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(16, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(16, -32), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: 4 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 279, y: -26, z: -534, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 276, y: -26, z: -531, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 284, y: -26, z: -534, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 284, y: -30, z: -532, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(17, -34), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 275, y: -32, z: -519, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 276, y: -26, z: -526, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 275, y: -31, z: -519, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 272, y: -37, z: -521, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward_ominous.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Ominous, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 276, y: -31, z: -526, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 284, y: -30, z: -517, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(17, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 279, y: -31, z: -508, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 284, y: -31, z: -508, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 279, y: -26, z: -508, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 276, y: -31, z: -511, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(17, -32), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 289, y: -24, z: -531, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/melee/zombie/ominous", spawn_data: SpawnData { type_id: "minecraft:zombie", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/melee/zombie/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 302, y: -26, z: -531, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 299, y: -26, z: -534, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 302, y: -31, z: -531, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 293, y: -30, z: -531, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 289, y: -31, z: -534, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 299, y: -31, z: -534, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(18, -34), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 302, y: -26, z: -516, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 302, y: -31, z: -526, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 289, y: -26, z: -521, is_movable: true, data: TrialSpawner(TrialSpawner { ominous_config: "minecraft:trial_chamber/breeze/ominous", spawn_data: SpawnData { type_id: "minecraft:breeze", weight: 1, equipment: None }, total_mobs_spawned: 0, required_player_range: 14, current_mobs: [], next_mob_spawns_at: 0, registered_players: [], normal_config: "minecraft:trial_chamber/breeze/normal", cooldown_end_at: 0 }) } +BlockEntity { x: 302, y: -31, z: -516, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 293, y: -25, z: -521, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward_ominous.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Ominous, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +BlockEntity { x: 289, y: -30, z: -513, is_movable: true, data: Vault(Vault { data: VaultData { items_to_eject: [], rewarded_players: [], state_updating_resumes_at: 22746 }, config: VaultConfig { loot_table: "loot_tables/chests/trial_chambers/reward.json", activation_range: 4.0, key_item: VaultKeyItem { ty: Normal, damage: 0, count: 1, was_picked_up: false }, deactivation_range: 4.5, override_loot_table_to_display: "" } }) } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(18, -33), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: BlockEntity } +BlockEntity { x: 291, y: -27, z: -507, is_movable: true, data: Barrel(Chest { findable: 0, force_unpair: None, loot_table: None, loot_table_seed: None, pair_lead: None, pair_x: None, pair_z: None, items: [] }) } +BlockEntity { x: 291, y: -26, z: -507, is_movable: true, data: Hopper(Hopper { items: [], transfer_cooldown: 0 }) } +BlockEntity { x: 294, y: -31, z: -508, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +BlockEntity { x: 302, y: -26, z: -511, is_movable: true, data: Dispenser(Dispenser { loot_table: "loot_tables/dispensers/trial_chambers/chamber.json", items: [], loot_table_seed: 0 }) } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(18, -32), dimension: Overworld, data: AabbVolumes } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: Biome3d } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: ChunkVersion } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: 0 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: 1 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: -4 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: -3 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: -2 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: SubChunk { index: -1 } } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: FinalizedState } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: BlendingBiomeHeight } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: BlendingData } +key: Key { chunk: ChunkPosition(19, -34), dimension: Overworld, data: ActorDigestVersion } +failed: "AutonomousEntities" +failed: "BiomeData" +failed: "Overworld" +failed: "TheEnd" +failed: "WorldClocks" +failed: "actorprefix\0\0\0\u{2}\0\0\0\u{3}" +failed: "actorprefix\0\0\0\u{2}\0\0\0\u{7}" +failed: "actorprefix\0\0\0\u{2}\0\0\0\n" +failed: "actorprefix\0\0\0\u{2}\0\0\0\u{b}" +failed: "actorprefix\0\0\0\u{5}\0\0\0R" +failed: "actorprefix\0\0\0\u{5}\0\0\0S" +failed: "actorprefix\0\0\0\u{5}\0\0\0T" +failed: "actorprefix\0\0\0\u{5}\0\0\0U" +failed: "actorprefix\0\0\0\u{5}\0\0\0V" +failed: "actorprefix\0\0\0\u{5}\0\0\0W" +failed: "actorprefix\0\0\0\u{5}\0\0\0\\" +failed: "actorprefix\0\0\0\u{5}\0\0\0]" +failed: "actorprefix\0\0\0\u{5}\0\0\0^" +failed: "actorprefix\0\0\0\u{5}\0\0\0_" +failed: "actorprefix\0\0\0\u{5}\0\0\0`" +failed: "actorprefix\0\0\0\u{5}\0\0\0b" +failed: "actorprefix\0\0\0\u{5}\0\0\0c" +failed: "actorprefix\0\0\0\u{5}\0\0\0d" +failed: "actorprefix\0\0\0\u{5}\0\0\0e" +failed: "actorprefix\0\0\0\u{5}\0\0\0f" +failed: "actorprefix\0\0\0\u{5}\0\0\0g" +failed: "actorprefix\0\0\0\u{5}\0\0\0h" +failed: "actorprefix\0\0\0\u{5}\0\0\0i" +failed: "actorprefix\0\0\0\u{5}\0\0\0j" +failed: "actorprefix\0\0\0\u{5}\0\0\0l" +failed: "actorprefix\0\0\0\u{5}\0\0\0m" +failed: "actorprefix\0\0\0\u{5}\0\0\0o" +failed: "actorprefix\0\0\0\u{5}\0\0\0p" +failed: "actorprefix\0\0\0\u{5}\0\0\0q" +failed: "actorprefix\0\0\0\u{5}\0\0\0r" +failed: "actorprefix\0\0\0\u{5}\0\0\0s" +failed: "actorprefix\0\0\0\u{5}\0\0\0t" +failed: "actorprefix\0\0\0\u{5}\0\0\0v" +failed: "actorprefix\0\0\0\u{5}\0\0\0w" +failed: "actorprefix\0\0\0\u{5}\0\0\0x" +failed: "actorprefix\0\0\0\u{5}\0\0\0y" +failed: "actorprefix\0\0\0\u{5}\0\0\0z" +failed: "actorprefix\0\0\0\u{5}\0\0\0}" +failed: "actorprefix\0\0\0\u{5}\0\0\0~" +failed: "actorprefix\0\0\0\u{5}\0\0\0\u{7f}" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\u{5}\0\0\0�" +failed: "actorprefix\0\0\0\t\0\0\u{2}�" +failed: "actorprefix\0\0\0\t\0\0\u{2}�" +failed: "digp\0\0\0\0\0\0\0\0\u{2}\0\0\0" +failed: "digp\u{1}\0\0\0\0\0\0\0\u{2}\0\0\0" +failed: "digp\u{4}\0\0\0\0\0\0\0" +failed: "digp\u{c}\0\0\0����" +failed: "digp\u{c}\0\0\0����" +failed: "digp\r\0\0\0����" +failed: "digp\r\0\0\0����" +failed: "digp\r\0\0\0����" +failed: "digp\u{e}\0\0\0����" +failed: "digp\u{e}\0\0\0����" +failed: "digp\u{e}\0\0\0����" +failed: "digp\u{e}\0\0\0����" +failed: "digp\u{e}\0\0\0����" +failed: "digp\u{e}\0\0\0����" +failed: "digp\u{f}\0\0\0����" +failed: "digp\u{f}\0\0\0����" +failed: "digp\u{f}\0\0\0����" +failed: "digp\u{f}\0\0\0����" +failed: "digp\u{10}\0\0\0����" +failed: "digp\u{10}\0\0\0����" +failed: "digp\u{10}\0\0\0����" +failed: "digp\u{10}\0\0\0����" +failed: "digp\u{10}\0\0\0����" +failed: "digp\u{11}\0\0\0����" +failed: "digp\u{11}\0\0\0����" +failed: "digp\u{11}\0\0\0����" +failed: "digp\u{12}\0\0\0����" +failed: "digp\u{12}\0\0\0����" +failed: "digp\u{12}\0\0\0����" +failed: "digp\u{13}\0\0\0����" +failed: "digp����\u{5}\0\0\0\u{2}\0\0\0" +failed: "mobevents" +failed: "scoreboard" +key: Key { chunk: ChunkPosition(1668246654, 1885301857), dimension: Undefined, data: LocalPlayer } +key: Key { chunk: ChunkPosition(-3, 0), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-3, 0), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-3, 0), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(-3, 1), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-3, 1), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-3, 1), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(-3, -2), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-3, -2), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-3, -2), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(-2, 5), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-2, 5), dimension: End, data: BlockEntity } +BlockEntity { x: -29, y: 75, z: 91, is_movable: true, data: EndGateway(EndGateway { age: 4365, exit_portal: [-357, 63, 1031], end_gateway_bad_pos_checked: true }) } +BlockEntity { x: -30, y: 74, z: 86, is_movable: true, data: Hopper(Hopper { items: [ItemSlot { slot: 0, stack: ItemStack { block: None, can_destroy: None, can_place_on: None, count: 1, damage: 0, name: "minecraft:frame", tag: None, was_picked_up: false } }], transfer_cooldown: 0 }) } +BlockEntity { x: -26, y: 75, z: 87, is_movable: true, data: Jukebox(Jukebox { record_item: Some(ItemStack { block: None, can_destroy: None, can_place_on: None, count: 1, damage: 0, name: "minecraft:music_disc_11", tag: None, was_picked_up: false }) }) } +key: Key { chunk: ChunkPosition(-2, 5), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-2, 5), dimension: End, data: ActorDigestVersion } +key: Key { chunk: ChunkPosition(-2, 6), dimension: End, data: Biome3d } +key: Key { chunk: ChunkPosition(-2, 6), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-2, 6), dimension: End, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(-2, 6), dimension: End, data: BlockEntity } +BlockEntity { x: -22, y: 42, z: 99, is_movable: true, data: Lectern(Lectern { book: Some(LecternBook { total_pages: 1, page: 0, has_book: true, book: Book { count: 1, name: "minecraft:written_book", damage: 0, meta: BookMetadata { author: "Author Unknown", xuid: "2535411078067951", title: "Enter title here", pages: [BookPage { photo_name: "", text: "Hello there" }], generation: 0 }, was_picked_up: false } }) }) } +BlockEntity { x: -18, y: 42, z: 103, is_movable: true, data: PistonArm(PistonArm { attached_blocks: [], break_blocks: [], last_progress: None, new_state: Retracted, progress: None, state: Retracted, sticky: true }) } +BlockEntity { x: -18, y: 42, z: 106, is_movable: true, data: BrushableBlock(BrushableBlock { brush_count: 0, brush_direction: 6, loot_table_seed: 0, loot_table: "loot_tables/entities/empty_brushable_block.json", ty: "minecraft:suspicious_gravel" }) } +BlockEntity { x: -21, y: 42, z: 104, is_movable: true, data: BrushableBlock(BrushableBlock { brush_count: 0, brush_direction: 6, loot_table_seed: 0, loot_table: "loot_tables/entities/empty_brushable_block.json", ty: "minecraft:suspicious_sand" }) } +key: Key { chunk: ChunkPosition(-2, 6), dimension: End, data: PendingTicks } +key: Key { chunk: ChunkPosition(-2, 6), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-1, 0), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-1, 0), dimension: End, data: BlockEntity } +BlockEntity { x: -2, y: 62, z: 0, is_movable: true, data: EndPortal } +BlockEntity { x: -2, y: 62, z: 1, is_movable: true, data: EndPortal } +BlockEntity { x: -1, y: 62, z: 0, is_movable: true, data: EndPortal } +BlockEntity { x: -1, y: 62, z: 1, is_movable: true, data: EndPortal } +BlockEntity { x: -1, y: 62, z: 2, is_movable: true, data: EndPortal } +key: Key { chunk: ChunkPosition(-1, 0), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-1, 2), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-1, 2), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-1, 2), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(-1, 6), dimension: End, data: Biome3d } +key: Key { chunk: ChunkPosition(-1, 6), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-1, 6), dimension: End, data: SubChunk { index: 2 } } +key: Key { chunk: ChunkPosition(-1, 6), dimension: End, data: SubChunk { index: 3 } } +key: Key { chunk: ChunkPosition(-1, 6), dimension: End, data: BlockEntity } +BlockEntity { x: -6, y: 49, z: 106, is_movable: true, data: JigsawBlock(JigsawBlock { target: "minecraft:empty", final_state: "minecraft:air", placement_priority: 0, selection_priority: 0, joint: Rollable, name: "minecraft:empty", target_pool: "minecraft:empty" }) } +BlockEntity { x: -10, y: 46, z: 108, is_movable: true, data: StructureBlock(StructureBlock { redstone_save_mode: 0, structure_name: "", data_field: "", integrity: 100.0, is_powered: false, seed: 0, show_bounding_box: true, include_players: false, last_touched_player_id: -5833860172343903182, mirror: false, remove_blocks: false, ignore_entities: false, rotation: 0, mode: Save, animation_seconds: 0.0, animation_mode: 0, x_structure_offset: 0, y_structure_offset: -1, z_structure_offset: 0, x_structure_size: 5, y_structure_size: 5, z_structure_size: 5 }) } +key: Key { chunk: ChunkPosition(-1, 6), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-1, -3), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-1, -3), dimension: End, data: FinalizedState } +key: Key { chunk: ChunkPosition(-1, -3), dimension: End, data: RandomTicks } +key: Key { chunk: ChunkPosition(-1, -1), dimension: End, data: ChunkVersion } +key: Key { chunk: ChunkPosition(-1, -1), dimension: End, data: BlockEntity } +BlockEntity { x: -2, y: 62, z: -1, is_movable: true, data: EndPortal } +BlockEntity { x: -1, y: 62, z: -2, is_movable: true, data: EndPortal } +BlockEntity { x: -1, y: 62, z: -1, is_movable: true, data: EndPortal } +key: Key { chunk: ChunkPosition(-1, -1), dimension: End, data: FinalizedState } +test read_block_entity ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 4 filtered out; finished in 0.17s + diff --git a/crates/level/src/block_entities/banner.rs b/crates/level/src/block_entities/banner.rs new file mode 100644 index 00000000..a859855e --- /dev/null +++ b/crates/level/src/block_entities/banner.rs @@ -0,0 +1,68 @@ +use crate::color::Color; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +pub enum BannerPatternType { + Base, + BottomStripe, + TopStripe, + LeftStripe, + RightStripe, + CenterStripe, + MiddleStripe, + DownRightStripe, + DownLeftStripe, + SmallStripes, + DiagonalCross, + SquareCross, + LeftOfDiagonal, + RightOfUpsideDownDiagonal, + LeftOfUpsideDownDiagonal, + RightOfDiagonal, + VerticalHalf, + VerticalHalfRight, + HorizontalHalf, + HorizontalHalfBottom, + BottomLeftCorner, + TopLeftCorner, + TopRightCorner, + BottomTriangle, + TopTriangle, + BottomTriangleSawtooth, + TopTriangleSawtooth, + MiddleCircle, + MiddleRhombus, + Border, + CurlyBorder, + Brick, + Gradient, + GradientUpsideDown, + Creeper, + Skull, + Flower, + Mojang, + Globe, + Piglin, + Flow, + Guster, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct BannerPattern { + pub color: Color, + pub pattern: BannerPatternType, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Banner { + /// Base colour of the banner. + pub base: Color, + #[serde(rename = "Type")] + pub ty: i32, + /// The patterns displayed on this banner. + /// + /// May not exist. + pub patterns: Option>, +} diff --git a/crates/level/src/block_entities/beacon.rs b/crates/level/src/block_entities/beacon.rs new file mode 100644 index 00000000..9cec11f1 --- /dev/null +++ b/crates/level/src/block_entities/beacon.rs @@ -0,0 +1,8 @@ +use crate::types::Effect; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Beacon { + pub primary: Effect, + pub secondary: Effect, +} diff --git a/crates/level/src/block_entities/bed.rs b/crates/level/src/block_entities/bed.rs new file mode 100644 index 00000000..c4cb42a0 --- /dev/null +++ b/crates/level/src/block_entities/bed.rs @@ -0,0 +1,8 @@ +use crate::color::Color; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Bed { + /// Color of the bed. + pub color: Color, +} diff --git a/crates/level/src/block_entities/beehive.rs b/crates/level/src/block_entities/beehive.rs new file mode 100644 index 00000000..916c1215 --- /dev/null +++ b/crates/level/src/block_entities/beehive.rs @@ -0,0 +1,10 @@ +use crate::deserialize_bool; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Beehive { + /// Whether the beehive should spawn bees. + #[serde(deserialize_with = "deserialize_bool")] + pub should_spawn_bees: bool, +} diff --git a/crates/level/src/block_entities/bell.rs b/crates/level/src/block_entities/bell.rs new file mode 100644 index 00000000..e39e4b38 --- /dev/null +++ b/crates/level/src/block_entities/bell.rs @@ -0,0 +1,14 @@ +use crate::deserialize_bool; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Bell { + /// The direction the bell is facing. + pub direction: i32, + /// Whether the bell is currently ringing. + #[serde(deserialize_with = "deserialize_bool")] + pub ringing: bool, + /// Unknown. + pub ticks: i32, +} diff --git a/crates/level/src/block_entities/brewing_stand.rs b/crates/level/src/block_entities/brewing_stand.rs new file mode 100644 index 00000000..2c0f09f9 --- /dev/null +++ b/crates/level/src/block_entities/brewing_stand.rs @@ -0,0 +1,12 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct BrewingStand { + pub cook_time: i16, + pub fuel_amount: i16, + pub fuel_total: i16, + /// The items currently contained in the brewing stand. + pub items: Vec, +} diff --git a/crates/level/src/block_entities/brushable_block.rs b/crates/level/src/block_entities/brushable_block.rs new file mode 100644 index 00000000..f07d92b3 --- /dev/null +++ b/crates/level/src/block_entities/brushable_block.rs @@ -0,0 +1,13 @@ +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct BrushableBlock { + pub brush_count: i32, + pub brush_direction: i8, + #[serde(rename = "LootTableSeed")] + pub loot_table_seed: i32, + #[serde(rename = "LootTable")] + pub loot_table: String, + /// Types are (presumably) `minecraft:suspicious_gravel` and `minecraft:suspicious_sand`. + #[serde(rename = "type")] + pub ty: String, +} diff --git a/crates/level/src/block_entities/campfire.rs b/crates/level/src/block_entities/campfire.rs new file mode 100644 index 00000000..e9571048 --- /dev/null +++ b/crates/level/src/block_entities/campfire.rs @@ -0,0 +1,24 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Campfire { + /// The item in position 1. + pub item1: Option, + /// The item in position 2. + pub item2: Option, + /// The item in position 3. + pub item3: Option, + /// The item in position 4. + pub item4: Option, + + /// How long item 1 has been cooking. + pub item_time1: i32, + /// How long item 2 has been cooking. + pub item_time2: i32, + /// How long item 3 has been cooking. + pub item_time3: i32, + /// How long item 4 has been cooking. + pub item_time4: i32, +} diff --git a/crates/level/src/block_entities/cauldron.rs b/crates/level/src/block_entities/cauldron.rs new file mode 100644 index 00000000..146f25c8 --- /dev/null +++ b/crates/level/src/block_entities/cauldron.rs @@ -0,0 +1,10 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Cauldron { + pub potion_type: i16, + pub potion_id: i16, + pub items: Vec, +} diff --git a/crates/level/src/block_entities/chest.rs b/crates/level/src/block_entities/chest.rs new file mode 100644 index 00000000..a57ae93f --- /dev/null +++ b/crates/level/src/block_entities/chest.rs @@ -0,0 +1,20 @@ +pub use crate::types::ItemStack; + +// TODO: TEST ITEMS AND PAIRING +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Chest { + pub findable: i32, + #[serde(rename = "forceunpair")] + pub force_unpair: Option, + pub loot_table: Option, + pub loot_table_seed: Option, + #[serde(rename = "pairlead")] + pub pair_lead: Option, + #[serde(rename = "pairx")] + pub pair_x: Option, + #[serde(rename = "pairz")] + pub pair_z: Option, + pub items: Vec, +} diff --git a/crates/level/src/block_entities/chiseled_shelf.rs b/crates/level/src/block_entities/chiseled_shelf.rs new file mode 100644 index 00000000..2b6ba78a --- /dev/null +++ b/crates/level/src/block_entities/chiseled_shelf.rs @@ -0,0 +1,9 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct ChiseledShelf { + pub items: Option>, + pub last_interacted_slot: Option, +} diff --git a/crates/level/src/block_entities/command_block.rs b/crates/level/src/block_entities/command_block.rs new file mode 100644 index 00000000..d1156829 --- /dev/null +++ b/crates/level/src/block_entities/command_block.rs @@ -0,0 +1,38 @@ +use crate::deserialize_bool; + +/// A command block tile entity. +#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct CommandBlock { + #[serde(deserialize_with = "deserialize_bool")] + pub execute_on_first_tick: bool, + #[serde(deserialize_with = "deserialize_bool")] + #[serde(rename = "powered")] + pub powered: bool, + pub success_count: i32, + #[serde(deserialize_with = "deserialize_bool")] + // Yes this really is "Condional" + #[serde(rename = "LPCondionalMode")] + pub conditional_mode: bool, + pub last_execution: i64, + #[serde(rename = "LPCommandMode")] + pub command_mode: i32, + pub command: String, + pub last_output_params: Vec, + #[serde(deserialize_with = "deserialize_bool")] + #[serde(rename = "conditionMet")] + pub condition_met: bool, + #[serde(deserialize_with = "deserialize_bool")] + pub track_output: bool, + #[serde(deserialize_with = "deserialize_bool")] + #[serde(rename = "auto")] + pub auto: bool, + pub last_output: String, + pub version: i32, + pub tick_delay: i32, + pub custom_name: String, + #[serde(deserialize_with = "deserialize_bool")] + #[serde(rename = "LPRedstoneMode")] + pub redstone_mode: bool, +} diff --git a/crates/level/src/block_entities/comparator.rs b/crates/level/src/block_entities/comparator.rs new file mode 100644 index 00000000..c689679d --- /dev/null +++ b/crates/level/src/block_entities/comparator.rs @@ -0,0 +1,8 @@ +/// A redstone comparator. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Comparator { + /// The strength of the signal output of this redstone comparator. + #[serde(rename = "OutputSignal")] + pub output_signal: i32, +} diff --git a/crates/level/src/block_entities/conduit.rs b/crates/level/src/block_entities/conduit.rs new file mode 100644 index 00000000..777cb61e --- /dev/null +++ b/crates/level/src/block_entities/conduit.rs @@ -0,0 +1,11 @@ +/// A conduit tile entity. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Conduit { + /// Whether the conduit is active. + pub active: bool, + /// The unique ID of the hostile mob the conduit is currently attacking. If there is no target, + /// this is set to -1. + pub target: i64, +} diff --git a/crates/level/src/block_entities/copper_golem.rs b/crates/level/src/block_entities/copper_golem.rs new file mode 100644 index 00000000..72408608 --- /dev/null +++ b/crates/level/src/block_entities/copper_golem.rs @@ -0,0 +1,37 @@ +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct CopperGolemActor { + #[serde(rename = "ActorIdentifier")] + pub identifier: String, + #[serde(rename = "SaveData")] + pub save_data: nbtx::Value, // TODO: entity data +} + +#[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(i32)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub enum CopperGolemPose { + Standing = 0, + Sitting = 1, + Running = 2, + Star = 3, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct CopperGolemStatue { + pub actor: CopperGolemActor, + pub pose: CopperGolemPose, +} diff --git a/crates/level/src/block_entities/decorated_pot.rs b/crates/level/src/block_entities/decorated_pot.rs new file mode 100644 index 00000000..5f48617e --- /dev/null +++ b/crates/level/src/block_entities/decorated_pot.rs @@ -0,0 +1,17 @@ +use crate::types::ItemStack; + +// Known sherds are: minecraft:brick, minecraft:guster_pottery_sherd + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct DecoratedPot { + pub loot_table: Option, + pub loot_table_seed: Option, + #[serde(rename = "animation")] + pub animation: i8, + #[serde(rename = "item")] + pub item: ItemStack, + #[serde(rename = "sherds")] + pub sherds: Option>, +} diff --git a/crates/level/src/block_entities/dispenser.rs b/crates/level/src/block_entities/dispenser.rs new file mode 100644 index 00000000..cd353965 --- /dev/null +++ b/crates/level/src/block_entities/dispenser.rs @@ -0,0 +1,10 @@ +use crate::types::ItemSlot; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Dispenser { + pub loot_table: String, + pub items: Vec, + pub loot_table_seed: i32, +} diff --git a/crates/level/src/block_entities/enchantment_table.rs b/crates/level/src/block_entities/enchantment_table.rs new file mode 100644 index 00000000..14d1c0f6 --- /dev/null +++ b/crates/level/src/block_entities/enchantment_table.rs @@ -0,0 +1,13 @@ +/// An enchantment table tile entity. +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct EnchantmentTable { + /// The custom name of this enchantment table. + /// + /// May not exist. + pub custom_name: Option, + /// The clockwise rotation of the book on the enchantment table in radians. + /// + /// Top of the book points west when set to 0. + pub rotation: f32, +} diff --git a/crates/level/src/block_entities/end_gateway.rs b/crates/level/src/block_entities/end_gateway.rs new file mode 100644 index 00000000..f40506cb --- /dev/null +++ b/crates/level/src/block_entities/end_gateway.rs @@ -0,0 +1,11 @@ +use crate::deserialize_bool; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct EndGateway { + pub age: i32, + pub exit_portal: [i32; 3], + #[serde(deserialize_with = "deserialize_bool")] + pub end_gateway_bad_pos_checked: bool, +} diff --git a/crates/level/src/block_entities/flower_pot.rs b/crates/level/src/block_entities/flower_pot.rs new file mode 100644 index 00000000..1f605110 --- /dev/null +++ b/crates/level/src/block_entities/flower_pot.rs @@ -0,0 +1,8 @@ +use crate::subchunk::BlockDef; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct FlowerPot { + pub plant_block: Option, +} diff --git a/crates/level/src/block_entities/furnace.rs b/crates/level/src/block_entities/furnace.rs new file mode 100644 index 00000000..60fe27e3 --- /dev/null +++ b/crates/level/src/block_entities/furnace.rs @@ -0,0 +1,13 @@ +use crate::types::ItemSlot; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Furnace { + pub burn_duration: i16, + pub burn_time: i16, + pub cook_time: i16, + pub items: Vec, + #[serde(rename = "StoredXPInt")] + pub stored_xp: i32, +} diff --git a/crates/level/src/block_entities/hopper.rs b/crates/level/src/block_entities/hopper.rs new file mode 100644 index 00000000..814e8501 --- /dev/null +++ b/crates/level/src/block_entities/hopper.rs @@ -0,0 +1,9 @@ +use crate::types::ItemSlot; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Hopper { + pub items: Vec, + pub transfer_cooldown: i32, +} diff --git a/crates/level/src/block_entities/item_frame.rs b/crates/level/src/block_entities/item_frame.rs new file mode 100644 index 00000000..912e8e2e --- /dev/null +++ b/crates/level/src/block_entities/item_frame.rs @@ -0,0 +1,10 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct ItemFrame { + pub item_rotation: f32, + pub item_drop_chance: f32, + pub item: ItemStack, +} diff --git a/crates/level/src/block_entities/jigsaw_block.rs b/crates/level/src/block_entities/jigsaw_block.rs new file mode 100644 index 00000000..ca8c763b --- /dev/null +++ b/crates/level/src/block_entities/jigsaw_block.rs @@ -0,0 +1,25 @@ +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "snake_case")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub enum JigsawJoint { + Rollable, + Aligned, +} + +/// A jigsaw block tile entity. +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct JigsawBlock { + /// The target name. + pub target: String, + /// The block that this jigsaw block will become. + pub final_state: String, + pub placement_priority: i32, + pub selection_priority: i32, + /// The joint option. See [`JigsawJoint`]. + pub joint: JigsawJoint, + /// The jigsaw block's name. + pub name: String, + /// The target pool to select a structure from. + pub target_pool: String, +} diff --git a/crates/level/src/block_entities/jukebox.rs b/crates/level/src/block_entities/jukebox.rs new file mode 100644 index 00000000..ea3ede83 --- /dev/null +++ b/crates/level/src/block_entities/jukebox.rs @@ -0,0 +1,8 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Jukebox { + pub record_item: Option, +} diff --git a/crates/level/src/block_entities/lectern.rs b/crates/level/src/block_entities/lectern.rs new file mode 100644 index 00000000..55b2535b --- /dev/null +++ b/crates/level/src/block_entities/lectern.rs @@ -0,0 +1,77 @@ +use std::collections::HashMap; + +use crate::{deserialize_bool, types::ItemStack}; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct BookPage { + #[serde(rename = "photoname")] + pub photo_name: String, + pub text: String, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct BookMetadata { + pub author: String, + pub xuid: String, + pub title: String, + pub pages: Vec, + pub generation: i32, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Book { + pub count: i8, + pub name: String, + pub damage: i16, + #[serde(rename = "tag")] + pub meta: BookMetadata, + #[serde(deserialize_with = "deserialize_bool")] + pub was_picked_up: bool, +} + +impl From for ItemStack { + fn from(value: Book) -> Self { + ItemStack { + was_picked_up: value.was_picked_up, + block: None, + can_destroy: None, + can_place_on: None, + count: value.count, + damage: value.damage, + name: value.name, + tag: Some(todo!("implement nbtx::to_value")), + } + } +} + +impl TryFrom for Book { + type Error = (); + + fn try_from(value: ItemStack) -> Result { + todo!() + } +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct LecternBook { + pub total_pages: i32, + pub page: i32, + #[serde(deserialize_with = "deserialize_bool")] + pub has_book: bool, + // pub book: nbtx::Value, + pub book: Book, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Lectern { + #[serde(flatten)] + pub book: Option, +} diff --git a/crates/level/src/block_entities/lodestone.rs b/crates/level/src/block_entities/lodestone.rs new file mode 100644 index 00000000..da528343 --- /dev/null +++ b/crates/level/src/block_entities/lodestone.rs @@ -0,0 +1,8 @@ +/// A lodestone tile entity. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Lodestone { + /// The tracking ID of the lodestone. + #[serde(rename = "trackingHandle")] + pub tracking_handle: Option, +} diff --git a/crates/level/src/block_entities/mob_spawner.rs b/crates/level/src/block_entities/mob_spawner.rs new file mode 100644 index 00000000..381a6e81 --- /dev/null +++ b/crates/level/src/block_entities/mob_spawner.rs @@ -0,0 +1,16 @@ +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct MobSpawner { + pub display_entity_height: f32, + pub display_entity_scale: f32, + pub display_entity_width: f32, + pub spawn_count: i16, + pub max_nearby_entities: i16, + pub spawn_range: i16, + pub max_spawn_delay: i16, + pub entity_identifier: String, + pub min_spawn_delay: i16, + pub delay: i16, + pub required_player_range: i16, +} diff --git a/crates/level/src/block_entities/mod.rs b/crates/level/src/block_entities/mod.rs new file mode 100644 index 00000000..be44a680 --- /dev/null +++ b/crates/level/src/block_entities/mod.rs @@ -0,0 +1,212 @@ +use std::io::{Cursor, Read}; + +macro_rules! to_name { + ($variant:ident $(,)?) => { + stringify!($variant) + }; + + ($variant:ident, $($name:literal)?) => { + $($name)? + }; +} + +macro_rules! pattern_match { + ($name:ident $variant:ident $vtype:ty) => { + $name::$variant(_) + }; + + ($name:ident $variant:ident) => { + $name::$variant + }; +} + +macro_rules! impl_block_data { + ( + $(#[$meta:meta])* + pub enum $name:ident { + $( + $variant:ident $( ($vtype:ty) )? $(renamed $id:literal)? + ),* $(,)? + } + ) => { + pub const VANILLA_IDENTIFIERS: &[&str] = &[ + $(to_name!($variant, $($id)?)),* + ]; + + $(#[$meta])* + pub enum $name { + $( + $(#[serde(rename = $id)])? + $variant $( ($vtype) )?, + )* + } + + impl<'a> From<$name> for &'a str { + fn from(id: $name) -> &'a str { + match id { + $( + pattern_match!($name $variant $($vtype)?) => to_name!($variant, $($id)?), + )* + } + } + } + }; +} + +impl_block_data! { + #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] + #[serde(tag = "id")] + pub enum BlockData { + StructureBlock(StructureBlock), + JigsawBlock(JigsawBlock), + BrushableBlock(BrushableBlock), + Dropper(Dispenser), + DecoratedPot(DecoratedPot), + Barrel(Chest), + TrialSpawner(TrialSpawner), + Dispenser(Dispenser), + Vault(Vault), + PistonArm(PistonArm), + Jukebox(Jukebox), + Hopper(Hopper), + EndGateway(EndGateway), + ItemFrame(ItemFrame), + GlowItemFrame(ItemFrame), + Beacon(Beacon), + SoulCampfire(Campfire), + CalibratedSculkSensor(SculkSensor), + Beehive(Beehive), + Campfire(Campfire), + Bell(Bell), + Lectern(Lectern), + Banner(Banner), + Cauldron(Cauldron), + BrewingStand(BrewingStand), + MobSpawner(MobSpawner), + Bed(Bed), + ChiseledShelf(ChiseledShelf) renamed "ChiseledBookshelf", + Noteblock(Noteblock) renamed "Music", + Comparator(Comparator), + EndPortal, + CommandBlock(CommandBlock), + HangingSign(Sign), + FlowerPot(FlowerPot), + BlastFurnace(Furnace), + CopperGolemStatue(CopperGolemStatue), + Chest(Chest), + Furnace(Furnace), + SculkCatalyst(SculkCatalyst), + SculkSensor(SculkSensor), + Shelf(Shelf), + ShulkerBox(ShulkerBox), + Skull(Skull), + Sign(Sign), + NetherReactor(NetherReactor) + } +} + +#[derive(Debug, Clone, PartialEq, serde::Deserialize, serde::Serialize)] +pub struct BlockEntity { + pub x: i32, + pub y: i32, + pub z: i32, + #[serde(rename = "isMovable")] + pub is_movable: bool, + + #[serde(flatten)] + pub data: BlockData, +} + +impl BlockEntity { + pub fn from_disk(reader: &mut Cursor) -> crate::error::Result + where + Cursor: Read, + { + let entity = nbtx::from_le_bytes(reader)?; + Ok(entity) + } +} + +mod banner; +mod beacon; +mod bed; +mod beehive; +mod bell; +mod brewing_stand; +mod brushable_block; +mod campfire; +mod cauldron; +mod chest; +mod chiseled_shelf; +mod command_block; +mod comparator; +mod conduit; +mod copper_golem; +mod decorated_pot; +mod dispenser; +mod enchantment_table; +mod end_gateway; +mod flower_pot; +mod furnace; +mod hopper; +mod item_frame; +mod jigsaw_block; +mod jukebox; +mod lectern; +mod lodestone; +mod mob_spawner; +mod moving_block; +mod nether_reactor; +mod noteblock; +mod piston_arm; +mod sculk_catalyst; +mod sculk_sensor; +mod shelf; +mod shulker_box; +mod sign; +mod skull; +mod structure_block; +mod trial_spawner; +mod vault; + +pub use banner::*; +pub use beacon::*; +pub use bed::*; +pub use beehive::*; +pub use bell::*; +pub use brewing_stand::*; +pub use brushable_block::*; +pub use campfire::*; +pub use cauldron::*; +pub use chest::*; +pub use chiseled_shelf::*; +pub use command_block::*; +pub use comparator::*; +pub use conduit::*; +pub use copper_golem::*; +pub use decorated_pot::*; +pub use dispenser::*; +pub use enchantment_table::*; +pub use end_gateway::*; +pub use flower_pot::*; +pub use furnace::*; +pub use hopper::*; +pub use item_frame::*; +pub use jigsaw_block::*; +pub use jukebox::*; +pub use lectern::*; +pub use lodestone::*; +pub use mob_spawner::*; +pub use moving_block::*; +pub use nether_reactor::*; +pub use noteblock::*; +pub use piston_arm::*; +pub use sculk_catalyst::*; +pub use sculk_sensor::*; +pub use shelf::*; +pub use shulker_box::*; +pub use sign::*; +pub use skull::*; +pub use structure_block::*; +pub use trial_spawner::*; +pub use vault::*; diff --git a/crates/level/src/block_entities/moving_block.rs b/crates/level/src/block_entities/moving_block.rs new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/crates/level/src/block_entities/moving_block.rs @@ -0,0 +1 @@ + diff --git a/crates/level/src/block_entities/nether_reactor.rs b/crates/level/src/block_entities/nether_reactor.rs new file mode 100644 index 00000000..4ea9e3ad --- /dev/null +++ b/crates/level/src/block_entities/nether_reactor.rs @@ -0,0 +1,16 @@ +use crate::deserialize_bool; + +/// A nether reactor tile entity. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct NetherReactor { + /// Whether the nether reactor has completed its activation phase and has gone dark. + #[serde(deserialize_with = "deserialize_bool")] + pub has_finished: bool, + /// If the reactor has been activated and has turned red. + #[serde(deserialize_with = "deserialize_bool")] + pub is_initialized: bool, + /// Number of ticks the reactor has been active for. It finishes after 900 game ticks. + pub progress: i16, +} diff --git a/crates/level/src/block_entities/noteblock.rs b/crates/level/src/block_entities/noteblock.rs new file mode 100644 index 00000000..6f06ac2d --- /dev/null +++ b/crates/level/src/block_entities/noteblock.rs @@ -0,0 +1,7 @@ +/// A noteblock tile entity. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Noteblock { + /// The pitch of the note block. + pub note: i8, +} diff --git a/crates/level/src/block_entities/piston_arm.rs b/crates/level/src/block_entities/piston_arm.rs new file mode 100644 index 00000000..e8a8da3e --- /dev/null +++ b/crates/level/src/block_entities/piston_arm.rs @@ -0,0 +1,71 @@ +use crate::deserialize_bool; + +#[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + Hash, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(i8)] +pub enum PistonState { + Retracted = 0, + Pushing = 1, + Extended = 2, + Pulling = 3, +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +pub enum PistonProgress { + None, + Half, + Full, +} + +impl serde::Serialize for PistonProgress { + fn serialize(&self, serializer: S) -> Result { + let val = match self { + Self::None => 0.0, + Self::Half => 0.5, + Self::Full => 1.0, + }; + + serializer.serialize_f32(val) + } +} + +impl<'de> serde::Deserialize<'de> for PistonProgress { + fn deserialize>(deserializer: D) -> Result { + let v = f32::deserialize(deserializer)?; + Ok(match v { + 0.0 => Self::None, + 0.5 => Self::Half, + 1.0 => Self::Full, + _ => { + return Err(serde::de::Error::invalid_value( + serde::de::Unexpected::Float(v as f64), + &"floating point `0.0`, `0.5` or `1.0`", + )); + } + }) + } +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct PistonArm { + /// Not sure how this is actually stored. Will need to create a custom type for this for clarity. + pub attached_blocks: Vec, + /// Same for this field. + pub break_blocks: Vec, + pub last_progress: PistonProgress, + pub new_state: PistonState, + pub progress: PistonProgress, + pub state: PistonState, + #[serde(deserialize_with = "deserialize_bool")] + pub sticky: bool, +} diff --git a/crates/level/src/block_entities/sculk_catalyst.rs b/crates/level/src/block_entities/sculk_catalyst.rs new file mode 100644 index 00000000..04b1fb07 --- /dev/null +++ b/crates/level/src/block_entities/sculk_catalyst.rs @@ -0,0 +1,17 @@ +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct SculkCatalystCursor { + pub charge: i16, + pub decay: i16, + pub facing: i16, + pub update: i16, + pub x: i32, + pub y: i32, + pub z: i32, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct SculkCatalyst { + pub cursors: Option>, +} diff --git a/crates/level/src/block_entities/sculk_sensor.rs b/crates/level/src/block_entities/sculk_sensor.rs new file mode 100644 index 00000000..78d2e982 --- /dev/null +++ b/crates/level/src/block_entities/sculk_sensor.rs @@ -0,0 +1,26 @@ +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct SculkSensor { + #[serde(rename = "VibrationListener")] + pub vibration_listener: VibrationListener, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct PendingVibration { + pub distance: f32, + pub source: i64, + pub vibration: i32, + pub x: i32, + pub y: i32, + pub z: i32, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct VibrationListener { + pub event: Option, + pub pending: Option, + pub selector: nbtx::Value, + pub ticks: Option, +} diff --git a/crates/level/src/block_entities/shelf.rs b/crates/level/src/block_entities/shelf.rs new file mode 100644 index 00000000..8c5dcf7f --- /dev/null +++ b/crates/level/src/block_entities/shelf.rs @@ -0,0 +1,8 @@ +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Shelf { + pub items: Option>, +} diff --git a/crates/level/src/block_entities/shulker_box.rs b/crates/level/src/block_entities/shulker_box.rs new file mode 100644 index 00000000..4e1cb4dc --- /dev/null +++ b/crates/level/src/block_entities/shulker_box.rs @@ -0,0 +1,9 @@ +use crate::block_entities::Chest; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct ShulkerBox { + #[serde(flatten)] + pub contents: Chest, + pub facing: f32, +} diff --git a/crates/level/src/block_entities/sign.rs b/crates/level/src/block_entities/sign.rs new file mode 100644 index 00000000..3cab86c6 --- /dev/null +++ b/crates/level/src/block_entities/sign.rs @@ -0,0 +1,27 @@ +use crate::deserialize_bool; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct SignText { + #[serde(deserialize_with = "deserialize_bool")] + pub hide_glow_outline: bool, + #[serde(deserialize_with = "deserialize_bool")] + pub ignore_lighting: bool, + #[serde(deserialize_with = "deserialize_bool")] + pub persist_formatting: bool, + pub sign_text_color: i32, + pub filtered_text: String, + pub text: String, + pub text_owner: String, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Sign { + pub back_text: SignText, + pub front_text: SignText, + #[serde(deserialize_with = "deserialize_bool")] + pub is_waxed: bool, +} diff --git a/crates/level/src/block_entities/skull.rs b/crates/level/src/block_entities/skull.rs new file mode 100644 index 00000000..c3fdf013 --- /dev/null +++ b/crates/level/src/block_entities/skull.rs @@ -0,0 +1,33 @@ +use crate::deserialize_bool; + +#[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + Hash, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(i8)] +pub enum SkullType { + Skeleton, + WitherSkeleton, + Zombie, + Player, + Creeper, + EnderDragon, + Piglin, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Skull { + #[serde(deserialize_with = "deserialize_bool")] + pub doing_animation: bool, + pub mouth_tick_count: i32, + pub rotation: f32, + pub skull_type: i8, // TODO: Use SkullType enum +} diff --git a/crates/level/src/block_entities/structure_block.rs b/crates/level/src/block_entities/structure_block.rs new file mode 100644 index 00000000..f2856a71 --- /dev/null +++ b/crates/level/src/block_entities/structure_block.rs @@ -0,0 +1,63 @@ +use crate::deserialize_bool; + +#[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + Hash, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(i32)] +pub enum StructureBlockMode { + Data = 0, + Save = 1, + Load = 2, + Corner = 3, + Inventory = 4, + Export = 5, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct StructureBlock { + pub redstone_save_mode: i32, + pub structure_name: String, + pub data_field: String, + pub integrity: f32, + #[serde(deserialize_with = "deserialize_bool")] + pub is_powered: bool, + pub seed: i64, + #[serde(deserialize_with = "deserialize_bool")] + pub show_bounding_box: bool, + #[serde(deserialize_with = "deserialize_bool")] + pub include_players: bool, + + #[serde(rename = "lastTouchedPlayerId")] + pub last_touched_player_id: i64, + + #[serde(deserialize_with = "deserialize_bool")] + pub mirror: bool, + #[serde(deserialize_with = "deserialize_bool")] + pub remove_blocks: bool, + #[serde(deserialize_with = "deserialize_bool")] + pub ignore_entities: bool, + + pub rotation: i8, + #[serde(rename = "data")] + pub mode: StructureBlockMode, + + pub animation_seconds: f32, + pub animation_mode: i8, + + pub x_structure_offset: i32, + pub y_structure_offset: i32, + pub z_structure_offset: i32, + + pub x_structure_size: i32, + pub y_structure_size: i32, + pub z_structure_size: i32, +} diff --git a/crates/level/src/block_entities/trial_spawner.rs b/crates/level/src/block_entities/trial_spawner.rs new file mode 100644 index 00000000..64d08129 --- /dev/null +++ b/crates/level/src/block_entities/trial_spawner.rs @@ -0,0 +1,91 @@ +// #[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +// pub struct SpawnPotentialEntity { +// pub id: String, +// } + +// #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +// pub struct SpawnPotentialData { +// pub entity: SpawnPotentialEntity, +// pub equipment: Option, +// } + +// #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +// pub struct SpawnPotential { +// pub weight: i32, +// pub data: SpawnPotentialData, +// } + +// #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +// pub struct EjectableLootTable { +// pub weight: i32, +// /// Path to a loot table. +// pub data: String, +// } + +// #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +// #[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +// pub struct SpawnerConfig { +// pub spawn_range: i32, +// pub total_mobs: f32, +// pub simultaneous_mobs: f32, +// pub total_mobs_added_per_player: f32, +// pub simultaneous_mobs_added_per_player: f32, +// pub ticks_between_spawn: i32, +// pub target_cooldown_length: i32, +// pub spawn_potentials: Vec, +// pub loot_tables_to_eject: Vec, +// /// A path to a loot table. +// pub items_to_drop_when_ominuous: String, +// } + +/// Chances for the equipment to drop upon death. +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct DropChances { + pub head: f32, + pub chest: f32, + pub legs: f32, + pub feet: f32, + pub mainhand: f32, + pub offhand: f32, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Equipment { + pub loot_table: String, + pub slot_drop_chances: Option, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct SpawnData { + pub type_id: String, + pub weight: i32, + #[serde(rename = "equipment")] + pub equipment: Option, +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] +pub struct RegisteredEntity { + pub uuid: i64, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct TrialSpawner { + pub ominous_config: String, + pub spawn_data: SpawnData, + pub total_mobs_spawned: i32, + pub required_player_range: i32, + pub current_mobs: Vec, + pub next_mob_spawns_at: i64, + pub registered_players: Vec, + pub normal_config: String, + pub cooldown_end_at: i64, +} diff --git a/crates/level/src/block_entities/vault.rs b/crates/level/src/block_entities/vault.rs new file mode 100644 index 00000000..dbbd10ca --- /dev/null +++ b/crates/level/src/block_entities/vault.rs @@ -0,0 +1,76 @@ +use crate::deserialize_bool; +use crate::types::ItemStack; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct VaultData { + pub items_to_eject: Vec, + pub rewarded_players: Vec, + pub state_updating_resumes_at: i64, +} + +const TRIAL_KEY_NORMAL: &str = "minecraft:trial_key"; +const TRIAL_KEY_OMINOUS: &str = "minecraft:ominous_trial_key"; + +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub enum VaultKeyType { + Normal, + Ominous, +} + +impl serde::Serialize for VaultKeyType { + fn serialize(&self, serializer: S) -> Result { + let v = match self { + Self::Normal => TRIAL_KEY_NORMAL, + Self::Ominous => TRIAL_KEY_OMINOUS, + }; + + v.serialize(serializer) + } +} + +impl<'de> serde::Deserialize<'de> for VaultKeyType { + fn deserialize>(deserializer: D) -> Result { + let v = String::deserialize(deserializer)?; + + Ok(match v.as_str() { + TRIAL_KEY_NORMAL => Self::Normal, + TRIAL_KEY_OMINOUS => Self::Ominous, + _ => { + return Err(serde::de::Error::invalid_value( + serde::de::Unexpected::Str(&v), + &"string `minecraft:trial_key` or `minecraft:ominous_trial_key`", + )); + } + }) + } +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct VaultKeyItem { + #[serde(rename = "Name")] + pub ty: VaultKeyType, + pub damage: i16, + pub count: i8, + #[serde(deserialize_with = "deserialize_bool")] + pub was_picked_up: bool, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct VaultConfig { + pub loot_table: String, + pub activation_range: f32, + pub key_item: VaultKeyItem, + pub deactivation_range: f32, + pub override_loot_table_to_display: String, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct Vault { + pub data: VaultData, + pub config: VaultConfig, +} diff --git a/crates/level/src/color.rs b/crates/level/src/color.rs new file mode 100644 index 00000000..96cdc983 --- /dev/null +++ b/crates/level/src/color.rs @@ -0,0 +1,29 @@ +#[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + Hash, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(i8)] +pub enum Color { + White = 0, + Orange = 1, + Magenta = 2, + LightBlue = 3, + Yellow = 4, + Lime = 5, + Pink = 6, + Gray = 7, + LightGray = 8, + Cyan = 9, + Purple = 10, + Blue = 11, + Brown = 12, + Green = 13, + Red = 14, + Black = 15, +} diff --git a/crates/level/src/lib.rs b/crates/level/src/lib.rs index 9518761b..8e78dcef 100644 --- a/crates/level/src/lib.rs +++ b/crates/level/src/lib.rs @@ -1,5 +1,7 @@ pub mod biome; pub mod bits; +pub mod block_entities; +pub mod color; pub mod error; pub mod greedy; pub mod key; @@ -46,3 +48,16 @@ impl UnpackingMethod for Lazy { } pub mod prelude {} + +#[inline] +pub(crate) fn deserialize_bool<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + use serde::Deserialize; + + match i8::deserialize(deserializer)? { + 0 => Ok(false), + _ => Ok(true), + } +} diff --git a/crates/level/src/settings.rs b/crates/level/src/settings.rs index 5eb7dd5e..c95dc431 100644 --- a/crates/level/src/settings.rs +++ b/crates/level/src/settings.rs @@ -3,7 +3,7 @@ use byteorder::{LittleEndian, ReadBytesExt}; use std::io::{Read, Write}; #[derive(serde::Deserialize, serde::Serialize, Debug, PartialEq)] -#[serde(deny_unknown_fields)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] pub struct Abilities { #[serde(rename = "attackmobs")] pub attack_mobs: bool, @@ -32,21 +32,21 @@ pub struct Abilities { } #[derive(serde::Deserialize, serde::Serialize, Debug, PartialEq, Eq)] -#[serde(deny_unknown_fields)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] pub struct Experiments { pub experiments_ever_used: bool, pub saved_with_toggled_experiments: bool, } #[derive(serde::Deserialize, serde::Serialize, Debug, PartialEq, Eq)] -#[serde(deny_unknown_fields)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] pub struct Policies { // Not sure what is supposed to be in here } #[derive(serde::Deserialize, serde::Serialize, Debug, PartialEq)] #[serde(rename_all = "camelCase")] -#[serde(deny_unknown_fields)] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] pub struct LevelSettings { #[serde(default)] pub file_version: u32, diff --git a/crates/level/src/subchunk.rs b/crates/level/src/subchunk.rs index 2e4f99fe..e1e31ffb 100644 --- a/crates/level/src/subchunk.rs +++ b/crates/level/src/subchunk.rs @@ -70,6 +70,7 @@ mod block_version { /// Definition of block in the sub chunk block palette. #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] #[serde(rename = "")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] pub struct BlockDef { /// Name of the block. pub name: String, diff --git a/crates/level/src/traits.rs b/crates/level/src/traits.rs index 35d1a72c..ff7c96da 100644 --- a/crates/level/src/traits.rs +++ b/crates/level/src/traits.rs @@ -1,7 +1,23 @@ -use std::ops::Deref; +use std::{ + io::{Cursor, Read}, + ops::Deref, +}; use crate::error::Result; +pub trait CursorExt { + fn has_remaining(&self) -> bool; +} + +impl> CursorExt for Cursor +where + Cursor: Read, +{ + fn has_remaining(&self) -> bool { + self.get_ref().as_ref().len() as u64 != self.position() + } +} + pub trait DatabaseAccess: Sized { type Buffer<'a>: Deref where diff --git a/crates/level/src/types/effect.rs b/crates/level/src/types/effect.rs new file mode 100644 index 00000000..13ee2b74 --- /dev/null +++ b/crates/level/src/types/effect.rs @@ -0,0 +1,53 @@ +#[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(i32)] +pub enum Effect { + None = 0, + Speed = 1, + Slowness = 2, + Haste = 3, + MiningFatigue = 4, + Strength = 5, + InstantHealth = 6, + InstantDamage = 7, + JumpBoost = 8, + Nausea = 9, + Regeneration = 10, + Resistance = 11, + FireResistance = 12, + WaterBreathing = 13, + Invisibility = 14, + Blindness = 15, + NightVision = 16, + Hunger = 17, + Weakness = 18, + Poison = 19, + Wither = 20, + HealthBoost = 21, + Absorption = 22, + Saturation = 23, + Levitation = 24, + FatalPoison = 25, + SlowFalling = 26, + ConduitPower = 27, + BadOmen = 28, + HeroOfTheVillage = 29, + Darkness = 30, + TrialOmen = 31, + RaidOmen = 32, + WindCharged = 33, + Weaving = 34, + Oozing = 35, + Infested = 36, + BreathOfTheNautilus = 37, +} diff --git a/crates/level/src/types/item.rs b/crates/level/src/types/item.rs new file mode 100644 index 00000000..14096431 --- /dev/null +++ b/crates/level/src/types/item.rs @@ -0,0 +1,27 @@ +use crate::deserialize_bool; +use crate::subchunk::BlockDef; + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct ItemStack { + pub block: Option, + pub can_destroy: Option>, + pub can_place_on: Option>, + pub count: i8, + pub damage: i16, + pub name: String, + #[serde(rename = "tag")] + pub tag: Option, + #[serde(deserialize_with = "deserialize_bool")] + pub was_picked_up: bool, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "PascalCase")] +#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))] +pub struct ItemSlot { + pub slot: i8, + #[serde(flatten)] + pub stack: ItemStack, +} diff --git a/crates/level/src/types/mod.rs b/crates/level/src/types/mod.rs new file mode 100644 index 00000000..c455159f --- /dev/null +++ b/crates/level/src/types/mod.rs @@ -0,0 +1,7 @@ +mod effect; +mod item; +mod position; + +pub use effect::*; +pub use item::*; +pub use position::*; diff --git a/crates/level/src/types.rs b/crates/level/src/types/position.rs similarity index 100% rename from crates/level/src/types.rs rename to crates/level/src/types/position.rs diff --git a/crates/level/tests/level.tar.gz b/crates/level/tests/level.tar.gz index 9931eec9..2b9f347c 100644 Binary files a/crates/level/tests/level.tar.gz and b/crates/level/tests/level.tar.gz differ diff --git a/crates/level/tests/test.rs b/crates/level/tests/test.rs index 36ce95a0..5f435c73 100644 --- a/crates/level/tests/test.rs +++ b/crates/level/tests/test.rs @@ -31,7 +31,7 @@ fn extract_test_dir() -> tempfile::TempDir { fn open_test_db() -> Database { let tmp = extract_test_dir(); - let db_path = tmp.path().join("test_level/db"); + let db_path = tmp.path().join("debug/db"); Database::open(db_path.to_str().unwrap()).unwrap() } @@ -40,7 +40,7 @@ fn open_test_db() -> Database { #[ignore = "currently not properly implemented"] fn read_level_dat() { let tmp = extract_test_dir(); - let dat_path = tmp.path().join("test_level/level.dat"); + let dat_path = tmp.path().join("debug/level.dat"); let data = std::fs::read(&dat_path).unwrap(); let settings = LevelSettings::read(data.as_slice()).unwrap(); @@ -67,6 +67,50 @@ fn read_local_player() { } } +#[test] +fn read_block_entity() { + let db = open_test_db(); + let mut keys = db.keys(); + println!("keys count: {}", keys.count()); + drop(keys); + + let mut keys = db.keys(); + + for kv in &mut keys { + let mut key_buf = Cursor::new(kv.key()); + // println!("key_buf: {key_buf:?}"); + + let Ok(key) = Key::deserialize(&mut key_buf) else { + println!("failed: {:?}", String::from_utf8_lossy(key_buf.get_ref())); + continue; + }; + + println!("key: {key:?}"); + + match key.data { + KeyVariant::BlockEntity => { + let mut untyped_value = Cursor::new(kv.value()); + let mut typed_value = Cursor::new(kv.value()); + + while untyped_value.has_remaining() { + let untyped: nbtx::Value = nbtx::from_le_bytes(&mut untyped_value).unwrap(); + + match BlockEntity::from_disk(&mut typed_value) { + Ok(typed) => { + println!("{typed:?}"); + } + Err(err) => { + dbg!(untyped); + panic!("{err:?}"); + } + } + } + } + _ => {} + } + } +} + #[test] fn read_biome() { let db = open_test_db();