From b6ba064339eea1bd6380b8a34868dd8c96c1f966 Mon Sep 17 00:00:00 2001 From: Emil Date: Mon, 14 Sep 2026 17:35:17 +0300 Subject: [PATCH] Complete local voxel MVP with server, client, MCP, packages and world interchange --- .github/workflows/ci.yml | 17 +- .gitignore | 2 + Cargo.lock | 1724 +- Cargo.toml | 2 +- README.md | 66 +- client/app.js | 1151 + client/index.html | 165 + client/math.js | 172 + client/package.json | 1 + client/renderer.js | 569 + client/style.css | 597 + client/tests/math.test.js | 72 + client/tests/renderer-smoke.html | 64 + crates/shacraft-compat/Cargo.toml | 22 + .../java26_2-world/custom-metadata.txt | 1 + .../data/minecraft/game_rules.dat | Bin 0 -> 821 bytes .../data/minecraft/world_gen_settings.dat | Bin 0 -> 301 bytes .../java26_2-world/entities/r.-1.0.mca | Bin 0 -> 12288 bytes .../fixtures/java26_2-world/level.dat | Bin 0 -> 309 bytes .../fixtures/java26_2-world/region/r.-1.0.mca | Bin 0 -> 12288 bytes .../shacraft-compat/fixtures/provenance.json | 55 + .../shacraft-compat/fixtures/sponge-v3.schem | Bin 0 -> 648 bytes .../data/minecraft/game_rules.dat | Bin 0 -> 821 bytes .../data/minecraft/world_gen_settings.dat | Bin 0 -> 301 bytes .../fixtures/world-template/level.dat | Bin 0 -> 312 bytes crates/shacraft-compat/src/anvil.rs | 1033 + crates/shacraft-compat/src/entities.rs | 677 + crates/shacraft-compat/src/io.rs | 306 + crates/shacraft-compat/src/lib.rs | 119 + crates/shacraft-compat/src/main.rs | 97 + crates/shacraft-compat/src/nbt.rs | 335 + crates/shacraft-compat/src/schem.rs | 469 + crates/shacraft-compat/tests/roundtrip.rs | 436 + crates/shacraft-content/Cargo.toml | 15 + crates/shacraft-content/data/catalog.json.gz | Bin 0 -> 251094 bytes crates/shacraft-content/data/provenance.json | 50 + .../data/report-identities.json.gz | Bin 0 -> 209000 bytes .../examples/catalog_report.rs | 16 + crates/shacraft-content/src/lib.rs | 565 + crates/shacraft-content/src/packages.rs | 365 + crates/shacraft-content/src/shapes.rs | 828 + crates/shacraft-core/src/store.rs | 39 + crates/shacraft-core/tests/section_pages.rs | 74 + crates/shacraft-mcp/Cargo.toml | 11 + crates/shacraft-mcp/src/main.rs | 749 + crates/shacraft-mcp/tests/sdk-smoke.mjs | 214 + crates/shacraft-server/Cargo.toml | 27 + crates/shacraft-server/src/control.rs | 499 + crates/shacraft-server/src/game.rs | 1159 + crates/shacraft-server/src/main.rs | 342 + crates/shacraft-server/src/packages.rs | 413 + crates/shacraft-server/src/render.rs | 100 + crates/shacraft-server/src/tests.rs | 554 + docs/ACCEPTANCE.md | 2 +- docs/CLIENT.md | 33 + docs/COMPATIBILITY.md | 106 +- docs/CONTENT.md | 91 + docs/CONTRACT.md | 9 + docs/MCP.md | 77 + docs/PACKAGES.md | 43 + docs/PLAN.md | 2 +- docs/SERVER.md | 80 + docs/STATUS.md | 60 +- docs/VERIFICATION.md | 72 +- docs/interop.md | 88 + docs/verification/browser.md | 14 + .../verification/catalog-reproducibility.json | 8 + docs/verification/environment.json | 11 + docs/verification/interop.json | 146 + docs/verification/mcp-sdk.json | 19 + docs/verification/mvp-checks.txt | 402 + docs/verification/server-benchmark.json | 41161 ++++++++++++++++ docs/verification/server-e2e.json | 119 + packages/base/client/style.json | 7 + packages/base/client/texture.png | Bin 0 -> 3939 bytes packages/base/common/definitions.json | 7 + packages/base/manifest.json | 36 + packages/trampoline/client/bounce.wav | Bin 0 -> 7982 bytes packages/trampoline/client/style.json | 13 + packages/trampoline/client/texture.png | Bin 0 -> 123 bytes packages/trampoline/client/tint.glsl | 4 + packages/trampoline/common/definitions.json | 42 + packages/trampoline/manifest.json | 71 + packages/trampoline/server/trampoline.wasm | Bin 0 -> 43 bytes packages/trampoline/server/trampoline.wat | 2 + scripts/benchmark_server.mjs | 206 + scripts/catalog_assets.py | 45 + scripts/catalog_extract.java | 85 + scripts/catalog_generate.py | 96 + scripts/check_mcp.mjs | 54 + scripts/check_server.mjs | 305 + scripts/compat_fixtures.py | 51 + scripts/compat_java.java | 136 + scripts/compat_verify.py | 94 + scripts/make_release.py | 66 + scripts/run.sh | 8 + scripts/server-harness.mjs | 261 + scripts/verify.sh | 6 +- 98 files changed, 58116 insertions(+), 194 deletions(-) create mode 100644 client/app.js create mode 100644 client/index.html create mode 100644 client/math.js create mode 100644 client/package.json create mode 100644 client/renderer.js create mode 100644 client/style.css create mode 100644 client/tests/math.test.js create mode 100644 client/tests/renderer-smoke.html create mode 100644 crates/shacraft-compat/Cargo.toml create mode 100644 crates/shacraft-compat/fixtures/java26_2-world/custom-metadata.txt create mode 100644 crates/shacraft-compat/fixtures/java26_2-world/data/minecraft/game_rules.dat create mode 100644 crates/shacraft-compat/fixtures/java26_2-world/data/minecraft/world_gen_settings.dat create mode 100644 crates/shacraft-compat/fixtures/java26_2-world/entities/r.-1.0.mca create mode 100644 crates/shacraft-compat/fixtures/java26_2-world/level.dat create mode 100644 crates/shacraft-compat/fixtures/java26_2-world/region/r.-1.0.mca create mode 100644 crates/shacraft-compat/fixtures/provenance.json create mode 100644 crates/shacraft-compat/fixtures/sponge-v3.schem create mode 100644 crates/shacraft-compat/fixtures/world-template/data/minecraft/game_rules.dat create mode 100644 crates/shacraft-compat/fixtures/world-template/data/minecraft/world_gen_settings.dat create mode 100644 crates/shacraft-compat/fixtures/world-template/level.dat create mode 100644 crates/shacraft-compat/src/anvil.rs create mode 100644 crates/shacraft-compat/src/entities.rs create mode 100644 crates/shacraft-compat/src/io.rs create mode 100644 crates/shacraft-compat/src/lib.rs create mode 100644 crates/shacraft-compat/src/main.rs create mode 100644 crates/shacraft-compat/src/nbt.rs create mode 100644 crates/shacraft-compat/src/schem.rs create mode 100644 crates/shacraft-compat/tests/roundtrip.rs create mode 100644 crates/shacraft-content/Cargo.toml create mode 100644 crates/shacraft-content/data/catalog.json.gz create mode 100644 crates/shacraft-content/data/provenance.json create mode 100644 crates/shacraft-content/data/report-identities.json.gz create mode 100644 crates/shacraft-content/examples/catalog_report.rs create mode 100644 crates/shacraft-content/src/lib.rs create mode 100644 crates/shacraft-content/src/packages.rs create mode 100644 crates/shacraft-content/src/shapes.rs create mode 100644 crates/shacraft-core/tests/section_pages.rs create mode 100644 crates/shacraft-mcp/Cargo.toml create mode 100644 crates/shacraft-mcp/src/main.rs create mode 100644 crates/shacraft-mcp/tests/sdk-smoke.mjs create mode 100644 crates/shacraft-server/Cargo.toml create mode 100644 crates/shacraft-server/src/control.rs create mode 100644 crates/shacraft-server/src/game.rs create mode 100644 crates/shacraft-server/src/main.rs create mode 100644 crates/shacraft-server/src/packages.rs create mode 100644 crates/shacraft-server/src/render.rs create mode 100644 crates/shacraft-server/src/tests.rs create mode 100644 docs/CLIENT.md create mode 100644 docs/CONTENT.md create mode 100644 docs/MCP.md create mode 100644 docs/PACKAGES.md create mode 100644 docs/SERVER.md create mode 100644 docs/interop.md create mode 100644 docs/verification/browser.md create mode 100644 docs/verification/catalog-reproducibility.json create mode 100644 docs/verification/environment.json create mode 100644 docs/verification/interop.json create mode 100644 docs/verification/mcp-sdk.json create mode 100644 docs/verification/mvp-checks.txt create mode 100644 docs/verification/server-benchmark.json create mode 100644 docs/verification/server-e2e.json create mode 100644 packages/base/client/style.json create mode 100644 packages/base/client/texture.png create mode 100644 packages/base/common/definitions.json create mode 100644 packages/base/manifest.json create mode 100644 packages/trampoline/client/bounce.wav create mode 100644 packages/trampoline/client/style.json create mode 100644 packages/trampoline/client/texture.png create mode 100644 packages/trampoline/client/tint.glsl create mode 100644 packages/trampoline/common/definitions.json create mode 100644 packages/trampoline/manifest.json create mode 100644 packages/trampoline/server/trampoline.wasm create mode 100644 packages/trampoline/server/trampoline.wat create mode 100644 scripts/benchmark_server.mjs create mode 100644 scripts/catalog_assets.py create mode 100644 scripts/catalog_extract.java create mode 100644 scripts/catalog_generate.py create mode 100644 scripts/check_mcp.mjs create mode 100644 scripts/check_server.mjs create mode 100644 scripts/compat_fixtures.py create mode 100644 scripts/compat_java.java create mode 100644 scripts/compat_verify.py create mode 100755 scripts/make_release.py create mode 100755 scripts/run.sh create mode 100644 scripts/server-harness.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 118f712..4371734 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,27 @@ -name: Core checks +name: MVP checks on: push: pull_request: permissions: contents: read jobs: - storage: + mvp: runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: toolchain: 1.96.0 components: rustfmt, clippy - - name: Verify storage and crash recovery + - uses: actions/setup-node@v4 + with: + node-version: 22 + - name: Verify core, server, client and crash recovery run: bash scripts/verify.sh - + - name: Install independent MCP test client + run: npm install --prefix artifacts/mcp-sdk --no-package-lock @modelcontextprotocol/sdk@1.30.0 + - name: Verify real stdio MCP interoperability + env: + SHACRAFT_MCP_SDK: ${{ github.workspace }}/artifacts/mcp-sdk/node_modules/@modelcontextprotocol/sdk + run: node scripts/check_mcp.mjs --binary target/debug/shacraft-server --output artifacts/mcp-sdk.json diff --git a/.gitignore b/.gitignore index 6598225..f778840 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ __pycache__/ *.pyc /graphify-out/ + +/logs/ diff --git a/Cargo.lock b/Cargo.lock index d65e3c5..099bc83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "anstream" version = "1.0.0" @@ -38,7 +44,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -49,7 +55,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -58,6 +64,79 @@ version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "axum" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" +dependencies = [ + "axum-core", + "base64", + "bytes", + "form_urlencoded", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.13.2" @@ -79,6 +158,12 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + [[package]] name = "cc" version = "1.4.6" @@ -89,12 +174,35 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core 0.10.1", +] + [[package]] name = "clap" version = "4.6.6" @@ -126,7 +234,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -150,6 +258,24 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -160,6 +286,12 @@ dependencies = [ "typenum", ] +[[package]] +name = "data-encoding" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" + [[package]] name = "digest" version = "0.10.7" @@ -170,6 +302,23 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "errno" version = "0.3.14" @@ -177,7 +326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -198,18 +347,53 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + [[package]] name = "find-msvc-tools" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", + "zlib-rs", +] + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + [[package]] name = "fs2" version = "0.4.3" @@ -220,6 +404,67 @@ dependencies = [ "winapi", ] +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -230,6 +475,31 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + [[package]] name = "getrandom" version = "0.4.3" @@ -237,8 +507,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", - "r-efi", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", ] [[package]] @@ -247,7 +529,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ - "foldhash", + "foldhash 0.2.0", ] [[package]] @@ -256,7 +538,7 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ - "foldhash", + "foldhash 0.2.0", ] [[package]] @@ -274,6 +556,237 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", +] + +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -293,15 +806,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", + "futures-util", "wasm-bindgen", ] +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libsqlite3-sys" version = "0.38.2" @@ -319,12 +845,101 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "lru-slab" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" + +[[package]] +name = "lz4_flex" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "memchr" version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -337,12 +952,78 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + [[package]] name = "pkg-config" version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.107" @@ -352,6 +1033,62 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quinn" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand 0.10.2", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + [[package]] name = "quote" version = "1.0.47" @@ -361,12 +1098,136 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "r-efi" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rsqlite-vfs" version = "0.1.1" @@ -383,7 +1244,7 @@ version = "0.40.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23f2a97da3e3873c73cb2a2e71b35c40ff95e0b1eefa8d72d8499a6928c3b5b3" dependencies = [ - "bitflags", + "bitflags 2.13.2", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -392,17 +1253,58 @@ dependencies = [ "sqlite-wasm-rs", ] +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6725596c3f2c3a0aef021139e145d4eafe314a6623e4680ca83852b2c67ab2ba" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -411,6 +1313,18 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "serde" version = "1.0.229" @@ -438,7 +1352,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -454,6 +1368,40 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest", +] + [[package]] name = "sha2" version = "0.10.9" @@ -461,10 +1409,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] +[[package]] +name = "shacraft-compat" +version = "0.1.0" +dependencies = [ + "anyhow", + "cesu8", + "clap", + "flate2", + "lz4_flex", + "rusqlite", + "rustix", + "serde", + "serde_json", + "sha2", + "shacraft-core", + "tempfile", + "xxhash-rust", +] + +[[package]] +name = "shacraft-content" +version = "0.1.0" +dependencies = [ + "anyhow", + "flate2", + "serde", + "serde_json", + "sha2", + "tempfile", +] + [[package]] name = "shacraft-core" version = "0.1.0" @@ -478,6 +1457,40 @@ dependencies = [ "tempfile", ] +[[package]] +name = "shacraft-mcp" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "reqwest", + "serde_json", +] + +[[package]] +name = "shacraft-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "base64", + "clap", + "futures-util", + "png", + "rusqlite", + "serde", + "serde_json", + "sha2", + "shacraft-content", + "shacraft-core", + "tempfile", + "tokio", + "tower", + "tower-http", + "uuid", + "wasmi", +] + [[package]] name = "shacraft-tools" version = "0.1.0" @@ -495,12 +1508,50 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + [[package]] name = "smallvec" version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "spin" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" + [[package]] name = "sqlite-wasm-rs" version = "0.5.5" @@ -513,12 +1564,45 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string-interner" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23de088478b31c349c9ba67816fa55d9355232d63c3afea8bf513e31f0f1d2c0" +dependencies = [ + "hashbrown 0.15.5", + "serde", +] + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "3.0.5" @@ -530,6 +1614,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -537,10 +1641,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -560,27 +1664,259 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.2", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower", + "tower-layer", + "tower-service", + "tracing", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.9.5", + "sha1", + "thiserror", +] + +[[package]] +name = "twox-hash" +version = "2.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5283634e518fe9e82c7b20520bb4bc209009fd16c82077c802f8111ecbb0117a" + [[package]] name = "typenum" version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -593,6 +1929,30 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.128" @@ -606,6 +1966,16 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.128" @@ -625,7 +1995,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.5", "wasm-bindgen-shared", ] @@ -638,6 +2008,128 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.259.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d0246511d901aacf25d2dc9111f0054947de5e093fe662099e709ff7530dc3" +dependencies = [ + "leb128fmt", + "wasmparser 0.259.0", +] + +[[package]] +name = "wasmi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78693fcdd618e0fc34af59c6b8efa9ac5d58c68df940beff4bedddb6acfe7c27" +dependencies = [ + "spin", + "wasmi_collections", + "wasmi_core", + "wasmi_ir", + "wasmparser 0.228.0", + "wat", +] + +[[package]] +name = "wasmi_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a8be2aa467cf2d29e96ff759472c36eeb44a3c81c67fc9cb76c9a24c519c557" +dependencies = [ + "string-interner", +] + +[[package]] +name = "wasmi_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69372d5fda3ea3d1e0aa6603c7888110e0187e88ea17cd8fc2e2df0a0e1f37fa" +dependencies = [ + "libm", +] + +[[package]] +name = "wasmi_ir" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f17b774caa13c618c7244f1ee51fe23c5e7b8538a471fa46d9949779758aed6" +dependencies = [ + "wasmi_core", +] + +[[package]] +name = "wasmparser" +version = "0.228.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4abf1132c1fdf747d56bbc1bb52152400c70f336870f968b85e89ea422198ae3" +dependencies = [ + "bitflags 2.13.2", + "indexmap", +] + +[[package]] +name = "wasmparser" +version = "0.259.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f7c12eac7bb587801590f6a67ff0bc84d0748513864b71108e4b311cc3df694" +dependencies = [ + "bitflags 2.13.2", + "indexmap", +] + +[[package]] +name = "wast" +version = "259.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c69beba8d9da07af9a0971b559149a2ac4729895b55144de4fddbf5a02660648" +dependencies = [ + "bumpalo", + "leb128fmt", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.259.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6eec44b0c80391b20fb7ad9ea440c72c5d382385bdf74444bb18321c425017e" +dependencies = [ + "wast", +] + +[[package]] +name = "web-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -666,6 +2158,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -675,6 +2176,197 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "xxhash-rust" +version = "0.8.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aee1b19627c7c60102ab80d3a9cbe18de90bfe03bfa6c3715447681f0e8c8af6" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + [[package]] name = "zmij" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index c7ec1a4..c097e8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = ["crates/shacraft-core", "crates/shacraft-tools"] +members = ["crates/shacraft-core", "crates/shacraft-tools", "crates/shacraft-server", "crates/shacraft-mcp", "crates/shacraft-content", "crates/shacraft-compat"] [workspace.package] version = "0.1.0" diff --git a/README.md b/README.md index c79efb4..eda4069 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,60 @@ # Shacraft Core -Самостоятельный открытый воксельный движок на Rust. Главный приоритет — низкое и предсказуемое потребление **серверной оперативной памяти**. Сервер Shacraft служит первым практическим применением; ядро не привязано к его мирам, аккаунтам и минииграм. +Самостоятельный открытый воксельный движок на Rust и работающий локальный MVP: сервер с несколькими мирами, собственный WebGL2-клиент, Spleef, отдельный MCP, каталог Java 26.2, пакеты расширений и конвертер миров. Приоритет — измеренное потребление **серверной RAM**. -Проект начинается заново локально: исходники из зависшей облачной среды не восстановлены. Сведения о ранее выполненных сборках и тестах не являются результатами этого репозитория. +## Запустить -## Текущий результат: этап 1 — хранилище - -Реализованы самостоятельная Rust-библиотека и локальный CLI: компактные секции, ограниченный кэш, сохранение, неизменяемые снимки, независимые экземпляры миров, атомарные правки, ревизии, идемпотентность, undo/reset и диагностика. Это основа движка; игровой сервер, графический клиент, MCP, каталог Minecraft и конвертер ещё предстоят. +Требуются Rust 1.96+, C-компилятор для SQLite и браузер с WebGL2. Java и Node для игры не нужны. Первый запуск скачает Cargo-зависимости и соберёт release; следующие используют готовый бинарный файл. ```bash -cd /home/emil/Desktop/shacraft-core -bash scripts/verify.sh -cargo run -p shacraft-tools -- --data data/demo demo +bash scripts/run.sh --data data --listen 127.0.0.1:4000 ``` -Для повторной демонстрации укажите новый пустой каталог. [Команды, измерение и JSON-lines API](docs/DEVELOPMENT.md). JSON-lines API предназначен для локальной проверки хранилища и не является MCP. +Открыть **http://127.0.0.1:4000**. WASD — движение, пробел — прыжок, мышь — обзор, ЛКМ/ПКМ — убрать/поставить блок, E — библиотека, T — чат, F3 — диагностика. Если браузер не даёт захват мыши, обзор работает перетаскиванием. Мир выбирается слева сверху. Для Spleef два игрока входят в одну арену и запускают матч через меню. Лобби, галерея всех типов блоков и две арены создаются автоматически. -Код доступен под MIT или Apache-2.0 на выбор. Оригинальные ресурсы Minecraft в проект не входят. +Вся работа хранится в `--data`. Для остановки используйте Ctrl+C. Подтверждённые правки сохраняются до ответа сервера; проверены аварийные остановки и восстановление. -## Контекст и порядок чтения +## Что входит -1. [Требования](docs/REQUIREMENTS.md) — что запросил пользователь. -2. [План](docs/PLAN.md) — этапы и условия перехода. -3. [Решения](docs/DECISIONS.md) — принятые решения и их границы. -4. [Интерфейсы](docs/CONTRACT.md) — рабочие контракты компонентов. -5. [Текущее состояние](docs/STATUS.md) — проверенные результаты и ближайшая работа. -6. [Память и хранение](docs/MEMORY_AND_STORAGE.md), [совместимость](docs/COMPATIBILITY.md), [приёмка](docs/ACCEPTANCE.md). +- `shacraft-core`: компактные секции 16³, общий ограниченный кэш, SQLite/WAL/FULL, неизменяемые снимки, независимые изменения миров, ревизии, идемпотентные правки, undo/reset. Без графики и сети. +- `shacraft-server`: авторитетные движение, формы столкновений и взаимодействия, WebSocket/HTTP, сохраняемые сущности и настройки, законченный цикл Spleef. +- `client/`: собственный рендерер, библиотека материалов, игроки и сущности, чат, переключение миров, переподключение, загрузка и проверка пакетов. +- `shacraft-mcp`: настоящий отдельный stdio MCP с 17 инструментами, ресурсами и prompt; строительство по плану, чтение, отмена, сущности, арены, метрики и PNG результата. +- `shacraft-content`: **1 196 блоков, 32 366 состояний, 158 типов сущностей Java 26.2**, DataVersion 4903. Официальные идентификаторы и измеренные коллизии, авторские модели. Плюс блок trampoline. +- `shacraft-compat`: Anvil и Sponge `.schem` v3 в обе стороны, типизированный NBT, сохранение оригинала, отчёты о преобразованиях и перенос правок сущностей. +- `packages/`: собственные текстуры, звук, шейдер и исполняемый WASM-модуль прыжка с ограничениями памяти и fuel. -Работа ведётся локально в `/home/emil/Desktop/shacraft-core`. Продакшен-серверы и существующие проекты лаунчера не изменяются автоматически. +Ванильные AI, redstone, инвентари и симуляция жидкостей не входят в этот MVP. Контекстные формы отмечены отдельно. Конвертер после правок использует явный `best-effort`; неизменённый оригинал может вернуть побайтно. Это не обещание полной совместимости с механиками Minecraft или модами NeoForge. Оригинальные ресурсы и код Minecraft не распространяются. + +## MCP и конвертация + +```bash +cargo build --release --locked --workspace +# В конфигурации MCP-клиента запускается этот процесс: +target/release/shacraft-mcp --server http://127.0.0.1:4000 --data data + +# Импорт в новый каталог, затем запуск сервера с --data data/imported: +target/release/shacraft-compat import-anvil /path/to/java-world data/imported +# Экспорт выполняется при остановленном сервере, в отсутствующий каталог: +target/release/shacraft-compat export-anvil data/imported artifacts/java-export --mode best-effort +``` + +Токен Control API создаётся в `data/control.token` (0600 на Unix) и не передаётся браузеру. [MCP](docs/MCP.md), [форматы и команды конвертера](docs/interop.md), [сервер и протокол](docs/SERVER.md), [расширение пакетами](docs/PACKAGES.md). + +## Проверить + +```bash +# Rust, Clippy, аварийное восстановление, JS и реальные HTTP/WebSocket-клиенты: +bash scripts/verify.sh +# Release-стенд с заранее заданными бюджетами: +cargo build --release --workspace --locked +node scripts/benchmark_server.mjs --output artifacts/server-benchmark.json +``` + +Node 22+ нужен для сетевых/JS-проверок, Python 3 — для проверки аварийного хранения. Настоящий MCP SDK и независимая Java/NBT-проверка описаны в [VERIFICATION](docs/VERIFICATION.md). Проверенные числа и ограничения находятся там; сравнение с Paper не заявляется без сопоставимого стенда. + +## Контекст + +[Требования](docs/REQUIREMENTS.md) · [исходный план](docs/PLAN.md) · [решения](docs/DECISIONS.md) · [контракты ядра](docs/CONTRACT.md) · [состояние и ограничения](docs/STATUS.md) · [контент](docs/CONTENT.md). + +Проект заново реализован локально после зависания прежней среды. План сохранён до кода отдельным коммитом. Лицензия кода и собственных ресурсов — **MIT или Apache-2.0** на выбор. Существующий лаунчер и продакшен-серверы не изменяются этой поставкой. diff --git a/client/app.js b/client/app.js new file mode 100644 index 0000000..cc9ffde --- /dev/null +++ b/client/app.js @@ -0,0 +1,1151 @@ +import { Renderer } from "./renderer.js"; +import { + clamp, + key, + direction, + normalizeBoxes, + raycast, + unitBox, +} from "./math.js"; +const $ = (id) => document.getElementById(id), + canvas = $("world-canvas"); +const state = { + ws: null, + id: null, + world: "lobby", + revision: null, + blocks: new Map(), + materials: new Map(), + registry: [], + players: new Map(), + entities: [], + entityDefs: new Map(), + position: [0, 2, 8], + target: [0, 2, 8], + yaw: 0, + pitch: -0.14, + connected: false, + manifest: null, + retry: 0, + seq: 0, + tick: 0, + ack: 0, + ping: 0, + frames: 0, + fps: 0, + hotbar: [], + slot: 0, + selection: null, + packFiles: 0, + packBytes: 0, + packCached: 0, + resync: false, + viewCenter: null, + metrics: null, + name: + localStorage.getItem("shacraft:name") || + `Игрок_${Math.floor(100 + Math.random() * 900)}`, +}; +let audioContext = null, + bounceSound = null, + bounceBuffer = null, + bounceDecode = null; +const packageStyles = new Map(); +function unlockAudio() { + try { + audioContext ??= new AudioContext(); + audioContext.resume().catch(() => {}); + if (bounceSound && !bounceDecode) + bounceDecode = audioContext + .decodeAudioData(bounceSound.slice(0)) + .then((buffer) => (bounceBuffer = buffer)) + .catch(() => {}); + } catch {} +} +function bounceFeedback() { + renderer.bounceAt = performance.now(); + if (audioContext && bounceBuffer) { + const source = audioContext.createBufferSource(), + gain = audioContext.createGain(); + source.buffer = bounceBuffer; + gain.gain.value = 0.16; + source.connect(gain).connect(audioContext.destination); + source.start(); + } +} +let pointerFallback = false; +let renderer, + wsGeneration = 0, + retryTimer, + toastTimer, + catalogTimer, + lastFrame = performance.now(), + fpsTime = lastFrame, + catalogOffset = 0, + catalogTotal = 0, + catalogQuery = "", + catalogGeneration = 0, + catalogBusy = false, + held = new Set(), + drag = null, + lastAction = 0, + lastInput = 0, + lastSelection = "", + packageCache = null; +const niceName = (s) => + (s || "") + .replace(/^minecraft:/, "") + .replace(/\[.*$/, "") + .replaceAll("_", " "); +const baseName = (s) => (s || "").replace(/\[.*$/, ""); +const bytes = (n) => + Number.isFinite(n) + ? n >= 1048576 + ? `${(n / 1048576).toFixed(1)} МиБ` + : n >= 1024 + ? `${(n / 1024).toFixed(1)} КиБ` + : `${n} Б` + : "—"; +const isUIOpen = () => + ["menu", "worlds", "library", "diagnostics"].some((id) => !$(id).hidden) || + !$("chat-form").hidden; +function toast(message, error = false, duration = 4300) { + $("toast").textContent = message; + $("toast").classList.toggle("error", error); + $("toast").hidden = false; + clearTimeout(toastTimer); + toastTimer = setTimeout(() => ($("toast").hidden = true), duration); +} +function connection(label, bad = false) { + $("connection").textContent = label; + $("connection").classList.toggle("bad", bad); +} +function chat(name, text, system = false) { + const row = document.createElement("div"); + row.textContent = name ? `${name}: ${text}` : text; + if (system) row.className = "system"; + $("chat-log").append(row); + while ($("chat-log").children.length > 6) $("chat-log").firstChild.remove(); +} +function send(message) { + if (state.ws?.readyState === WebSocket.OPEN) { + state.ws.send(JSON.stringify(message)); + return true; + } + return false; +} +function controlsZero() { + held.clear(); + if (state.connected) + send({ + type: "input", + seq: ++state.seq, + yaw: state.yaw, + pitch: state.pitch, + forward: 0, + strafe: 0, + jump: false, + }); +} +function closePanels() { + for (const id of ["menu", "worlds", "library", "diagnostics"]) + $(id).hidden = true; +} +function panel(id) { + const wasOpen = !$(id).hidden; + closePanels(); + document.exitPointerLock?.(); + controlsZero(); + $(id).hidden = wasOpen; + if (!wasOpen && id === "library") { + loadCatalog(true); + $("catalog-search").focus(); + } + if (!wasOpen && id === "worlds") loadWorlds(); + if (!wasOpen && id === "diagnostics") fetchMetrics(); +} +function release() { + document.exitPointerLock?.(); + controlsZero(); +} +function acquire() { + unlockAudio(); + closePanels(); + $("chat-form").hidden = true; + if (!state.connected) { + toast("Соединение с сервером ещё не установлено."); + return; + } + try { + const p = canvas.requestPointerLock?.(); + p?.catch?.(() => { + pointerFallback = true; + toast( + "Захват мыши недоступен: перетаскивайте для обзора, щёлкните для правки.", + ); + }); + } catch { + pointerFallback = true; + toast("Для обзора удерживайте кнопку мыши и двигайте курсор."); + } + canvas.focus(); +} +function addMaterials(items = []) { + let changed = false; + for (const item of items) { + if (!item || !Number.isInteger(item.id)) continue; + const prev = state.materials.get(item.id), + mat = { ...prev, ...item }; + mat.state = mat.state || state.registry[mat.id] || "unknown"; + mat.color = mat.color || [150, 152, 142]; + mat.render = normalizeBoxes( + mat.render || + mat.render_boxes || + mat.boxes || + (mat.id === 0 ? [] : [unitBox]), + ); + mat.collision = normalizeBoxes( + mat.collision || mat.boxes || (mat.solid === false ? [] : [unitBox]), + ); + mat.transparent = + mat.opacity < 1 || /glass|water|leaves|ice/.test(mat.state); + const style = + packageStyles.get(mat.state) || packageStyles.get(baseName(mat.state)); + if (style?.color) mat.color = style.color; + mat.effect = style?.effect; + state.materials.set(mat.id, mat); + if (!prev) changed = true; + } + return changed; +} +function snapshot(m) { + state.id = m.id ?? state.id; + state.world = m.world || state.world; + state.registry = m.registry || state.registry; + addMaterials(m.materials); + state.blocks = new Map(); + for (const b of m.blocks || []) + if (b.block) state.blocks.set(key(b.pos), b.block); + state.revision = m.revision; + state.resync = false; + state.viewCenter = + m.view_center || m.spawn?.map((v) => Math.floor(v / 16) * 16) || null; + if (m.spawn) { + state.position = [...m.spawn]; + state.target = [...m.spawn]; + } + if (m.players) updatePlayers(m.players, true); + if (m.entities) state.entities = m.entities; + renderer.replace(state.blocks, state.materials); + $("world-button").textContent = `${state.world} ▾`; + document.title = `Shacraft · ${state.world}`; + if (m.type === "welcome") { + state.connected = true; + state.retry = 0; + connection("В сети"); + chat("", `Вы вошли в ${state.world}`, true); + } + seedHotbar(); + loadMissingMaterials(); + updateDiagnostics(); +} +function updatePlayers(players, instant = false) { + const present = new Set(); + for (const p of players) { + present.add(p.id); + if (p.id === state.id) { + if (p.position) { + const under = [ + Math.floor(state.target[0]), + Math.floor(state.target[1] - 0.1), + Math.floor(state.target[2]), + ], + underMat = state.materials.get(state.blocks.get(key(under))); + if ( + !instant && + p.position[1] - state.target[1] > 0.38 && + underMat?.effect === "bounce" + ) + bounceFeedback(); + state.target = p.position; + if ( + instant || + Math.hypot(...p.position.map((v, i) => v - state.position[i])) > 4 + ) + state.position = [...p.position]; + } + continue; + } + const old = state.players.get(p.id); + state.players.set(p.id, { + ...p, + position: old && !instant ? old.position : [...p.position], + target: [...p.position], + }); + } + for (const id of state.players.keys()) + if (!present.has(id)) state.players.delete(id); +} +function inView(pos) { + const center = state.viewCenter; + return ( + !center || + pos.every( + (v, i) => v >= center[i] - (i === 1 ? 8 : 32) && v <= center[i] + 31, + ) + ); +} +function blockUpdate(m) { + if (state.revision === null || state.resync) return; + if (m.revision <= state.revision) return; + if (m.revision !== state.revision + 1) { + state.resync = true; + send({ type: "resync" }); + toast("Сверяем изменения с сервером…"); + return; + } + const changes = (m.changes || []).filter((change) => inView(change.pos)); + const needed = new Set(changes.map((change) => change.block)); + addMaterials((m.materials || []).filter((mat) => needed.has(mat.id))); + for (const change of changes) { + if (change.block) state.blocks.set(key(change.pos), change.block); + else state.blocks.delete(key(change.pos)); + } + state.revision = m.revision; + renderer.change(changes); + loadMissingMaterials(); +} +function onMessage(m) { + switch (m.type) { + case "welcome": + case "snapshot": + snapshot(m); + break; + case "state": + state.tick = m.tick ?? state.tick; + state.ack = m.ack ?? state.ack; + if (m.players) updatePlayers(m.players); + if (m.entities) state.entities = m.entities; + if (m.match) showMatch(m.match); + break; + case "blocks": + blockUpdate(m); + break; + case "chat": + chat(m.name, m.text); + break; + case "error": + toast(m.message || m.error || "Сервер отклонил действие", true); + if (/revision|resync/i.test(m.message || "")) send({ type: "resync" }); + if (state.resync && /snapshot rate limited/i.test(m.message || "")) { + const generation = wsGeneration; + setTimeout(() => { + if (generation === wsGeneration && state.connected && state.resync) + send({ type: "resync" }); + }, 600); + } + break; + case "pong": + state.ping = Math.max( + 0, + Math.round( + performance.now() - Number(m.client_time ?? m.time ?? m.timestamp), + ), + ); + break; + case "entities": + state.entities = m.entities || []; + break; + case "match": + showMatch(m.match || m); + break; + case "notice": + toast(m.message); + break; + } +} +async function getJSON(url) { + const response = await fetch(url, { cache: "no-store" }); + if (!response.ok) + throw Error(`${url.split("?")[0]}: HTTP ${response.status}`); + return response.json(); +} +async function verifyPackages(manifest, generation) { + if (!crypto.subtle) + throw Error( + "Для проверки пакетов нужен безопасный контекст (localhost или HTTPS).", + ); + state.packFiles = 0; + state.packBytes = 0; + state.packCached = 0; + packageStyles.clear(); + try { + packageCache = await caches.open("shacraft-packages-v1"); + } catch { + packageCache = null; + } + let total = 0; + for (const pack of manifest.packages || []) { + const resources = pack.files || pack.resources || []; + const verifiedFiles = new Map(); + for (const file of resources) { + if (generation !== wsGeneration) return; + const hash = (file.sha256 || file.hash || "").toLowerCase(); + if (!/^[a-f0-9]{64}$/.test(hash)) + throw Error(`Некорректный SHA-256: ${pack.id}/${file.path}`); + const url = new URL( + file.url || `/packages/${pack.id}/${pack.version}/${file.path}`, + location.origin, + ); + if (url.origin !== location.origin) + throw Error("Пакеты должны загружаться с игрового сервера."); + const size = file.size ?? file.bytes; + if ( + size !== undefined && + (!Number.isSafeInteger(size) || size < 0 || size > 64 * 1024 * 1024) + ) + throw Error("Превышен лимит размера ресурса."); + const cacheURL = new URL(`/__shacraft_cache__/${hash}`, location.origin) + .href; + let response = await packageCache?.match(cacheURL); + const cached = !!response; + if (!response) { + response = await fetch(url); + if (!response.ok) + throw Error( + `Не удалось загрузить пакет: ${pack.id}/${file.path} (${response.status})`, + ); + } + const blob = await response.blob(); + total += blob.size; + if (blob.size > 64 * 1024 * 1024 || total > 128 * 1024 * 1024) + throw Error("Превышен лимит памяти для пакетов."); + if (size !== undefined && blob.size !== size) + throw Error(`Размер ресурса не совпадает: ${pack.id}/${file.path}`); + const digest = Array.from( + new Uint8Array( + await crypto.subtle.digest("SHA-256", await blob.arrayBuffer()), + ), + ) + .map((n) => n.toString(16).padStart(2, "0")) + .join(""); + if (digest !== hash) { + await packageCache?.delete(cacheURL); + throw Error(`Хеш ресурса не совпадает: ${pack.id}/${file.path}`); + } + if (!cached && packageCache) + try { + await packageCache.put(cacheURL, new Response(blob)); + } catch { + /* Quota failures do not weaken integrity verification. */ + } + state.packFiles++; + state.packBytes += blob.size; + state.packCached += cached ? 1 : 0; + verifiedFiles.set(file.path, blob); + $("package-status").textContent = + `${state.packFiles} файлов проверено · ${bytes(state.packBytes)} · из кэша ${state.packCached}`; + connection(`Пакеты ${state.packFiles}`); + } + // Resolve declared references only after every resource passed integrity checks. + // The supported client hook is declarative `effect: bounce`, with no package JS. + for (const file of resources.filter( + (f) => f.role === "client-style" || f.path?.endsWith("style.json"), + )) { + const style = JSON.parse(await verifiedFiles.get(file.path).text()); + if (style.schema !== 1) + throw Error(`Неизвестная схема стиля пакета ${pack.id}`); + if (typeof style.block === "string") + packageStyles.set(style.block, style); + const texture = verifiedFiles.get(style.texture); + if (texture) + await renderer.setTexture(texture, style.effect === "bounce"); + if (style.effect === "bounce") { + const shader = verifiedFiles.get(style.shader); + if (shader) renderer.setBounceShader(await shader.text()); + const sound = verifiedFiles.get(style.sound); + if (sound) { + bounceSound = await sound.arrayBuffer(); + bounceBuffer = null; + bounceDecode = null; + if (audioContext) unlockAudio(); + } + } + } + } + if (!state.packFiles) + $("package-status").textContent = + "Сервер не требует дополнительных файлов."; + if (packageCache) { + const keys = await packageCache.keys(); + if (keys.length > 512) + await Promise.all( + keys.slice(0, keys.length - 512).map((k) => packageCache.delete(k)), + ); + } +} +async function connect() { + const generation = ++wsGeneration; + clearTimeout(retryTimer); + const old = state.ws; + state.ws = null; + old?.close(); + state.connected = false; + state.id = null; + state.players.clear(); + state.seq = 0; + connection("Подключение"); + controlsZero(); + try { + const manifest = await getJSON("/api/manifest"); + if (manifest.protocol !== 1) + throw Error(`Неподдерживаемый протокол ${manifest.protocol}`); + state.manifest = manifest; + await verifyPackages(manifest, generation); + if (generation !== wsGeneration) return; + const ws = new WebSocket( + `${location.protocol === "https:" ? "wss:" : "ws:"}//${location.host}/ws`, + ); + state.ws = ws; + ws.addEventListener("open", () => { + if (generation !== wsGeneration) return; + connection("Вход в мир"); + send({ + type: "join", + protocol: 1, + name: state.name, + world: state.world, + manifest_hash: manifest.hash, + }); + }); + ws.addEventListener("message", (event) => { + if (generation !== wsGeneration) return; + try { + onMessage(JSON.parse(event.data)); + } catch (error) { + console.error("Shacraft protocol error", error); + toast(`Ошибка данных сервера: ${error.message}`, true); + } + }); + ws.addEventListener("close", (event) => { + if (generation !== wsGeneration) return; + state.connected = false; + controlsZero(); + scheduleReconnect(event.reason || "Соединение потеряно"); + }); + ws.addEventListener("error", () => connection("Ошибка соединения", true)); + await Promise.allSettled([loadWorlds(), loadEntities()]); + } catch (error) { + if (generation !== wsGeneration) return; + console.error(error); + scheduleReconnect(error.message); + } +} +function scheduleReconnect(reason) { + state.connected = false; + const seconds = Math.min(20, 2 ** state.retry++); + connection(`Повтор через ${seconds} с`, true); + toast( + `${reason}. Повторное подключение через ${seconds} с.`, + true, + Math.min(seconds * 1000, 6000), + ); + clearTimeout(retryTimer); + retryTimer = setTimeout(connect, seconds * 1000); +} +async function loadEntities() { + try { + const result = await getJSON("/api/entities"); + for (const e of result.items || result.entities || result) + state.entityDefs.set(e.name || e.kind, { + ...e, + render: normalizeBoxes(e.render), + }); + } catch (error) { + console.warn("Entity catalog", error); + } +} +async function loadWorlds() { + try { + const data = await getJSON("/api/worlds"), + worlds = data.worlds || data; + $("world-list").replaceChildren(); + for (const world of worlds) { + const b = document.createElement("button"); + b.className = + "world-row" + (world.name === state.world ? " current" : ""); + const title = document.createElement("strong"); + title.textContent = world.name; + const subtitle = document.createElement("small"); + subtitle.textContent = `Ревизия ${world.revision}${world.template ? ` · экземпляр ${world.template}` : ""}`; + b.append(title, subtitle); + b.onclick = () => { + if (!state.connected) { + toast("Дождитесь подключения к серверу."); + return; + } + send({ type: "switch_world", world: world.name }); + closePanels(); + controlsZero(); + }; + $("world-list").append(b); + } + } catch (error) { + $("world-list").textContent = error.message; + } +} +let missingPending = false; +async function loadMissingMaterials() { + if (missingPending) return; + missingPending = true; + try { + while (state.connected) { + const missing = [...new Set(state.blocks.values())] + .filter((id) => !state.materials.has(id)) + .slice(0, 128); + if (!missing.length) break; + const data = await getJSON( + `/api/catalog?ids=${missing.join(",")}&limit=128`, + ); + const items = data.items || data; + if (!addMaterials(items)) break; + const loaded = new Set(items.map((material) => material.id)); + renderer.change( + [...state.blocks] + .filter(([, id]) => loaded.has(id)) + .map(([position, block]) => ({ + pos: position.split(",").map(Number), + block, + })), + ); + await new Promise((resolve) => setTimeout(resolve, 0)); + } + seedHotbar(); + } catch (error) { + console.warn("Material catalog", error); + } finally { + missingPending = false; + } +} +async function seedHotbar() { + if (state.hotbar.length) return; + const states = [ + "minecraft:grass_block", + "minecraft:stone", + "minecraft:oak_planks", + "minecraft:bricks", + "minecraft:glass", + "minecraft:oak_log", + "minecraft:oak_leaves", + "minecraft:snow_block", + "shacraft:trampoline", + ]; + let found = states.map((s) => + [...state.materials.values()].find((m) => baseName(m.state) === s), + ); + if (found.filter(Boolean).length < 5) { + try { + const result = await getJSON( + "/api/catalog?states=" + encodeURIComponent(states.join(",")), + ); + addMaterials(result.items || result); + found = states.map((s) => + [...state.materials.values()].find((m) => baseName(m.state) === s), + ); + } catch {} + } + const fallback = [...state.materials.values()].filter((m) => m.id !== 0); + state.hotbar = found.map( + (m, i) => m?.id ?? fallback[i % Math.max(1, fallback.length)]?.id ?? 0, + ); + renderHotbar(); +} +function swatch(mat) { + const s = document.createElement("span"); + s.className = "swatch"; + s.style.setProperty( + "--block-color", + `rgb(${(mat?.color || [150, 152, 142]).join(",")})`, + ); + s.setAttribute("aria-hidden", "true"); + return s; +} +function renderHotbar() { + $("hotbar").replaceChildren(); + for (let i = 0; i < 9; i++) { + const mat = state.materials.get(state.hotbar[i]); + const b = document.createElement("button"); + b.className = `slot${i === state.slot ? " active" : ""}`; + b.title = `${i + 1}: ${mat?.state || "Пусто"}`; + b.setAttribute("aria-label", b.title); + b.setAttribute("aria-pressed", i === state.slot ? "true" : "false"); + const n = document.createElement("small"); + n.textContent = String(i + 1); + b.append(n, swatch(mat)); + b.onclick = () => { + state.slot = i; + renderHotbar(); + }; + $("hotbar").append(b); + } + $("selected-name").textContent = + niceName(state.materials.get(state.hotbar[state.slot])?.state) || + "Выберите блок в библиотеке"; +} +async function loadCatalog(reset = false) { + if (reset) { + catalogGeneration++; + catalogOffset = 0; + catalogQuery = $("catalog-search").value.trim(); + $("catalog-list").replaceChildren(); + catalogBusy = false; + } + if (catalogBusy) return; + catalogBusy = true; + const generation = catalogGeneration; + $("catalog-more").disabled = true; + try { + const data = await getJSON( + `/api/catalog?query=${encodeURIComponent(catalogQuery)}&offset=${catalogOffset}&limit=60`, + ); + if (generation !== catalogGeneration) return; + const items = data.items || data; + catalogTotal = data.total ?? items.length; + addMaterials(items); + catalogOffset += items.length; + $("catalog-count").textContent = + `${catalogTotal.toLocaleString("ru-RU")} состояний · Minecraft Java 26.2`; + for (const mat of items) { + const button = document.createElement("button"); + button.className = "catalog-item"; + button.title = mat.state; + const label = document.createElement("span"); + label.textContent = niceName(mat.state); + const properties = document.createElement("small"); + properties.textContent = + mat.state.match(/\[(.*)\]/)?.[1] || baseName(mat.state).split(":")[0]; + label.append(properties); + button.append(swatch(mat), label); + button.onclick = () => { + state.hotbar[state.slot] = mat.id; + renderHotbar(); + closePanels(); + toast(`${niceName(mat.state)} · ячейка ${state.slot + 1}`, false, 1800); + }; + $("catalog-list").append(button); + } + if (!catalogOffset) { + const empty = document.createElement("p"); + empty.className = "catalog-empty"; + empty.textContent = + "Ничего не найдено. Используйте английское имя блока."; + $("catalog-list").append(empty); + } + $("catalog-more").hidden = catalogOffset >= catalogTotal; + } catch (error) { + if (generation === catalogGeneration) { + toast(error.message, true); + $("catalog-count").textContent = "Не удалось загрузить каталог"; + } + } finally { + if (generation === catalogGeneration) { + catalogBusy = false; + $("catalog-more").disabled = false; + } + } +} +function showMatch(m) { + if (!m || m.phase === "idle" || (m.phase === "waiting" && !m.remaining)) { + $("match").hidden = true; + return; + } + $("match").hidden = false; + const phases = { + countdown: "До начала", + active: "Spleef", + running: "Spleef", + finished: "Матч завершён", + waiting: "Ожидаем игроков", + }; + const winner = m.winner ? ` · Победитель: ${m.winner}` : ""; + $("match").textContent = + `${phases[m.phase] || m.phase}${m.remaining !== undefined ? ` · ${Math.ceil(m.remaining)} с` : ""}${winner}`; +} +function action(kind) { + if (!state.connected || isUIOpen()) return; + const hit = state.selection; + if (!hit) return; + const now = performance.now(); + if (now - lastAction < 130) return; + lastAction = now; + send({ + type: "input", + seq: ++state.seq, + yaw: state.yaw, + pitch: state.pitch, + forward: (held.has("KeyW") ? 1 : 0) - (held.has("KeyS") ? 1 : 0), + strafe: (held.has("KeyD") ? 1 : 0) - (held.has("KeyA") ? 1 : 0), + jump: held.has("Space"), + }); + if (kind === "break") send({ type: "break", pos: hit.pos }); + else if (kind === "place") { + const mat = state.materials.get(state.hotbar[state.slot]); + if (!mat?.id) return; + send({ + type: "place", + pos: hit.pos.map((v, i) => v + hit.normal[i]), + block: mat.id, + state: mat.state, + }); + } else if (kind === "pick") { + state.hotbar[state.slot] = hit.block; + renderHotbar(); + } +} +function openChat() { + release(); + closePanels(); + $("chat-form").hidden = false; + $("chat-input").focus(); +} +$("library-button").onclick = () => panel("library"); +$("diagnostics-button").onclick = () => panel("diagnostics"); +$("menu-button").onclick = () => panel("menu"); +$("world-button").onclick = () => panel("worlds"); +for (const b of document.querySelectorAll("[data-close]")) + b.onclick = () => ($(b.dataset.close).hidden = true); +$("resume-button").onclick = acquire; +$("player-name").value = state.name; +$("rename-button").onclick = () => { + const name = $("player-name").value.trim(); + if (!name) return; + state.name = name; + localStorage.setItem("shacraft:name", name); + closePanels(); + connect(); +}; +$("reconnect-button").onclick = () => { + closePanels(); + connect(); +}; +$("resync-button").onclick = () => { + if (send({ type: "resync" })) toast("Запрошен актуальный снимок мира."); +}; +$("respawn-button").onclick = () => { + send({ type: "respawn" }); + closePanels(); +}; +$("spleef-button").onclick = () => { + send({ type: "start_match" }); + closePanels(); +}; +$("catalog-search").oninput = () => { + clearTimeout(catalogTimer); + catalogTimer = setTimeout(() => loadCatalog(true), 220); +}; +$("catalog-more").onclick = () => loadCatalog(); +$("chat-form").onsubmit = (e) => { + e.preventDefault(); + const text = $("chat-input").value.trim(); + if (text && state.connected) send({ type: "chat", text }); + $("chat-input").value = ""; + $("chat-form").hidden = true; + canvas.focus(); +}; +window.addEventListener("keydown", (e) => { + const editing = /INPUT|TEXTAREA/.test(document.activeElement?.tagName); + if (e.code === "Escape") { + if (!$("chat-form").hidden) { + $("chat-form").hidden = true; + $("chat-input").blur(); + return; + } + if (isUIOpen()) closePanels(); + else if (document.pointerLockElement !== canvas) panel("menu"); + controlsZero(); + return; + } + if (editing) return; + if ( + [ + "Space", + "KeyW", + "KeyA", + "KeyS", + "KeyD", + "ArrowUp", + "ArrowDown", + "ArrowLeft", + "ArrowRight", + "Tab", + "F3", + ].includes(e.code) + ) + e.preventDefault(); + if (e.repeat) return; + if (e.code === "KeyE") { + panel("library"); + return; + } + if (e.code === "F3") { + panel("diagnostics"); + return; + } + if (e.code === "KeyT" || e.code === "Enter") { + openChat(); + return; + } + if (/^Digit[1-9]$/.test(e.code)) { + state.slot = Number(e.code.slice(-1)) - 1; + renderHotbar(); + return; + } + if (!isUIOpen()) held.add(e.code); +}); +window.addEventListener("keyup", (e) => held.delete(e.code)); +window.addEventListener("blur", () => { + drag = null; + controlsZero(); +}); +document.addEventListener("visibilitychange", () => { + if (document.hidden) controlsZero(); +}); +document.addEventListener("pointerlockchange", () => { + const locked = document.pointerLockElement === canvas; + document.body.classList.toggle("locked", locked); + if (!locked) controlsZero(); +}); +function look(dx, dy) { + const sensitivity = Number($("sensitivity").value); + state.yaw += clamp(dx, -160, 160) * sensitivity; + state.pitch = clamp( + state.pitch - clamp(dy, -160, 160) * sensitivity, + -1.48, + 1.48, + ); +} +document.addEventListener("mousemove", (e) => { + if (document.pointerLockElement === canvas) look(e.movementX, e.movementY); +}); +canvas.addEventListener("contextmenu", (e) => e.preventDefault()); +canvas.addEventListener("pointerdown", (e) => { + unlockAudio(); + if (isUIOpen()) { + closePanels(); + return; + } + if (document.pointerLockElement === canvas) { + action(e.button === 2 ? "place" : e.button === 1 ? "pick" : "break"); + return; + } + drag = { + x: e.clientX, + y: e.clientY, + startX: e.clientX, + startY: e.clientY, + button: e.button, + moved: false, + }; + canvas.setPointerCapture(e.pointerId); +}); +canvas.addEventListener("pointermove", (e) => { + if (!drag || document.pointerLockElement === canvas) return; + const dx = e.clientX - drag.x, + dy = e.clientY - drag.y; + if (Math.hypot(e.clientX - drag.startX, e.clientY - drag.startY) > 3) + drag.moved = true; + if (drag.moved) { + pointerFallback = true; + look(dx, dy); + } + drag.x = e.clientX; + drag.y = e.clientY; +}); +canvas.addEventListener("pointerup", (e) => { + if (!drag) return; + const d = drag; + drag = null; + if (!d.moved) { + if (d.button === 2) action("place"); + else if (d.button === 1) action("pick"); + else if (pointerFallback) action("break"); + else acquire(); + } +}); +canvas.addEventListener("pointercancel", () => (drag = null)); +canvas.addEventListener( + "wheel", + (e) => { + e.preventDefault(); + state.slot = (state.slot + (e.deltaY > 0 ? 1 : 8)) % 9; + renderHotbar(); + }, + { passive: false }, +); +async function fetchMetrics() { + try { + state.metrics = await getJSON("/api/metrics"); + } catch {} + updateDiagnostics(); +} +function updateDiagnostics() { + const m = state.metrics || {}, + storage = m.storage || m.store || m, + mem = m.memory || {}, + rss = m.rss_bytes ?? m.process_rss_bytes ?? mem.rss_bytes; + const rows = [ + ["Соединение", state.connected ? "В сети" : "Нет соединения"], + ["Мир", state.world], + ["Ревизия", state.revision ?? "—"], + ["Видимые блоки", state.blocks.size.toLocaleString("ru-RU")], + ["Сущности", String(state.entities.length)], + ["Игроки", String(state.players.size + (state.id ? 1 : 0))], + ["WebGL", renderer?.lost ? "Контекст потерян" : "WebGL2"], + ["Кадры / с", String(state.fps)], + ["Треугольники", renderer?.triangles.toLocaleString("ru-RU") || "0"], + ["Ожидают построения", String(renderer?.dirty.size || 0)], + ["Тик сервера", String(state.tick)], + ["Подтверждён ввод", String(state.ack)], + ["Ping", state.ping ? `${state.ping} мс` : "—"], + ["Координаты", state.position.map((n) => n.toFixed(1)).join(", ")], + ["RAM процесса", bytes(rss)], + [ + "Данные кэша", + bytes(storage.cache_payload_bytes ?? storage.cache?.payload_bytes), + ], + ["Пакеты", `${state.packFiles} файлов`], + ]; + $("debug-values").replaceChildren(); + for (const [label, value] of rows) { + const dt = document.createElement("dt"); + dt.textContent = label; + const dd = document.createElement("dd"); + dd.textContent = value; + dd.dataset.metric = label; + $("debug-values").append(dt, dd); + } + canvas.dataset.world = state.world; + canvas.dataset.revision = String(state.revision ?? ""); + canvas.dataset.blocks = String(state.blocks.size); + canvas.dataset.entities = String(state.entities.length); + canvas.dataset.webgl = renderer?.lost ? "lost" : "ready"; + canvas.dataset.connected = String(state.connected); +} +const playerLabels = new Map(); +function updateLabels() { + for (const [id, label] of playerLabels) + if (!state.players.has(id)) { + label.remove(); + playerLabels.delete(id); + } + for (const [id, p] of state.players) { + let label = playerLabels.get(id); + if (!label) { + label = document.createElement("div"); + label.className = "player-label"; + $("labels").append(label); + playerLabels.set(id, label); + } + label.textContent = p.name; + const at = renderer.project([ + p.position[0], + p.position[1] + 1.95, + p.position[2], + ]); + label.hidden = + !at || + at[0] < 0 || + at[0] > canvas.clientWidth || + at[1] < 0 || + at[1] > canvas.clientHeight; + if (at) { + label.style.left = `${at[0]}px`; + label.style.top = `${at[1]}px`; + } + } +} +function frame(time) { + const dt = Math.min(0.05, (time - lastFrame) / 1000); + lastFrame = time; + state.frames++; + const blend = 1 - Math.exp(-dt * 19); + for (let i = 0; i < 3; i++) + state.position[i] += (state.target[i] - state.position[i]) * blend; + for (const p of state.players.values()) + for (let i = 0; i < 3; i++) + p.position[i] += (p.target[i] - p.position[i]) * blend; + const camera = { + eye: [state.position[0], state.position[1] + 1.62, state.position[2]], + yaw: state.yaw, + pitch: state.pitch, + }; + state.selection = raycast( + camera.eye, + direction(state.yaw, state.pitch), + state.blocks, + state.materials, + 6, + ); + const selectionKey = state.selection + ? `${key(state.selection.pos)}:${state.selection.block}` + : ""; + if (selectionKey !== lastSelection) { + lastSelection = selectionKey; + renderer.updateSelection(state.selection); + $("target-label").textContent = state.selection + ? niceName( + state.materials.get(state.selection.block)?.state || + state.registry[state.selection.block], + ) + : ""; + } + renderer.draw( + camera, + [...state.players.values()], + state.entities, + state.entityDefs, + ); + updateLabels(); + if (state.connected && time - lastInput >= 50) { + lastInput = time; + let forward = isUIOpen() + ? 0 + : (held.has("KeyW") || held.has("ArrowUp") ? 1 : 0) - + (held.has("KeyS") || held.has("ArrowDown") ? 1 : 0), + strafe = isUIOpen() + ? 0 + : (held.has("KeyD") || held.has("ArrowRight") ? 1 : 0) - + (held.has("KeyA") || held.has("ArrowLeft") ? 1 : 0); + send({ + type: "input", + seq: ++state.seq, + yaw: state.yaw, + pitch: state.pitch, + forward, + strafe, + jump: !isUIOpen() && held.has("Space"), + }); + } + if (time - fpsTime > 1000) { + state.fps = Math.round((state.frames * 1000) / (time - fpsTime)); + state.frames = 0; + fpsTime = time; + updateDiagnostics(); + } + requestAnimationFrame(frame); +} +try { + renderer = new Renderer(canvas); + renderHotbar(); + connect(); + requestAnimationFrame(frame); + setInterval(() => { + if (state.connected) send({ type: "ping", client_time: performance.now() }); + if (!$("diagnostics").hidden) fetchMetrics(); + }, 3000); +} catch (error) { + console.error(error); + $("fatal").textContent = error.message; + $("fatal").hidden = false; + connection("Ошибка графики", true); +} diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..e4c39a9 --- /dev/null +++ b/client/index.html @@ -0,0 +1,165 @@ + + + + + + + Shacraft · Мир + + + + + + +
+
+ +
+ Shacraft +
+ Загрузка +
+ +
+ +
+ + +
+
+ +
+ W A S D движениеПробел прыжокЛКМ / ПКМ убрать / поставитьT чат +
+
+ + + + + + + + + diff --git a/client/math.js b/client/math.js new file mode 100644 index 0000000..26045c8 --- /dev/null +++ b/client/math.js @@ -0,0 +1,172 @@ +export const clamp = (v, a, b) => Math.max(a, Math.min(b, v)); +export const key = (p) => `${p[0]},${p[1]},${p[2]}`; +export const direction = (yaw, pitch) => [ + Math.sin(yaw) * Math.cos(pitch), + Math.sin(pitch), + -Math.cos(yaw) * Math.cos(pitch), +]; +export function multiply(a, b) { + const o = new Float32Array(16); + for (let c = 0; c < 4; c++) + for (let r = 0; r < 4; r++) + for (let k = 0; k < 4; k++) o[c * 4 + r] += a[k * 4 + r] * b[c * 4 + k]; + return o; +} +export function perspective(fovy, aspect, near, far) { + const f = 1 / Math.tan(fovy / 2), + nf = 1 / (near - far); + return new Float32Array([ + f / aspect, + 0, + 0, + 0, + 0, + f, + 0, + 0, + 0, + 0, + (far + near) * nf, + -1, + 0, + 0, + 2 * far * near * nf, + 0, + ]); +} +export function viewMatrix(eye, yaw, pitch) { + const d = direction(yaw, pitch), + z = d.map((v) => -v), + x = [Math.cos(yaw), 0, Math.sin(yaw)], + y = [ + -Math.sin(yaw) * Math.sin(pitch), + Math.cos(pitch), + Math.cos(yaw) * Math.sin(pitch), + ]; + return new Float32Array([ + x[0], + y[0], + z[0], + 0, + x[1], + y[1], + z[1], + 0, + x[2], + y[2], + z[2], + 0, + -dot(x, eye), + -dot(y, eye), + -dot(z, eye), + 1, + ]); +} +export function dot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} +export function project(p, m, w, h) { + const x = m[0] * p[0] + m[4] * p[1] + m[8] * p[2] + m[12], + y = m[1] * p[0] + m[5] * p[1] + m[9] * p[2] + m[13], + z = m[2] * p[0] + m[6] * p[1] + m[10] * p[2] + m[14], + q = m[3] * p[0] + m[7] * p[1] + m[11] * p[2] + m[15]; + return q > 0 && z / q < 1 + ? [((x / q + 1) * w) / 2, ((1 - y / q) * h) / 2] + : null; +} +export const unitBox = { min: [0, 0, 0], max: [1, 1, 1] }; +export function normalizeBoxes(boxes) { + return (boxes || []) + .map((b) => + Array.isArray(b) ? { min: b.slice(0, 3), max: b.slice(3, 6) } : b, + ) + .filter((b) => b.min?.length === 3 && b.max?.length === 3); +} +export function rayBox(origin, dir, min, max, reach) { + let tmin = -Infinity, + tmax = Infinity, + normal = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + if (Math.abs(dir[i]) < 1e-9) { + if (origin[i] < min[i] || origin[i] > max[i]) return null; + continue; + } + let a = (min[i] - origin[i]) / dir[i], + b = (max[i] - origin[i]) / dir[i], + sign = -Math.sign(dir[i]); + if (a > b) [a, b] = [b, a]; + if (a > tmin) { + tmin = a; + normal = [0, 0, 0]; + normal[i] = sign; + } + tmax = Math.min(tmax, b); + if (tmin > tmax) return null; + } + if (tmax < 0 || tmin > reach) return null; + return { distance: Math.max(0, tmin), normal }; +} +// A bounded DDA finds candidate cells; exact material boxes determine selection and face. +export function raycast(origin, dir, blocks, materials, reach = 6) { + const cell = origin.map(Math.floor), + step = dir.map(Math.sign); + const delta = dir.map((v) => (v === 0 ? Infinity : Math.abs(1 / v))); + const next = dir.map((v, i) => + v === 0 ? Infinity : ((v > 0 ? cell[i] + 1 : cell[i]) - origin[i]) / v, + ); + const visited = new Set(); + let best = null; + for (let n = 0; n < 128; n++) { + // Official shapes can extend outside their owning cell (e.g. a fence is 1.5 high). + // Inspect neighboring owners once, but intersect their exact boxes in world space. + for (let x = -3; x <= 3; x++) + for (let y = -3; y <= 3; y++) + for (let z = -3; z <= 3; z++) { + const owner = [cell[0] + x, cell[1] + y, cell[2] + z], + idKey = key(owner); + if (visited.has(idKey)) continue; + visited.add(idKey); + const id = blocks.get(idKey); + if (!id) continue; + const mat = materials.get(id), + boxes = mat ? mat.render : [unitBox]; + for (const box of boxes || [unitBox]) { + const hit = rayBox( + origin, + dir, + box.min.map((v, i) => v + owner[i]), + box.max.map((v, i) => v + owner[i]), + reach, + ); + if (hit && (!best || hit.distance < best.distance)) + best = { ...hit, pos: owner, block: id }; + } + } + const axis = + next[0] < next[1] + ? next[0] < next[2] + ? 0 + : 2 + : next[1] < next[2] + ? 1 + : 2; + if ( + next[axis] > reach || + !Number.isFinite(next[axis]) || + (best && next[axis] > best.distance) + ) + break; + cell[axis] += step[axis]; + next[axis] += delta[axis]; + } + return best; +} +export function isFullCube(mat) { + const b = mat?.render; + return ( + b?.length === 1 && + b[0].min.every((v) => v === 0) && + b[0].max.every((v) => v === 1) && + !mat.transparent + ); +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..6b49651 --- /dev/null +++ b/client/package.json @@ -0,0 +1 @@ +{"name":"shacraft-client","version":"0.1.0","private":true,"type":"module","scripts":{"test":"node --test tests/*.test.js"}} diff --git a/client/renderer.js b/client/renderer.js new file mode 100644 index 0000000..f8b22a0 --- /dev/null +++ b/client/renderer.js @@ -0,0 +1,569 @@ +import { + multiply, + perspective, + viewMatrix, + key, + isFullCube, + unitBox, + project, +} from "./math.js"; +const vertex = `#version 300 es +precision highp float;layout(location=0) in vec3 aPos;layout(location=1) in vec3 aColor;layout(location=2) in vec3 aNormal;layout(location=3) in float aMaterial;layout(location=4) in float aOpacity;uniform mat4 uVP;out vec3 vPos;out vec3 vColor;out vec3 vNormal;flat out float vMaterial;out float vOpacity;void main(){vOpacity=aOpacity;vPos=aPos;vColor=aColor;vNormal=aNormal;vMaterial=aMaterial;gl_Position=uVP*vec4(aPos,1.);}`; +const fragment = `#version 300 es +precision highp float;in vec3 vPos;in vec3 vColor;in vec3 vNormal;flat in float vMaterial;in float vOpacity;uniform vec3 uEye;uniform sampler2D uTexture;uniform bool uTextured;uniform sampler2D uEffectTexture;uniform bool uEffectTextured;uniform float uPulse;out vec4 outColor; +float hash(vec3 p){return fract(sin(dot(p,vec3(127.1,311.7,74.7)))*43758.5453);} +vec3 shacraftBounceTint(vec3 color,float pulse){return color;} +void main(){vec3 n=normalize(vNormal);vec2 uv=abs(n.y)>.5?vPos.xz:(abs(n.x)>.5?vPos.zy:vPos.xy);vec3 p=floor((vPos+n*.002)*16.);float noise=hash(p)*.14-.07;float pattern=1.; +if(vMaterial>1.5&&vMaterial<2.5){pattern=.89+.11*step(.07,fract(uv.y*4.));pattern*=.9+.1*step(.055,fract(uv.x*.5+floor(uv.y*4.)*.5));} +if(vMaterial>2.5&&vMaterial<3.5){pattern=.87+.13*step(.06,fract(uv.y*4.));pattern*=.84+.16*step(.045,fract(uv.x*2.+floor(uv.y*4.)*.5));} +if(vMaterial>3.5&&vMaterial<4.5){pattern=.91+.09*sin(floor(uv.x*16.)*1.73+sin(floor(uv.y*16.)*.22));} +float tex=uTextured?mix(.84,1.12,texture(uTexture,uv).r):1.;if(vMaterial>4.5&&uEffectTextured)tex=mix(.75,1.2,texture(uEffectTexture,uv).g);float diffuse=max(0.,dot(n,normalize(vec3(-.45,.86,.3))));float light=.69+diffuse*.34;vec3 color=clamp((vColor+noise)*pattern*tex*light,0.,1.);if(vMaterial>.5&&vMaterial<1.5&&n.y<.5)color=mix(color,vec3(.38,.29,.17),.65); +if(vMaterial>4.5)color=shacraftBounceTint(color,uPulse);float fog=1.-exp(-pow(distance(vPos,uEye)/74.,2.));color=mix(color,vec3(.70,.80,.79),fog*.91);outColor=vec4(color,vOpacity);}`; +const skyVert = `#version 300 es +precision highp float;out vec2 vUV;void main(){vec2 p=vec2((gl_VertexID<<1)&2,gl_VertexID&2);vUV=p;gl_Position=vec4(p*2.-1.,1.,1.);}`; +const skyFrag = `#version 300 es +precision highp float;in vec2 vUV;uniform float uPitch;uniform float uYaw;uniform float uAspect;out vec4 outColor;void main(){float h=vUV.y+uPitch*.72;vec3 color=mix(vec3(.77,.83,.77),vec3(.38,.65,.78),smoothstep(.14,1.2,h));vec2 sun=vec2(.77-uYaw*.3,.82-uPitch*.72);float d=length((vUV-sun)*vec2(uAspect,1.));color=mix(color,vec3(1.,.98,.8),smoothstep(.048,.039,d)*.98);color+=vec3(.045,.025,0.)*exp(-d*7.);outColor=vec4(color,1.);}`; +const lineVertex = `#version 300 es +precision highp float;layout(location=0)in vec3 aPos;uniform mat4 uVP;void main(){gl_Position=uVP*vec4(aPos,1.);}`; +const lineFragment = `#version 300 es +precision highp float;out vec4 outColor;void main(){outColor=vec4(.13,.21,.12,1.);}`; +const faces = [ + { + n: [1, 0, 0], + v: [ + [1, 0, 1], + [1, 0, 0], + [1, 1, 0], + [1, 1, 1], + ], + }, + { + n: [-1, 0, 0], + v: [ + [0, 0, 0], + [0, 0, 1], + [0, 1, 1], + [0, 1, 0], + ], + }, + { + n: [0, 1, 0], + v: [ + [0, 1, 1], + [1, 1, 1], + [1, 1, 0], + [0, 1, 0], + ], + }, + { + n: [0, -1, 0], + v: [ + [0, 0, 0], + [1, 0, 0], + [1, 0, 1], + [0, 0, 1], + ], + }, + { + n: [0, 0, 1], + v: [ + [0, 0, 1], + [1, 0, 1], + [1, 1, 1], + [0, 1, 1], + ], + }, + { + n: [0, 0, -1], + v: [ + [1, 0, 0], + [0, 0, 0], + [0, 1, 0], + [1, 1, 0], + ], + }, +]; +function program(gl, vs, fs) { + const p = gl.createProgram(); + for (const [type, source] of [ + [gl.VERTEX_SHADER, vs], + [gl.FRAGMENT_SHADER, fs], + ]) { + const s = gl.createShader(type); + gl.shaderSource(s, source); + gl.compileShader(s); + if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) + throw Error(gl.getShaderInfoLog(s)); + gl.attachShader(p, s); + gl.deleteShader(s); + } + gl.linkProgram(p); + if (!gl.getProgramParameter(p, gl.LINK_STATUS)) + throw Error(gl.getProgramInfoLog(p)); + return p; +} +function boxVertices( + out, + pos, + box, + color, + material = 0, + skip = () => false, + yaw = 0, + opacity = 1, +) { + for (let f = 0; f < 6; f++) { + if (skip(faces[f].n)) continue; + const face = faces[f], + c = Math.cos(yaw), + s = Math.sin(yaw), + n = [ + face.n[0] * c - face.n[2] * s, + face.n[1], + face.n[0] * s + face.n[2] * c, + ]; + for (const i of [0, 1, 2, 0, 2, 3]) { + const v = face.v[i].map( + (v, k) => box.min[k] + v * (box.max[k] - box.min[k]), + ); + out.push( + pos[0] + v[0] * c - v[2] * s, + pos[1] + v[1], + pos[2] + v[0] * s + v[2] * c, + ...color, + ...n, + material, + opacity, + ); + } + } +} +function materialType(state = "", effect) { + if (effect === "bounce") return 5; + if (state.includes("grass_block")) return 1; + if (state.includes("planks")) return 2; + if (state.includes("brick")) return 3; + if (/log|stem|wood/.test(state)) return 4; + return 0; +} +const section = (p) => p.map((v) => Math.floor(v / 16)).join(","); +export class Renderer { + constructor(canvas) { + this.canvas = canvas; + const gl = (this.gl = canvas.getContext("webgl2", { + antialias: true, + alpha: false, + preserveDrawingBuffer: true, + powerPreference: "high-performance", + })); + if (!gl) + throw Error( + "WebGL2 недоступен. Включите аппаратное ускорение или откройте клиент в браузере с поддержкой WebGL2.", + ); + this.program = program(gl, vertex, fragment); + this.sky = program(gl, skyVert, skyFrag); + this.line = program(gl, lineVertex, lineFragment); + this.sections = new Map(); + this.dirty = new Set(); + this.blocks = new Map(); + this.materials = new Map(); + this.texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.texture); + gl.texImage2D( + gl.TEXTURE_2D, + 0, + gl.RGBA, + 1, + 1, + 0, + gl.RGBA, + gl.UNSIGNED_BYTE, + new Uint8Array([180, 180, 180, 255]), + ); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + this.textured = false; + this.effectTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.effectTexture); + gl.texImage2D( + gl.TEXTURE_2D, + 0, + gl.RGBA, + 1, + 1, + 0, + gl.RGBA, + gl.UNSIGNED_BYTE, + new Uint8Array([180, 180, 180, 255]), + ); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + this.effectTextured = false; + this.bounceAt = -10000; + this.dynamic = this.mesh([]); + this.lines = this.mesh([], 3); + this.triangles = 0; + this.vp = new Float32Array(16); + this.lost = false; + canvas.addEventListener("webglcontextlost", (e) => { + e.preventDefault(); + this.lost = true; + }); + canvas.addEventListener("webglcontextrestored", () => location.reload()); + } + mesh(data, stride = 11) { + const gl = this.gl, + vao = gl.createVertexArray(), + buffer = gl.createBuffer(); + gl.bindVertexArray(vao); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.DYNAMIC_DRAW); + for (const [loc, size, offset] of stride === 3 + ? [[0, 3, 0]] + : [ + [0, 3, 0], + [1, 3, 3], + [2, 3, 6], + [3, 1, 9], + [4, 1, 10], + ]) { + gl.enableVertexAttribArray(loc); + gl.vertexAttribPointer( + loc, + size, + gl.FLOAT, + false, + stride * 4, + offset * 4, + ); + } + return { vao, buffer, count: data.length / stride }; + } + disposeMesh(mesh) { + if (mesh.transparent) this.disposeMesh(mesh.transparent); + this.gl.deleteBuffer(mesh.buffer); + this.gl.deleteVertexArray(mesh.vao); + } + upload(mesh, data, stride = 11) { + const gl = this.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, mesh.buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.DYNAMIC_DRAW); + mesh.count = data.length / stride; + } + setBounceShader(source) { + if (source.length > 32768) throw Error("Шейдер пакета слишком велик"); + const next = program( + this.gl, + vertex, + fragment.replace( + "vec3 shacraftBounceTint(vec3 color,float pulse){return color;}", + source, + ), + ); + this.gl.deleteProgram(this.program); + this.program = next; + } + async setTexture(blob, effect = false) { + const bitmap = await createImageBitmap(blob); + this.gl.bindTexture( + this.gl.TEXTURE_2D, + effect ? this.effectTexture : this.texture, + ); + this.gl.texImage2D( + this.gl.TEXTURE_2D, + 0, + this.gl.RGBA, + this.gl.RGBA, + this.gl.UNSIGNED_BYTE, + bitmap, + ); + this.gl.texParameteri( + this.gl.TEXTURE_2D, + this.gl.TEXTURE_WRAP_S, + this.gl.REPEAT, + ); + this.gl.texParameteri( + this.gl.TEXTURE_2D, + this.gl.TEXTURE_WRAP_T, + this.gl.REPEAT, + ); + bitmap.close(); + if (effect) this.effectTextured = true; + else this.textured = true; + } + replace(blocks, materials) { + for (const m of this.sections.values()) this.disposeMesh(m); + this.sections.clear(); + this.dirty.clear(); + this.blocks = blocks; + this.materials = materials; + for (const k of blocks.keys()) + this.dirty.add(section(k.split(",").map(Number))); + } + change(changes) { + for (const { pos } of changes) { + this.dirty.add(section(pos)); + for (const f of faces) + this.dirty.add(section(pos.map((v, i) => v + f.n[i]))); + } + } + invalidate() { + for (const k of this.blocks.keys()) + this.dirty.add(section(k.split(",").map(Number))); + } + rebuild(id) { + const base = id.split(",").map((v) => Number(v) * 16), + vertices = [], + transparent = []; + for (let x = base[0]; x < base[0] + 16; x++) + for (let y = base[1]; y < base[1] + 16; y++) + for (let z = base[2]; z < base[2] + 16; z++) { + const pos = [x, y, z], + block = this.blocks.get(key(pos)); + if (!block) continue; + const mat = this.materials.get(block) || { + color: [150, 152, 142], + render: [unitBox], + }, + color = mat.color.map((v) => v / 255), + full = isFullCube(mat); + for (const box of mat.render || [unitBox]) { + boxVertices( + mat.opacity < 1 ? transparent : vertices, + pos, + box, + color, + materialType(mat.state, mat.effect), + (n) => + full && + isFullCube( + this.materials.get( + this.blocks.get(key(pos.map((v, i) => v + n[i]))), + ), + ), + 0, + mat.opacity ?? 1, + ); + } + } + let mesh = this.sections.get(id); + if (mesh) this.upload(mesh, vertices); + else if (vertices.length || transparent.length) { + mesh = this.mesh(vertices); + this.sections.set(id, mesh); + } + if (mesh) { + if (mesh.transparent) this.upload(mesh.transparent, transparent); + else if (transparent.length) mesh.transparent = this.mesh(transparent); + } + if (mesh && vertices.length === 0 && transparent.length === 0) { + this.disposeMesh(mesh); + this.sections.delete(id); + } + } + updateSelection(hit) { + const a = []; + if (hit) { + const mat = this.materials.get(hit.block), + boxes = mat?.render?.length ? mat.render : [unitBox]; + for (const box of boxes) { + const points = []; + for (let i = 0; i < 8; i++) + points.push( + [0, 1, 2].map( + (k) => + hit.pos[k] + + ((i >> k) & 1 ? box.max[k] + 0.003 : box.min[k] - 0.003), + ), + ); + for (let i = 0; i < 8; i++) + for (let axis = 0; axis < 3; axis++) + if (!(i & (1 << axis))) + a.push(...points[i], ...points[i | (1 << axis)]); + } + } + this.upload(this.lines, a, 3); + } + draw(camera, players, entities, entityDefinitions) { + if (this.lost) return; + const gl = this.gl, + ratio = Math.min(devicePixelRatio || 1, 1.75), + w = Math.floor(this.canvas.clientWidth * ratio), + h = Math.floor(this.canvas.clientHeight * ratio); + if (this.canvas.width !== w || this.canvas.height !== h) { + this.canvas.width = w; + this.canvas.height = h; + } + gl.viewport(0, 0, w, h); + gl.clearColor(0.65, 0.79, 0.8, 1); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.CULL_FACE); + gl.useProgram(this.sky); + gl.uniform1f(gl.getUniformLocation(this.sky, "uPitch"), camera.pitch); + gl.uniform1f(gl.getUniformLocation(this.sky, "uYaw"), camera.yaw); + gl.uniform1f(gl.getUniformLocation(this.sky, "uAspect"), w / h); + gl.bindVertexArray(null); + gl.drawArrays(gl.TRIANGLES, 0, 3); + this.vp = multiply( + perspective(Math.PI / 2.7, w / h, 0.06, 190), + viewMatrix(camera.eye, camera.yaw, camera.pitch), + ); + const start = performance.now(); + let rebuilt = 0; + for (const id of this.dirty) { + this.rebuild(id); + this.dirty.delete(id); + rebuilt++; + if (rebuilt >= 3 || performance.now() - start > 7) break; + } + gl.enable(gl.DEPTH_TEST); + gl.enable(gl.CULL_FACE); + gl.cullFace(gl.BACK); + gl.frontFace(gl.CCW); + gl.useProgram(this.program); + gl.uniformMatrix4fv( + gl.getUniformLocation(this.program, "uVP"), + false, + this.vp, + ); + gl.uniform3fv(gl.getUniformLocation(this.program, "uEye"), camera.eye); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture); + gl.uniform1i(gl.getUniformLocation(this.program, "uTexture"), 0); + gl.uniform1i( + gl.getUniformLocation(this.program, "uTextured"), + this.textured ? 1 : 0, + ); + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, this.effectTexture); + gl.uniform1i(gl.getUniformLocation(this.program, "uEffectTexture"), 1); + gl.uniform1i( + gl.getUniformLocation(this.program, "uEffectTextured"), + this.effectTextured ? 1 : 0, + ); + gl.uniform1f( + gl.getUniformLocation(this.program, "uPulse"), + Math.max(0, 1 - (performance.now() - this.bounceAt) / 600), + ); + this.triangles = 0; + for (const [id, m] of this.sections) { + const center = id.split(",").map((v) => Number(v) * 16 + 8); + if ( + Math.hypot(center[0] - camera.eye[0], center[2] - camera.eye[2]) > 135 + ) + continue; + gl.bindVertexArray(m.vao); + gl.drawArrays(gl.TRIANGLES, 0, m.count); + this.triangles += m.count / 3; + } + const dynamic = []; + for (const p of players) { + const c = p.color || [0.29, 0.46, 0.36], + yaw = p.yaw || 0; + boxVertices( + dynamic, + p.position, + { min: [-0.21, 0.63, -0.13], max: [0.21, 1.27, 0.13] }, + c, + 2, + () => false, + yaw, + ); + boxVertices( + dynamic, + p.position, + { min: [-0.23, 1.27, -0.23], max: [0.23, 1.73, 0.23] }, + [0.77, 0.61, 0.43], + 0, + () => false, + yaw, + ); + for (const side of [-1, 1]) { + boxVertices( + dynamic, + p.position, + { + min: [side * 0.13 - 0.085, 0.02, -0.09], + max: [side * 0.13 + 0.085, 0.63, 0.09], + }, + [0.25, 0.3, 0.32], + 0, + () => false, + yaw, + ); + boxVertices( + dynamic, + p.position, + { + min: [side * 0.31 - 0.085, 0.63, -0.1], + max: [side * 0.31 + 0.085, 1.24, 0.1], + }, + c, + 0, + () => false, + yaw, + ); + } + boxVertices( + dynamic, + p.position, + { min: [-0.18, 1.56, -0.234], max: [0.18, 1.64, -0.226] }, + [0.13, 0.19, 0.15], + 0, + () => false, + yaw, + ); + } + for (const e of entities) { + const def = entityDefinitions.get(e.kind || e.name) || {}, + color = (e.color || def.color || [192, 161, 123]).map((v) => v / 255), + boxes = e.render || + def.render || [{ min: [-0.3, 0, -0.3], max: [0.3, 0.8, 0.3] }]; + for (const b of boxes) + boxVertices(dynamic, e.position, b, color, 0, () => false, e.yaw || 0); + } + this.upload(this.dynamic, dynamic); + gl.bindVertexArray(this.dynamic.vao); + gl.drawArrays(gl.TRIANGLES, 0, this.dynamic.count); + this.triangles += this.dynamic.count / 3; + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.depthMask(false); + const translucent = [...this.sections] + .filter(([, m]) => m.transparent?.count) + .sort((a, b) => { + const dist = (id) => + Math.hypot( + ...id.split(",").map((v, i) => Number(v) * 16 + 8 - camera.eye[i]), + ); + return dist(b[0]) - dist(a[0]); + }); + for (const [, m] of translucent) { + gl.bindVertexArray(m.transparent.vao); + gl.drawArrays(gl.TRIANGLES, 0, m.transparent.count); + this.triangles += m.transparent.count / 3; + } + gl.depthMask(true); + gl.disable(gl.BLEND); + if (this.lines.count) { + gl.useProgram(this.line); + gl.uniformMatrix4fv( + gl.getUniformLocation(this.line, "uVP"), + false, + this.vp, + ); + gl.bindVertexArray(this.lines.vao); + gl.drawArrays(gl.LINES, 0, this.lines.count); + } + gl.bindVertexArray(null); + } + project(p) { + return project( + p, + this.vp, + this.canvas.clientWidth, + this.canvas.clientHeight, + ); + } +} diff --git a/client/style.css b/client/style.css new file mode 100644 index 0000000..6ded951 --- /dev/null +++ b/client/style.css @@ -0,0 +1,597 @@ +:root { + font-family: Inter, "Segoe UI", system-ui, sans-serif; + color: #f0f2ed; + background: #a8c6d0; + font-size: 14px; + --panel: rgba(28, 35, 31, 0.97); + --line: #4a544b; + --muted: #b2beb0; + --accent: #c0d3a9; +} +* { + box-sizing: border-box; +} +html, +body { + margin: 0; + height: 100%; + overflow: hidden; +} +button, +input { + font: inherit; +} +button { + color: inherit; + background: #39453b; + border: 1px solid #5d6a5d; + border-radius: 4px; + padding: 9px 12px; + cursor: pointer; +} +button:hover { + background: #4c5e4a; +} +button:focus-visible, +input:focus-visible { + outline: 2px solid #dfefba; + outline-offset: 3px; +} +button:disabled { + opacity: 0.5; + cursor: wait; +} +button.primary { + background: var(--accent); + border-color: var(--accent); + color: #253021; + font-weight: 650; +} +input { + background: #202821; + color: #f4f4ef; + border: 1px solid #576255; + border-radius: 4px; + padding: 10px; + width: 100%; +} +input[type="range"] { + padding: 0; + accent-color: #b9ce9e; +} +kbd { + font-size: 10px; + font-family: inherit; + color: #d7dfd3; + border: 1px solid #82907d75; + border-radius: 3px; + padding: 2px 4px; + background: #17231c55; + white-space: nowrap; +} +button kbd { + margin-left: 6px; +} +#world-canvas { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + display: block; + cursor: crosshair; +} +.topbar { + position: absolute; + inset: 22px 24px auto; + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 20px; + pointer-events: none; + text-shadow: 0 1px 4px #213a4380; +} +.identity { + display: flex; + align-items: center; + gap: 12px; +} +.identity > div { + display: flex; + flex-direction: column; + gap: 2px; +} +.identity strong { + font-size: 19px; + letter-spacing: -0.4px; + line-height: 1.15; +} +.world-name { + border: 0; + background: none; + padding: 0; + text-align: left; + font-size: 12px; + color: #e2ece0; + text-shadow: 0 1px 3px #18241d; + pointer-events: auto; +} +.world-name:hover { + background: none; + color: white; +} +#connection { + align-self: center; + font-size: 11px; + color: #edf4e9; + background: #273b2cb5; + padding: 5px 8px; + border-radius: 3px; + margin-left: 10px; +} +#connection.bad { + background: #713e30; +} +nav { + display: flex; + gap: 7px; + pointer-events: auto; +} +nav button { + background: #26362ed6; + border-color: #e0efd333; + box-shadow: 0 2px 8px #1d342615; + font-size: 12px; +} +#menu-button { + padding-inline: 13px; +} +#crosshair { + position: absolute; + left: 50%; + top: 50%; + width: 13px; + height: 13px; + transform: translate(-50%, -50%); + pointer-events: none; + filter: drop-shadow(0 1px 1px #112019); +} +#crosshair:before, +#crosshair:after { + content: ""; + position: absolute; + background: #fffdf5b3; +} +#crosshair:before { + left: 6px; + top: 0; + width: 1px; + height: 13px; +} +#crosshair:after { + left: 0; + top: 6px; + width: 13px; + height: 1px; +} +#target-label { + position: absolute; + left: 50%; + top: calc(50% + 28px); + transform: translateX(-50%); + font-size: 11px; + text-shadow: 0 1px 3px #172f21; + pointer-events: none; + opacity: 0.9; +} +footer { + position: absolute; + bottom: 23px; + left: 50%; + transform: translateX(-50%); + text-align: center; + pointer-events: none; +} +#selected-name { + font-size: 12px; + color: #fffdf6; + text-shadow: 0 1px 4px #163622; + margin-bottom: 9px; + min-height: 17px; +} +#hotbar { + display: flex; + gap: 3px; + background: #1b2a22b8; + border: 1px solid #e0e9d633; + padding: 5px; + border-radius: 5px; + pointer-events: auto; + box-shadow: 0 5px 20px #20352730; +} +.slot { + width: 49px; + height: 49px; + position: relative; + padding: 8px; + border: 1px solid #9cac9340; + background: #46513b8c; + border-radius: 2px; + display: grid; + place-items: center; +} +.slot.active { + background: #dce7b82e; + border: 2px solid #e6edbc; + padding: 7px; +} +.slot small { + position: absolute; + left: 3px; + top: 2px; + font-size: 9px; + color: #e8edde; +} +.swatch { + display: block; + width: 26px; + height: 26px; + image-rendering: pixelated; + background: var(--block-color, #aaaaaa); + box-shadow: + inset -6px -5px 0 #0003, + inset 4px 4px 0 #fff2; + transform: rotate(-2deg); +} +#play-hint { + font-size: 11px; + text-shadow: 0 1px 4px #15271c; + margin-top: 9px; + color: #e3e8d7; + white-space: nowrap; +} +.bottom-left { + position: absolute; + left: 24px; + bottom: 25px; + max-width: min(355px, 30vw); + pointer-events: none; +} +#hints { + display: flex; + flex-wrap: wrap; + gap: 7px 11px; + color: #e1e9db; + font-size: 10px; + line-height: 1.7; + text-shadow: 0 1px 3px #25392b; +} +#chat-log { + display: flex; + flex-direction: column; + gap: 4px; + margin-bottom: 14px; + font-size: 12px; + text-shadow: 0 1px 3px #000; + max-height: 180px; + overflow: hidden; + word-break: break-word; +} +#chat-log div { + background: #20332ba6; + padding: 5px 8px; + border-radius: 3px; + width: fit-content; +} +#chat-log .system { + color: #e3dfb5; +} +#chat-form { + pointer-events: auto; + margin-bottom: 10px; + width: min(400px, 80vw); +} +#chat-input { + font-size: 12px; + background: #20352bec; +} +#labels { + position: absolute; + inset: 0; + pointer-events: none; + overflow: hidden; +} +.player-label { + position: absolute; + white-space: nowrap; + font-size: 11px; + background: #203629a8; + padding: 3px 6px; + border-radius: 3px; + transform: translate(-50%, -100%); +} +.panel { + position: absolute; + top: 86px; + right: 24px; + width: 315px; + max-height: calc(100vh - 116px); + overflow: auto; + background: var(--panel); + border: 1px solid #93a38a66; + box-shadow: 0 10px 30px #10281933; + border-radius: 6px; + padding: 20px; +} +.panel-head { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 12px; + margin-bottom: 18px; +} +.panel-head h1 { + font-size: 18px; + font-weight: 650; + margin: 2px 0 0; + letter-spacing: -0.3px; +} +.panel-head button { + background: none; + border: 0; + font-size: 24px; + line-height: 20px; + padding: 0 2px; + color: #b6c4b1; +} +.panel-head p { + margin: 5px 0 0; +} +.panel label { + display: block; + font-size: 12px; + color: #c8d3c2; + margin-bottom: 7px; +} +.muted { + color: var(--muted); + font-size: 12px; + line-height: 1.6; +} +.wide { + display: block; + width: 100%; + margin-top: 10px; +} +.inline { + display: flex; + gap: 6px; + margin-bottom: 20px; +} +.inline input { + min-width: 0; +} +.inline button { + font-size: 11px; + padding: 8px; +} +.rule { + border-top: 1px solid var(--line); + margin: 20px 0; +} +.world-row { + display: block; + width: 100%; + text-align: left; + margin-top: 8px; + background: #2c382f; +} +.world-row small { + display: block; + color: var(--muted); + font-size: 11px; + margin-top: 4px; +} +.world-row.current { + border-color: #bacda4; +} +.library { + width: min(610px, calc(100vw - 48px)); + padding-bottom: 16px; +} +.library #catalog-search { + position: sticky; + top: 0; + z-index: 1; +} +#catalog-list { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 7px; + max-height: 55vh; + overflow: auto; +} +.catalog-item { + display: flex; + gap: 9px; + align-items: center; + min-width: 0; + text-align: left; + background: #2f3a30; + padding: 10px; + font-size: 11px; +} +.catalog-item .swatch { + flex-shrink: 0; + width: 22px; + height: 22px; +} +.catalog-item > span:last-child { + min-width: 0; + overflow-wrap: anywhere; +} +.catalog-item small { + display: block; + font-size: 9px; + color: #aebca6; + margin-top: 5px; + overflow-wrap: anywhere; +} +.catalog-empty { + grid-column: 1/-1; + color: var(--muted); + padding: 20px 0; +} +.diagnostics dl { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 9px 10px; + font-size: 12px; + margin: 0 0 20px; +} +.diagnostics dt { + color: #aebeaa; +} +.diagnostics dd { + margin: 0; + text-align: right; + font-variant-numeric: tabular-nums; + overflow-wrap: anywhere; +} +#toast { + position: absolute; + top: 90px; + left: 50%; + transform: translateX(-50%); + background: #263a2cf2; + border: 1px solid #b7cba380; + border-radius: 4px; + padding: 11px 16px; + font-size: 13px; + max-width: min(580px, 90vw); + text-align: center; + box-shadow: 0 2px 10px #0002; +} +#toast.error { + background: #633c2ff5; + border-color: #d0a68f; +} +#match { + position: absolute; + top: 92px; + left: 24px; + background: #26392cd6; + border: 1px solid #e2e3c24a; + padding: 12px 16px; + border-radius: 4px; + font-size: 13px; + max-width: 360px; +} +#fatal { + position: absolute; + inset: 30% 20% auto; + background: #312e25ed; + border: 1px solid #d4b696; + padding: 30px; + line-height: 1.6; + border-radius: 5px; +} +body.locked .topbar, +body.locked #hints, +body.locked #play-hint { + opacity: 0.35; +} +body.locked .topbar:hover { + opacity: 1; +} +[hidden] { + display: none !important; +} +@media (max-width: 850px) { + .topbar { + inset: 14px 14px auto; + } + .identity { + gap: 8px; + } + #connection { + margin-left: 1px; + font-size: 10px; + } + nav button { + font-size: 11px; + padding: 9px 8px; + } + nav kbd { + display: none; + } + .bottom-left { + left: 14px; + bottom: 115px; + max-width: 75vw; + } + #hints { + display: none; + } + footer { + bottom: 14px; + } + .panel { + right: 14px; + top: 77px; + max-height: calc(100vh - 94px); + } + .slot { + width: 40px; + height: 44px; + } + #play-hint { + white-space: normal; + width: 360px; + font-size: 10px; + } + #catalog-list { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} +@media (max-width: 520px) { + .identity strong { + font-size: 15px; + } + .identity svg { + width: 22px; + } + .topbar { + gap: 6px; + } + #connection { + display: none; + } + #diagnostics-button { + font-size: 0; + } + #diagnostics-button:before { + content: "F3"; + font-size: 12px; + } + .slot { + width: 34px; + height: 40px; + padding: 6px; + } + .swatch { + width: 23px; + height: 23px; + } + .library { + width: calc(100vw - 28px); + } + #target-label { + max-width: 90vw; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + #fatal { + inset: 25% 14px auto; + } +} diff --git a/client/tests/math.test.js b/client/tests/math.test.js new file mode 100644 index 0000000..d33d489 --- /dev/null +++ b/client/tests/math.test.js @@ -0,0 +1,72 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + direction, + raycast, + rayBox, + multiply, + perspective, + viewMatrix, + project, + unitBox, +} from "../math.js"; +test("camera axes and world projection match the server coordinate convention", () => { + assert.deepEqual(direction(0, 0), [0, 0, -1]); + const east = direction(Math.PI / 2, 0); + assert.ok(Math.abs(east[0] - 1) < 1e-8); + const vp = multiply( + perspective(Math.PI / 2, 1, 0.1, 100), + viewMatrix([0, 2, 8], 0, 0), + ); + const center = project([0, 2, 0], vp, 100, 100); + assert.ok(Math.abs(center[0] - 50) < 1e-5 && Math.abs(center[1] - 50) < 1e-5); + assert.equal(project([0, 2, 20], vp, 100, 100), null); +}); +test("DDA resolves negative world coordinates and nearest entry face", () => { + const blocks = new Map([ + ["-1,0,-2", 1], + ["-1,0,-4", 1], + ]), + materials = new Map([[1, { render: [unitBox] }]]); + const hit = raycast([-0.5, 0.5, 0], [0, 0, -1], blocks, materials); + assert.deepEqual(hit.pos, [-1, 0, -2]); + assert.deepEqual(hit.normal, [0, 0, 1]); + assert.equal(hit.distance, 1); +}); +test("ray selection respects slab geometry and reach instead of selecting empty half", () => { + const blocks = new Map([["0,0,-2", 1]]), + materials = new Map([ + [1, { render: [{ min: [0, 0, 0], max: [1, 0.5, 1] }] }], + ]); + assert.equal(raycast([0.5, 0.75, 0], [0, 0, -1], blocks, materials), null); + assert.ok(raycast([0.5, 0.25, 0], [0, 0, -1], blocks, materials)); + assert.equal( + raycast([0.5, 0.25, 10], [0, 0, -1], blocks, materials, 6), + null, + ); +}); +test("axis aligned ray slabs reject parallel paths outside a box", () => { + assert.equal(rayBox([2, 0.5, 3], [0, 0, -1], [0, 0, 0], [1, 1, 1], 6), null); + assert.equal( + rayBox([0.5, 0.5, 3], [0, 0, -1], [0, 0, 0], [1, 1, 1], 6).distance, + 2, + ); +}); + +test("selection intersects a fence extension owned by the cell below", () => { + const blocks = new Map([["0,0,-2", 1]]), + materials = new Map([ + [1, { render: [{ min: [0.375, 0, 0.375], max: [0.625, 1.5, 0.625] }] }], + ]); + const hit = raycast([0.5, 1.25, 0], [0, 0, -1], blocks, materials); + assert.deepEqual(hit.pos, [0, 0, -2]); + assert.deepEqual(hit.normal, [0, 0, 1]); + assert.equal(hit.distance, 1.375); +}); +test("package geometry is selectable across its documented three-block extent", () => { + const blocks = new Map([["0,0,0", 1]]); + const materials = new Map([[1, { render: [{min:[0,0,0],max:[1,3,1]}] }]]); + const hit = raycast([0.5,2.5,4], [0,0,-1], blocks, materials, 6); + assert.deepEqual(hit.pos,[0,0,0]); + assert.deepEqual(hit.normal,[0,0,1]); +}); diff --git a/client/tests/renderer-smoke.html b/client/tests/renderer-smoke.html new file mode 100644 index 0000000..0c14d22 --- /dev/null +++ b/client/tests/renderer-smoke.html @@ -0,0 +1,64 @@ +Shacraft renderer fixture + diff --git a/crates/shacraft-compat/Cargo.toml b/crates/shacraft-compat/Cargo.toml new file mode 100644 index 0000000..edaa168 --- /dev/null +++ b/crates/shacraft-compat/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "shacraft-compat" +version.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +serde.workspace = true +serde_json.workspace = true +clap.workspace = true +shacraft-core.workspace = true +flate2 = "1" +sha2 = "0.10" +tempfile = "3" +cesu8 = "1" +lz4_flex = "0.13" +xxhash-rust = { version = "0.8", features = ["xxh32"] } +rustix = { version = "1", features = ["fs"] } +rusqlite = { version = "=0.40.2", features = ["bundled"] } + +[dev-dependencies] diff --git a/crates/shacraft-compat/fixtures/java26_2-world/custom-metadata.txt b/crates/shacraft-compat/fixtures/java26_2-world/custom-metadata.txt new file mode 100644 index 0000000..ed2066d --- /dev/null +++ b/crates/shacraft-compat/fixtures/java26_2-world/custom-metadata.txt @@ -0,0 +1 @@ +own fixture; retain unknown file diff --git a/crates/shacraft-compat/fixtures/java26_2-world/data/minecraft/game_rules.dat b/crates/shacraft-compat/fixtures/java26_2-world/data/minecraft/game_rules.dat new file mode 100644 index 0000000000000000000000000000000000000000..64edf80b5b10fda83d30ab8cdb81a222737751dc GIT binary patch literal 821 zcmV-51Iqj#iwFP!00000|Ake{j@&j7q%b+HVfe7Iv(9Fd*okexK>Ptd=L3AomFN+B zBzpKzNNQ#$Cx5z&8qJE-E|Akan(VHws%~BhaV36Gl&BGJtajW6+NIBNpreyVa*Bg? zolJr7EjEpKxg6RW-|nRfe#n7emOx-NwydP$?bu1}c3w2%uE^f|BZ8EAX*ovfI48JS zm$%-~Y}Lav-@R`F=27O=*8yB7>n5Zd!j}%Q)5c+~&)-%MooY zD@}=I;HeUj|G92?${w|MQ}gJgrBjU|4uMI@1OAB3ri5?lUZS>6Cy75S0-X@zrV+m` zXLdex`oNhYCC{K&)bGd`smOx5y2Z#&$<|v7>Ew=CZE0$;K+qY#B_pFBafA;5v!aR3 z33{(-+K7)ueH~cNO~M*_jFQ5X@C+9%eQU%|#f8B9A1{#KEg?r~3;@(K88{+v$IzD& z_{G7u1$BP=H1!+t*IMK#9j6{*4?ZL$SG=RqBzz(abYB{AU1xs6$HsS(6n61%6D1G8bK4BQN4L+mc~{%!B5UM-M|Les!>&s` zDv0Xrg@I_8hdjLlhZaJDd33He;?w`J)k4^GcHo&V)OfvIB6Xl#|CmRZ1CYL{k)FrI zdZl-|os^6)1W?{S-4P7G&rH>2pvci>{12{qS!&Z}+T@l30)MQQ%ZzZcZ?R&E8M~A| zL-k`C#)L+SB{VO9+27#csu3@WFlqJV+8TOt$=fX8`?}reGPJfG?Pw-e;CbEkDf8Qi zpNrr9`jt0CQ#u^8k34AYyqjm~#yCkm37B#HUZkS~<#~q-K)E|Wa158`y21_KeJlm`h)lmBRujut_J`BCODc5 literal 0 HcmV?d00001 diff --git a/crates/shacraft-compat/fixtures/java26_2-world/data/minecraft/world_gen_settings.dat b/crates/shacraft-compat/fixtures/java26_2-world/data/minecraft/world_gen_settings.dat new file mode 100644 index 0000000000000000000000000000000000000000..d45181fbd4353f5373daa15295c146cbfe503e34 GIT binary patch literal 301 zcmV+|0n+{-iwFP!00000|AmrWZi6roga?HnApI5X8G464_Y8eS4lKcnv5~#B%I#|) z0n$*_50<>1S$|_Y1yY2iU=d)qH@b6qQIlhY2pv(0^9Ya~NRt&zxntWE+*xwoo0hU6 z?WEBzMb=17g%uUQn=i88#;P(!a&{V9C1JEgtQw(HOWKG180J40?c~~D@%XI7-Fl$v0uap`P32~=0=qgJk{5N z_^>Z?nQO{5`PnW5#&f`Bn2Ydkh?zUn*@9w3txr#UtGr;m&KpgqSmxSDM-%1a!gsZ? z%IW!^uj{1Czu*@)Jg9z=kH_4$`yXw^18lJS@L%xLKeYcyK=y_oT58nMq2byDu}(rz2MZc> zXb>FELAV#>8X9d-nwp}q2&^yBbpPiY{C|(41bLboKmY**5I_I{1Q0*~0R#{T zg1~v_XEz9)G$Mci0tg_000IagfB*srAn+$}trhRyj;-nGbkW=Lg&aShSeEs@vXH7* zobtrzZETCD`&AKt^rbtiA87lxhvRT&=(+DVA4k=Et&owPboHI9rA>b@S3{A@?uGKQ zuBV-Z-s(H02Wi@8M$R_-U*_k?uuF+oT{N4GWGXA7?Y(7nEj$Y;Wj8kA4+IcE009IL RKmY**5I_I{1Q7TSfnO-4L4g1O literal 0 HcmV?d00001 diff --git a/crates/shacraft-compat/fixtures/java26_2-world/level.dat b/crates/shacraft-compat/fixtures/java26_2-world/level.dat new file mode 100644 index 0000000000000000000000000000000000000000..20713bd3b8c4bb9955e28a6a7c7b3091f86865ce GIT binary patch literal 309 zcmV-50m}X#iwFP!00000|3y&EO2a@9{?;UIn(9IF0^WKP?7@RaEr?R3&{B^wWVdE< zf5PtC5TB+m;=8#?E6!mUK4!k3DS!g$f&vvNx!mn!^`%1h?nMaFeE1y2KZ=pDPLpED zYjV7@PJm&gZ1pKPkRshkEpVy?`6Fqu>6#v56P&Mw+Y5K^$Z&sJ8ArfNYk=pU6vdK! zSSjjyI(9hRETX&2H`JOblE(Vs=2)w~Wyl&Cs=A+ZOn8(x16`@55tXA|xU*5BwNCL2 zNk{E)TwuIC3dbyKLyfO(hzz4>Q3{V#lQap=o}!O(mLq+QNs!KOujjqaQtX8qpv!el zgUnSBx=|Da!&Dj>Bq{kVIAfT+k$~#+g4ugQr?bp+wxLg z>ek{GI}zq~sBvwQA;S!J-o{b3IKmmJxz)eX?RoC^4}3p&4+3GyheBF%J+y-W2!H?x zfB*=900@8p2!H?xfPf_kuq397me2`}AOHd&00JNY0w4eaAOHd&00JO@K%mH|T;W!& zGz%Y&D^(qcxR=lRU@8s1d2xY zL(Z1yFxMXvSHc^a^TLhtsh_>*G&g*;-K8V;UUv2`Wbc%9!YIk)f+NtP*Yb#VDXj=p zbT_7@(-5Z6#Y#BuFk*bovT!wkNw1~c$u0Dwk?Xj&Av+$WZ~5&a7e&^Lqbfh5$Dv3~ zd=Ms%5}c;6rVVC|_L#M$98XTCmXLfgo`W$X1=0j7!HtvcpL;H-sx&t_qf!c2MoK-J z3}y6nzN9(x6+FgzWk+)muQ8Ys>2s*$wg|ng>=P4F4%*~^h$j4wO!`7szto}TFE;SH zwmS$#?!GkRVtuVT55KRDr55`$bFHr)O2XrtJ@qRiGrYCwHG7Dv z!Hf|P9jL!SrMVOU;5g9SVZ{DNZa=6(?JbWe0k;a?GvskX;F#?mir7S}P4Hg!`x?on z&t|jV=AD`S{Ra3ikXU5kd~mxgL%1{fI=Ps9pN=ON(@)d$jp_O1+w|k~yaMj_h;VFb z9VAlG7+i4oq=?5*t{T*yq>|Cr7XS~u9XUKs@rPR;)*-OjkCkGhq6s)_g5MEz8L3*B zGt<^J2rTMK9Oh?s1+cc8)}w7%z8sH5b{(&eSny67-II) zb}GYxZa{sXrAUMhtYutas92vi8CMp|fk%s&aX{0%J`1^s+rrRJS~SYBt<8Umty4y* zQW?h>wfij9cw_)74s;g?k_~#A47R?6L8hsdu(aPkmSkFO>4aHGQp`GcHE7j=d-#E6 zd5W8JYL|GYrp2RjFm5dB8WDscZCt8@Yv;x6?^deL+>q5}L@lJ*6~u|7QOMBnq1uU- zAqz2@;Ot9X=(MyNWsLx89m1^4HxqM^N&7rL}?DIB3jWs6jnl`wx-KLPkxsIa~? zCMuK4S}LNT(89A7xBiwwZ2g&kf2|191o!Z;vs3tCJ28gNC3H>6u6(N438zuTCNvLA iAzn#IK6o-`?}rF$xw1q~aDx(VS^firLDOm^1ONbssX$Ty literal 0 HcmV?d00001 diff --git a/crates/shacraft-compat/fixtures/world-template/data/minecraft/game_rules.dat b/crates/shacraft-compat/fixtures/world-template/data/minecraft/game_rules.dat new file mode 100644 index 0000000000000000000000000000000000000000..e295c2eb880fa69b8b69fdf92700a6a81d3002f9 GIT binary patch literal 821 zcmV-51Iqj#iwFP!00000|Ake{lG`>A1Z#a-m&=EZ9Xp$KVmq;`T;+T~&iR0xd_|3j z5s3&71^^|?Cx3bx6eR-GR^_xS0qW`L?it()aVwrEO4NwARy%G3ZPTA|po5bKa*Bg? zolJr7Uu+ujV!5<2zTHU`{E!cRUJe4Qv1KI{Z^lk)xAmeC4+VPf4>+XMOUp4*#~I*Z zRi1;KDnxnkVTTK^*8Hq@F`a0=T+Wh9lD`hds|oggInma#(v(;Ro)AFmm*sdcbVO0> z_iPy;ZO?74``fzZ2|a4>rsmN}OUIf+90HS)dwda_o3b@aUnRhGI!b(DanK1NUNz#) za%by9r}vyCQu4%VCHaT8A6)si?05%ehHJLyu8Xm;g_7(bD%u{8;=TFn{BP^6$%$qcjE(>X{4@5x8S` zPYL?s;=4jRzj<8x8}WJVVw8?k4>t!N62KL2X*3CcaSV2UH{z~Fek8}ncaju7pA}st zE&r?wnzt|!CqG>0a}yDoFHYR1l` zPgMPwhB2X$V#mxoV$L^2xNXGq;+XW5hpVkL^yHGa*}xBVyU}INZ9Cf0OsXLBy6Y3L z0rXSBT3em4K&MZ6Lo{W=G5f$l&!^oyM`DbVYf~^XuU`u|+Ebo)7z)YV9zLVEsD|sZ zHCMwWst$Ju2Nrr>8a^CryGExoGGa-t!wRV8f0l+)@FpvBUkd4zw=!w?fN@}zV_a{$ zylpNaC1S$|_Y1yY2iU=d)qH@b6qQIlhY2pv(0^9Ya~NRt&zxntWE+*xwoo0hU6 z?WEBzMb=17g%uUQn=i88#;P(!a&{V9C1JEgtQw(HOWKG180J40?c~~D@%XI7-Fl$v0uap`P32~=0=qgJk{5N z_^>Z?nQO{5`PnW5#&f`Bn2Ydkh?zUn*@9w3txr#UtGr;m&KpgqSmxSDM-%1a!gsZ? z%IW!^uj{1Czu*@)Jg9z=kH_4$`yXw^18lJS@L%xLKeYcyK=y_oGS|eFzSuNY_#e94bNnKw7N3rkB_R$1CA>!reMD+#g!TQSj0l;ORR> zu^=Coin`v8?e|w_=LIs~P-~`08taFd-&*!hhOCjHs{4PA36FR)*p*ruQ90U%8ygX= zb&6+5I% Result<(i32, i32)> { + let n = path + .file_name() + .and_then(|s| s.to_str()) + .context("region_filename")?; + let a: Vec<_> = n.split('.').collect(); + ensure!( + a.len() == 4 && a[0] == "r" && a[3] == "mca", + "region_filename: {n}" + ); + Ok((a[1].parse()?, a[2].parse()?)) +} +impl Region { + pub(crate) fn open(path: &Path, write: bool) -> Result { + let (rx, rz) = region_coords(path)?; + let mut file = OpenOptions::new().read(true).write(write).open(path)?; + let len = file.metadata()?.len(); + ensure!( + (8192..=8 * 1024 * 1024 * 1024).contains(&len) && len % 4096 == 0, + "region_length: {}", + path.display() + ); + let mut header = [0; 4096]; + file.read_exact(&mut header)?; + let mut locations = [0; 1024]; + let mut extents = Vec::new(); + for (i, b) in header.chunks_exact(4).enumerate() { + let n = u32::from_be_bytes(b.try_into()?); + locations[i] = n; + if n != 0 { + let start = (n >> 8) as u64; + let count = (n & 255) as u64; + ensure!( + start >= 2 && count > 0 && (start + count) * 4096 <= len, + "region_location: outside file" + ); + extents.push((start, start + count)) + } + } + extents.sort_unstable(); + ensure!( + extents.windows(2).all(|w| w[0].1 <= w[1].0), + "region_overlap: overlapping chunk sectors" + ); + Ok(Self { + file, + path: path.into(), + rx, + rz, + locations, + }) + } + pub(crate) fn create(path: &Path) -> Result { + fs::create_dir_all(path.parent().context("region parent")?)?; + let mut f = OpenOptions::new().write(true).create_new(true).open(path)?; + f.write_all(&[0; 8192])?; + f.sync_all()?; + Self::open(path, true) + } + fn coordinates(&self, index: usize) -> Result<(i32, i32)> { + let x = self + .rx + .checked_mul(32) + .and_then(|v| v.checked_add((index % 32) as i32)) + .context("region_coordinate_overflow")?; + let z = self + .rz + .checked_mul(32) + .and_then(|v| v.checked_add((index / 32) as i32)) + .context("region_coordinate_overflow")?; + ensure!( + (-1_875_000..=1_874_999).contains(&x) && (-1_875_000..=1_874_999).contains(&z), + "region_coordinate_limit" + ); + Ok((x, z)) + } + pub(crate) fn read(&mut self, index: usize) -> Result> { + let location = self.locations[index]; + if location == 0 { + return Ok(None); + } + self.file + .seek(SeekFrom::Start((location >> 8) as u64 * 4096))?; + let mut head = [0; 5]; + self.file.read_exact(&mut head)?; + let len = u32::from_be_bytes(head[..4].try_into()?) as usize; + ensure!( + len >= 1 && len + 4 <= (location as usize & 255) * 4096, + "region_chunk_length: outside allocated sectors" + ); + let kind = head[4] & 127; + let external = head[4] & 128 != 0; + let mut bytes = if external { + ensure!(len == 1, "external_chunk_length: expected1"); + let (x, z) = self.coordinates(index)?; + io::read_limited( + &self.path.with_file_name(format!("c.{x}.{z}.mcc")), + nbt::MAX_BYTES, + )? + } else { + let mut b = vec![0; len - 1]; + self.file.read_exact(&mut b)?; + b + }; + bytes = match kind { + 1 => io::inflate(flate2::read::GzDecoder::new(bytes.as_slice()))?, + 2 => io::inflate(flate2::read::ZlibDecoder::new(bytes.as_slice()))?, + 3 => { + ensure!(bytes.len() <= nbt::MAX_BYTES, "chunk_limit"); + bytes + } + 4 => lz4_decode(&bytes)?, + _ => bail!( + "unsupported_compression: {kind} in {} slot{index}", + self.path.display() + ), + }; + Ok(Some(nbt::decode(&bytes)?)) + } + pub(crate) fn write(&mut self, index: usize, name: &str, tag: &Tag) -> Result<()> { + let bytes = nbt::encode(name, tag)?; + let mut encoder = + flate2::write::ZlibEncoder::new(Vec::new(), flate2::Compression::default()); + encoder.write_all(&bytes)?; + let bytes = encoder.finish()?; + let sectors = (bytes.len() + 5).div_ceil(4096); + let offset = self.file.seek(SeekFrom::End(0))? / 4096; + ensure!(offset < 1 << 24, "region_limit: sector offset"); + let (x, z) = self.coordinates(index)?; + let external = self.path.with_file_name(format!("c.{x}.{z}.mcc")); + let count = if sectors > 255 { + let mut out = File::create(&external)?; + out.write_all(&bytes)?; + out.sync_all()?; + self.file.write_all(&1u32.to_be_bytes())?; + self.file.write_all(&[130])?; + self.file.write_all(&vec![0; 4091])?; + 1 + } else { + self.file + .write_all(&((bytes.len() + 1) as u32).to_be_bytes())?; + self.file.write_all(&[2])?; + self.file.write_all(&bytes)?; + self.file + .write_all(&vec![0; sectors * 4096 - bytes.len() - 5])?; + if external.exists() { + fs::remove_file(external)? + } + sectors + }; + let location = ((offset as u32) << 8) | count as u32; + self.file.seek(SeekFrom::Start(index as u64 * 4))?; + self.file.write_all(&location.to_be_bytes())?; + self.file.seek(SeekFrom::Start(4096 + index as u64 * 4))?; + self.file.write_all( + &(SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as u32).to_be_bytes(), + )?; + self.locations[index] = location; + self.file.sync_all()?; + Ok(()) + } + fn clear(&mut self, index: usize) -> Result<()> { + self.file.seek(SeekFrom::Start(index as u64 * 4))?; + self.file.write_all(&[0; 4])?; + self.locations[index] = 0; + self.file.sync_all()?; + Ok(()) + } +} + +fn lz4_decode(input: &[u8]) -> Result> { + let mut p = 0; + let mut out = Vec::new(); + loop { + ensure!(p + 21 <= input.len(), "lz4_header: truncated"); + ensure!(&input[p..p + 8] == b"LZ4Block", "lz4_header: invalid magic"); + let token = input[p + 8]; + let compressed = u32::from_le_bytes(input[p + 9..p + 13].try_into()?) as usize; + let original = u32::from_le_bytes(input[p + 13..p + 17].try_into()?) as usize; + let hash = u32::from_le_bytes(input[p + 17..p + 21].try_into()?); + p += 21; + ensure!( + original <= 1usize << (10 + (token & 15)) + && original <= nbt::MAX_BYTES + && compressed <= nbt::MAX_BYTES + && p + compressed <= input.len(), + "lz4_limit: block size" + ); + if original == 0 && compressed == 0 { + ensure!( + hash == 0 && p == input.len(), + "lz4_terminal: trailing bytes/checksum" + ); + break; + } + ensure!( + original > 0 && compressed > 0 && out.len() + original <= nbt::MAX_BYTES, + "lz4_limit: decompressed bytes" + ); + let bytes = &input[p..p + compressed]; + p += compressed; + let decoded = match token & 240 { + 16 => { + ensure!(original == compressed, "lz4_length: raw size"); + bytes.to_vec() + } + 32 => lz4_flex::block::decompress(bytes, original)?, + _ => bail!("lz4_method: invalid"), + }; + ensure!( + decoded.len() == original + && (xxhash_rust::xxh32::xxh32(&decoded, 0x9747b28c) & 0x0fff_ffff) == hash, + "lz4_checksum: mismatch" + ); + out.extend(decoded) + } + Ok(out) +} + +fn state(p: &Tag) -> Result { + let p = p.compound()?; + let name = get(p, "Name")?.string()?; + let mut props = Vec::new(); + if let Some(t) = p.get("Properties") { + for (k, v) in t.compound()? { + props.push(format!("{k}={}", v.string()?)) + } + } + Ok(if props.is_empty() { + name.into() + } else { + format!("{name}[{}]", props.join(",")) + }) +} +fn palette_entry(state: &str) -> Tag { + let (name, props) = state + .split_once('[') + .map(|(a, b)| (a, Some(b.trim_end_matches(']')))) + .unwrap_or((state, None)); + let mut c = BTreeMap::from([("Name".into(), Tag::String(name.into()))]); + if let Some(props) = props { + c.insert( + "Properties".into(), + Tag::Compound( + props + .split(',') + .map(|p| { + let (k, v) = p.split_once('=').expect("core canonical state"); + (k.into(), Tag::String(v.into())) + }) + .collect(), + ), + ); + } + Tag::Compound(c) +} +fn unpack(container: &Compound, count: usize, min_bits: u32) -> Result<(Vec, Vec)> { + let p = get(container, "palette")?.list(10)?; + ensure!(!p.is_empty() && p.len() <= count, "anvil_palette: size"); + let palette = p.iter().map(state).collect::>>()?; + let indices = unpack_indices(container, p.len(), count, min_bits)?; + Ok((palette, indices)) +} +fn unpack_indices(c: &Compound, n: usize, count: usize, min_bits: u32) -> Result> { + ensure!(n > 0 && n <= count, "anvil_palette: size"); + if n == 1 { + return Ok(vec![0; count]); + } + let bits = (usize::BITS - (n - 1).leading_zeros()).max(min_bits); + let per = 64 / bits as usize; + let data = get(c, "data")?.longs()?; + ensure!( + data.len() == count.div_ceil(per), + "anvil_data: long-array length" + ); + let mask = (1u64 << bits) - 1; + let mut indices = Vec::with_capacity(count); + for i in 0..count { + let index = ((data[i / per] as u64 >> ((i % per) * bits as usize)) & mask) as usize; + ensure!(index < n, "anvil_data: palette index"); + indices.push(index) + } + Ok(indices) +} +fn packed(cells: &[u32; 4096], registry: &[String]) -> Tag { + let mut palette = Vec::new(); + let mut mapping = BTreeMap::new(); + let mut indices = Vec::with_capacity(4096); + for block in cells { + let n = mapping.len(); + let id = *mapping.entry(*block).or_insert_with(|| { + palette.push(palette_entry(®istry[*block as usize])); + n + }); + indices.push(id) + } + let mut c = BTreeMap::from([("palette".into(), Tag::List(10, palette))]); + if mapping.len() > 1 { + let bits = (usize::BITS - (mapping.len() - 1).leading_zeros()).max(4); + let per = 64 / bits as usize; + let mut data = vec![0i64; 4096usize.div_ceil(per)]; + for (i, id) in indices.into_iter().enumerate() { + data[i / per] |= ((id as u64) << ((i % per) * bits as usize)) as i64 + } + c.insert("data".into(), Tag::LongArray(data)); + } + Tag::Compound(c) +} +fn check_chunk(c: &Compound, x: i32, z: i32, mode: Mode, report: &mut Report) -> Result<()> { + ensure!( + get(c, "xPos")?.int()? == x && get(c, "zPos")?.int()? == z, + "chunk_position: header/NBT mismatch" + ); + let version = get(c, "DataVersion")?.int()?; + ensure!( + mode != Mode::Exact || version == DATA_VERSION, + "unsupported_data_version: chunk{x},{z} uses{version}, exact requires4903" + ); + if version != DATA_VERSION { + report.issue( + "unverified_chunk_version", + "unsupported", + format!("chunk:{x},{z}"), + format!("{version}; modern palette schema decoded without migration"), + ) + } + let sections = get(c, "sections")?.list(10)?; + ensure!(sections.len() <= 256, "chunk_limit: section count"); + let mut ys = BTreeSet::new(); + for sec in sections { + let sec = sec.compound()?; + let y = get(sec, "Y")?.numeric_i32()?; + ensure!( + (-128..=127).contains(&y) && ys.insert(y), + "chunk_sections: invalid/duplicate Y" + ); + if let Some(biomes) = sec.get("biomes") { + let b = biomes.compound()?; + let p = get(b, "palette")?.list(8)?; + for biome in p { + biome.string()?; + } + unpack_indices(b, p.len(), 64, 1)?; + } + } + Ok(()) +} +fn region_dimension(root: &Path, path: &Path) -> Result> { + if path.extension().and_then(|s| s.to_str()) != Some("mca") { + return Ok(None); + } + let parent = path.parent().context("region parent")?; + if parent.file_name().and_then(|s| s.to_str()) != Some("region") { + return Ok(None); + } + region_coords(path)?; + let dimension = parent + .parent() + .context("dimension")? + .strip_prefix(root)? + .to_str() + .context("dimension UTF8")? + .replace('\\', "/"); + // Only Java's actual dimension locations are interpreted as worlds. + // Other region-shaped files, including portable originals, stay opaque. + if !dimension.is_empty() + && dimension != "DIM-1" + && dimension != "DIM1" + && !(dimension.starts_with("dimensions/") && dimension.split('/').count() >= 3) + { + return Ok(None); + } + Ok(Some(dimension)) +} +fn world_name(dimension: &str) -> String { + match dimension { + "" => "main".into(), + "DIM-1" => "main_nether".into(), + "DIM1" => "main_end".into(), + s => { + use sha2::Digest; + format!("dim_{:x}", sha2::Sha256::digest(s.as_bytes()))[..36].into() + } + } +} + +pub fn import_anvil(source: &Path, destination: &Path, mode: Mode) -> Result { + let stage = io::stage(destination)?; + ensure!( + !stage + .path() + .canonicalize()? + .starts_with(source.canonicalize()?), + "unsafe_destination: import destination must be outside source world" + ); + let compat = stage.path().join("compat"); + fs::create_dir(&compat)?; + let original = compat.join("original"); + let mut report = Report::new("anvil", mode); + io::copy_source(source, &original, &compat.join("files.jsonl"), &mut report)?; + let (_, level) = nbt::decode(&io::gzip_read(&original.join("level.dat"))?)?; + let version = get(get(level.compound()?, "Data")?.compound()?, "DataVersion")?.int()?; + ensure!( + mode != Mode::Exact || version == DATA_VERSION, + "unsupported_data_version: level.dat uses{version}, exact requires4903" + ); + report.data_version = version; + let mut store = WorldStore::open(stage.path(), 32)?; + store.create_world("main", None)?; + let mut dimensions = BTreeMap::from([( + "main".into(), + Dimension { + path: String::new(), + revision: 0, + }, + )]); + let mut operations = 0u64; + io::visit_files( + &original, + &mut |path| { + let Some(dimension) = region_dimension(&original, path)? else { + return Ok(()); + }; + let world = world_name(&dimension); + if !dimensions.contains_key(&world) { + ensure!(dimensions.len() < 256, "input_limit: dimension count"); + store.create_world(&world, None)?; + dimensions.insert( + world.clone(), + Dimension { + path: dimension.clone(), + revision: 0, + }, + ); + } + let mut region = Region::open(path, false)?; + for i in 0..1024 { + let Some((_, tag)) = region.read(i)? else { + continue; + }; + let (x, z) = region.coordinates(i)?; + let c = tag.compound()?; + check_chunk(c, x, z, mode, &mut report)?; + report.chunks += 1; + for sec in get(c, "sections")?.list(10)? { + let sec = sec.compound()?; + let y = get(sec, "Y")?.numeric_i32()?; + let Some(blocks) = sec.get("block_states") else { + continue; + }; + let (palette, indices) = unpack(blocks.compound()?, 4096, 4)?; + let registry = palette + .iter() + .map(|s| store.register_block(s)) + .collect::>>()?; + let mut changes = Vec::new(); + for (index, pid) in indices.into_iter().enumerate() { + let block = registry[pid]; + if block != 0 { + changes.push(BlockChange { + pos: [ + x * 16 + (index % 16) as i32, + y * 16 + (index / 256) as i32, + z * 16 + ((index / 16) % 16) as i32, + ], + block, + }); + } + } + report.nonair_blocks += changes.len() as u64; + report.sections += 1; + if !changes.is_empty() { + store.edit( + &world, + store.revision(&world)?, + &format!("anvil-import-{operations}"), + changes, + )?; + operations += 1; + } + } + } + Ok(()) + }, + 0, + )?; + for (world, dimension) in &mut dimensions { + dimension.revision = store.revision(world)?; + report.worlds.insert(world.clone(), dimension.revision); + } + store.flush()?; + drop(store); + report.issue("opaque_world_data","preserved","compat/original","All source files retained with SHA256: level.dat, entities, biomes, block entities, POI, datapacks, playerdata, unknown files. Native simulation edits blocks only; no entity/biome migration."); + let mut provenance = Provenance { + schema_version: 1, + format: "anvil".into(), + data_version: version, + worlds: dimensions, + schem_min: None, + schem_max: None, + entity_fingerprint: None, + entity_blob_hashes: BTreeMap::new(), + }; + crate::entities::import_anvil(stage.path(), &original, &mut provenance, &mut report)?; + io::json(&compat.join("provenance.json"), &provenance)?; + io::json(&compat.join("import-report.json"), &report)?; + io::publish(stage, destination)?; + Ok(report) +} + +fn new_level(name: &str) -> Result { + let bytes = io::inflate(flate2::read::GzDecoder::new( + &include_bytes!("../fixtures/world-template/level.dat")[..], + ))?; + let (_, mut root) = nbt::decode(&bytes)?; + let data = root + .compound_mut()? + .get_mut("Data") + .context("template Data")? + .compound_mut()?; + data.insert("LevelName".into(), Tag::String(name.into())); + data.insert("LastPlayed".into(), Tag::Long(0)); + Ok(root) +} +fn new_world_metadata(root: &Path) -> Result<()> { + let data = root.join("data/minecraft"); + fs::create_dir_all(&data)?; + fs::write( + data.join("world_gen_settings.dat"), + include_bytes!("../fixtures/world-template/data/minecraft/world_gen_settings.dat"), + )?; + fs::write( + data.join("game_rules.dat"), + include_bytes!("../fixtures/world-template/data/minecraft/game_rules.dat"), + )?; + Ok(()) +} +fn new_chunk(x: i32, z: i32) -> Tag { + compound([ + ("DataVersion", Tag::Int(DATA_VERSION)), + ("xPos", Tag::Int(x)), + ("yPos", Tag::Int(-4)), + ("zPos", Tag::Int(z)), + ("Status", Tag::String("minecraft:full".into())), + ("LastUpdate", Tag::Long(0)), + ("InhabitedTime", Tag::Long(0)), + ("isLightOn", Tag::Byte(0)), + ("sections", Tag::List(10, vec![])), + ("block_entities", Tag::List(10, vec![])), + ("block_ticks", Tag::List(10, vec![])), + ("fluid_ticks", Tag::List(10, vec![])), + ( + "PostProcessing", + Tag::List(9, (0..24).map(|_| Tag::List(2, vec![])).collect()), + ), + ("Heightmaps", compound([] as [(&str, Tag); 0])), + ( + "structures", + compound([ + ("starts", compound([] as [(&str, Tag); 0])), + ("References", compound([] as [(&str, Tag); 0])), + ]), + ), + ]) +} +fn air_section(y: i32) -> Tag { + compound([ + ("Y", Tag::Byte(y as i8)), + ( + "block_states", + compound([( + "palette", + Tag::List(10, vec![palette_entry("minecraft:air")]), + )]), + ), + ( + "biomes", + compound([( + "palette", + Tag::List(8, vec![Tag::String("minecraft:plains".into())]), + )]), + ), + ]) +} + +pub fn export_anvil( + store_path: &Path, + world: Option<&str>, + destination: &Path, + mode: Mode, +) -> Result { + let mut store = WorldStore::open(store_path, 32)?; + let p = provenance(store_path)?; + let original = p.as_ref().filter(|p| p.format == "anvil"); + let stage = io::stage(destination)?; + let mut report = Report::new("anvil", mode); + let dimensions = if let Some(p) = original { + ensure!( + world.is_none(), + "anvil_dimensions: imported worlds export together; omit --world" + ); + ensure!( + mode != Mode::Exact || p.data_version == DATA_VERSION, + "unsupported_data_version: exact requires4903" + ); + io::copy_verified( + &store_path.join("compat/original"), + stage.path(), + &store_path.join("compat/files.jsonl"), + )?; + report.data_version = p.data_version; + for (w, d) in &p.worlds { + let rev = store.revision(w)?; + report.worlds.insert(w.clone(), rev); + ensure!( + mode != Mode::Exact || rev == d.revision, + "exact_provenance_invalidated: {w} revision changed; use best-effort for invalidating derived fields" + ); + } + let entities_changed = crate::entities::changed(store_path, p)?; + ensure!( + mode != Mode::Exact || !entities_changed, + "exact_entity_revision: entity metadata changed; use best-effort" + ); + if !entities_changed && p.worlds.iter().all(|(w, d)| report.worlds[w] == d.revision) { + report.issue( + "unchanged_original", + "preserved", + "world", + "All original files copied byte-identically after SHA256 verification", + ); + io::report(stage.path(), &report)?; + io::publish(stage, destination)?; + return Ok(report); + } + let sidecar = io::available(stage.path(), "shacraft-source-sidecar", "")?; + io::copy_verified( + &store_path.join("compat/original"), + &sidecar, + &store_path.join("compat/files.jsonl"), + )?; + report.issue( + "source_archive", + "preserved", + sidecar.file_name().unwrap().to_string_lossy(), + "Verified original world retained for unsupported/stale data", + ); + p.worlds + .iter() + .map(|(w, d)| (w.clone(), d.path.clone())) + .collect::>() + } else { + ensure!( + mode != Mode::Exact, + "exact_new_world: new Anvil generation has derived-light/heightmap reconstruction and requires best-effort" + ); + let w = world.context("anvil_world: --world required for native store")?; + report.worlds.insert(w.into(), store.revision(w)?); + io::gzip_write( + &stage.path().join("level.dat"), + &nbt::encode("", &new_level(w)?)?, + )?; + new_world_metadata(stage.path())?; + if p.is_some() { + let source_sidecar = io::available(stage.path(), "shacraft-source-sidecar", "")?; + io::copy_verified( + &store_path.join("compat/original"), + &source_sidecar, + &store_path.join("compat/files.jsonl"), + )?; + report.issue("cross_format_opaque_data","unsupported","source sidecar","Source format's block entities, biome layout and opaque metadata are archived without translation to Anvil; block states and the entity bridge are exported"); + } + report.issue("new_world_profile","approximated","level.dat","Creative Java 26.2 overworld, empty flat generator, Y[-64,319], default plains biomes. Minecraft reconstructs light/heightmaps. Native entities use the explicit property bridge."); + BTreeMap::from([(w.into(), String::new())]) + }; + for (w, dimension) in &dimensions { + if original.is_some_and(|p| p.worlds[w].revision == report.worlds[w]) { + continue; + } + // Disk-backed unique chunk queue keeps the number of coordinates held + // in RAM bounded, independent of world size. Paths are enumerated twice, + // never retained as an unbounded vector. + let queue = tempfile::Builder::new() + .prefix(".compat-queue-") + .tempdir_in(stage.path())?; + let queue_dir = queue.path().to_owned(); + let dim_path = if dimension.is_empty() { + stage.path().to_owned() + } else { + io::safe_path(stage.path(), dimension)? + }; + let mut after = None; + loop { + let page = store.section_positions(w, after, 4096)?; + if page.is_empty() { + break; + } + for pos in &page { + ensure!( + (-4..=19).contains(&pos[1]), + "anvil_height: export edits/newsections require Y[-64,319]" + ); + queue_chunk(&queue_dir, pos[0], pos[2])?; + } + after = page.last().copied(); + } + if dim_path.join("region").exists() { + for e in fs::read_dir(dim_path.join("region"))? { + let path = e?.path(); + if path.extension().and_then(|s| s.to_str()) != Some("mca") { + continue; + } + let r = Region::open(&path, false)?; + for i in 0..1024 { + if r.locations[i] != 0 { + let (x, z) = r.coordinates(i)?; + queue_chunk(&queue_dir, x, z)? + } + } + } + } + for e in fs::read_dir(&queue_dir)? { + let p = e?.path(); + let name = p + .file_name() + .and_then(|s| s.to_str()) + .context("queue path")?; + let (x, z) = name.split_once(',').context("queue coords")?; + let (x, z) = (x.parse::()?, z.parse::()?); + let path = dim_path.join("region").join(format!( + "r.{}.{}.mca", + x.div_euclid(32), + z.div_euclid(32) + )); + let mut region = if path.exists() { + Region::open(&path, true)? + } else { + Region::create(&path)? + }; + let i = (x.rem_euclid(32) + z.rem_euclid(32) * 32) as usize; + let old = region.read(i)?; + let fresh = old.is_none(); + let (name, mut tag) = old.unwrap_or_else(|| ("".into(), new_chunk(x, z))); + let c = tag.compound_mut()?; + check_chunk(c, x, z, Mode::BestEffort, &mut report)?; + let mut sections = match c.remove("sections").context("chunk sections")? { + Tag::List(_, v) => v, + _ => bail!("chunk sections type"), + }; + let mut changed = BTreeSet::new(); + let mut unknown_states = BTreeSet::new(); + for y in -4..20 { + let cells = section_cells(&mut store, w, [x, y, z])?; + let existing = sections.iter().position(|s| { + s.compound() + .ok() + .and_then(|c| c.get("Y")) + .and_then(|t| t.numeric_i32().ok()) + == Some(y) + }); + let mut old_states = vec!["minecraft:air".to_string(); 4096]; + if let Some(s) = existing { + let sec = sections[s].compound()?; + if let Some(b) = sec.get("block_states") { + let (pal, ids) = unpack(b.compound()?, 4096, 4)?; + for (j, id) in ids.into_iter().enumerate() { + old_states[j] = pal[id].clone(); + } + } + } + let mut section_changed = false; + for j in 0..4096 { + let target = &store.registry()[cells[j] as usize]; + if !target.starts_with("minecraft:") && unknown_states.insert(target.clone()) { + report.issue("nonvanilla_block_state","unsupported",format!("{w}:chunk{x},{z}"),format!("{target} is preserved; target requires matching mod or explicit external mapping; vanilla may replace it with air")); + } + if old_states[j] != store.registry()[cells[j] as usize] { + section_changed = true; + changed.insert([ + x * 16 + (j % 16) as i32, + y * 16 + (j / 256) as i32, + z * 16 + ((j / 16) % 16) as i32, + ]); + } + } + if section_changed || fresh { + let index = if let Some(i) = existing { + i + } else { + sections.push(air_section(y)); + sections.len() - 1 + }; + let sec = sections[index].compound_mut()?; + sec.insert("block_states".into(), packed(&cells, store.registry())); + sec.remove("BlockLight"); + sec.remove("SkyLight"); + report.sections += 1; + report.nonair_blocks += cells.iter().filter(|v| **v != 0).count() as u64; + } + } + c.insert("sections".into(), Tag::List(10, sections)); + if !changed.is_empty() || fresh { + invalidate(c, &changed, &mut report, w, x, z)?; + region.write(i, &name, &tag)?; + report.chunks += 1; + let poi = dim_path.join("poi").join(format!( + "r.{}.{}.mca", + x.div_euclid(32), + z.div_euclid(32) + )); + if poi.exists() { + let mut r = Region::open(&poi, true)?; + if r.locations[i] != 0 { + r.clear(i)?; + report.issue("poi_rebuild","dropped",format!("{w}:chunk{x},{z}"),"Changed chunk POI record invalidated; original remains in shacraft-source-sidecar") + } + } + } + } + fs::remove_dir_all(queue_dir)?; + } + crate::entities::export_anvil( + store_path, + stage.path(), + p.as_ref(), + &dimensions, + &mut report, + )?; + io::report(stage.path(), &report)?; + io::publish(stage, destination)?; + Ok(report) +} +fn queue_chunk(root: &Path, x: i32, z: i32) -> Result<()> { + let p = root.join(format!("{x},{z}")); + match OpenOptions::new().write(true).create_new(true).open(p) { + Ok(_) => Ok(()), + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => Ok(()), + Err(e) => Err(e.into()), + } +} +fn invalidate( + c: &mut Compound, + changed: &BTreeSet<[i32; 3]>, + report: &mut Report, + world: &str, + x: i32, + z: i32, +) -> Result<()> { + let location = format!("{world}:chunk{x},{z}"); + c.insert("isLightOn".into(), Tag::Byte(0)); + c.insert("Heightmaps".into(), compound([] as [(&str, Tag); 0])); + if let Some(Tag::List(_, sections)) = c.get_mut("sections") { + for s in sections { + let s = s.compound_mut()?; + s.remove("BlockLight"); + s.remove("SkyLight"); + } + } + for key in ["block_entities", "block_ticks", "fluid_ticks"] { + if let Some(Tag::List(_, v)) = c.get_mut(key) { + let before = v.len(); + v.retain(|t| { + let Ok(t) = t.compound() else { return true }; + let pos = ["x", "y", "z"].map(|key| t.get(key).and_then(|t| t.int().ok())); + if let [Some(x), Some(y), Some(z)] = pos { + !changed.contains(&[x, y, z]) + } else { + true + } + }); + if v.len() != before { + report.issue("dependent_records_invalidated","dropped",&location,format!("Removed{} stale {key} at edited coordinates; originals retained in sidecar",before-v.len())) + } + } + } + report.issue("derived_fields_invalidated","approximated",location,"Removed stored light arrays and heightmaps, marked isLightOn=false for Minecraft reconstruction; unknown fields/entities/biomes preserved. No vanilla simulation guarantee."); + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn section_palette_boundaries() { + for size in [1, 2, 16, 17, 32, 33, 256, 257, 4096] { + let registry = (0..size) + .map(|i| format!("test:block_{i}")) + .collect::>(); + let cells = std::array::from_fn(|i| (i % size) as u32); + let encoded = packed(&cells, ®istry); + let (palette, indices) = unpack(encoded.compound().unwrap(), 4096, 4).unwrap(); + for (i, id) in indices.iter().enumerate() { + assert_eq!(palette[*id], registry[cells[i] as usize]) + } + } + } + #[test] + fn negative_region_zlib_and_external() { + let d = tempfile::tempdir().unwrap(); + let p = d.path().join("r.-1.-1.mca"); + let mut r = Region::create(&p).unwrap(); + let t = new_chunk(-1, -1); + r.write(1023, "", &t).unwrap(); + assert_eq!(r.read(1023).unwrap(), Some(("".into(), t))); + assert_eq!(r.coordinates(1023).unwrap(), (-1, -1)); + } + #[test] + fn all_compression_modes_and_external_payloads() { + for external in [false, true] { + for kind in 1..=4 { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("r.0.0.mca"); + let mut region = Region::create(&path).unwrap(); + let tag = new_chunk(0, 0); + let plain = nbt::encode("", &tag).unwrap(); + let encoded = match kind { + 1 => { + let mut e = flate2::write::GzEncoder::new( + Vec::new(), + flate2::Compression::default(), + ); + e.write_all(&plain).unwrap(); + e.finish().unwrap() + } + 2 => { + let mut e = flate2::write::ZlibEncoder::new( + Vec::new(), + flate2::Compression::default(), + ); + e.write_all(&plain).unwrap(); + e.finish().unwrap() + } + 3 => plain.clone(), + _ => { + let compressed = lz4_flex::block::compress(&plain); + let mut b = b"LZ4Block".to_vec(); + b.push(32 | 6); + b.extend((compressed.len() as u32).to_le_bytes()); + b.extend((plain.len() as u32).to_le_bytes()); + b.extend( + (xxhash_rust::xxh32::xxh32(&plain, 0x9747b28c) & 0x0fff_ffff) + .to_le_bytes(), + ); + b.extend(compressed); + b.extend(b"LZ4Block"); + b.push(16); + b.extend([0; 12]); + b + } + }; + let mut sector = vec![0u8; 4096]; + let length = if external { 1 } else { encoded.len() + 1 }; + sector[..4].copy_from_slice(&(length as u32).to_be_bytes()); + sector[4] = kind | if external { 128 } else { 0 }; + if external { + fs::write(dir.path().join("c.0.0.mcc"), encoded).unwrap(); + } else { + sector[5..5 + encoded.len()].copy_from_slice(&encoded); + } + region.file.seek(SeekFrom::Start(8192)).unwrap(); + region.file.write_all(§or).unwrap(); + region.file.seek(SeekFrom::Start(0)).unwrap(); + region.file.write_all(&513u32.to_be_bytes()).unwrap(); + drop(region); + let mut region = Region::open(&path, false).unwrap(); + assert_eq!(region.read(0).unwrap(), Some(("".into(), tag))); + } + } + } + #[test] + fn oversized_chunk_writes_external_and_validates_checksum() { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("r.0.0.mca"); + let mut region = Region::create(&path).unwrap(); + let mut seed = 123456789u32; + let data = (0..1_100_000) + .map(|_| { + seed ^= seed << 13; + seed ^= seed >> 17; + seed ^= seed << 5; + seed as u8 + }) + .collect::>(); + let mut tag = new_chunk(0, 0); + tag.compound_mut() + .unwrap() + .insert("UnknownLargePayload".into(), Tag::ByteArray(data)); + region.write(0, "", &tag).unwrap(); + assert!(dir.path().join("c.0.0.mcc").exists()); + assert_eq!(region.read(0).unwrap(), Some(("".into(), tag))); + } + #[test] + fn lz4_raw_and_compressed() { + let input = b"hello hello hello hello hello hello"; + for (kind, data) in [(16, input.to_vec()), (32, lz4_flex::block::compress(input))] { + let mut stream = b"LZ4Block".to_vec(); + stream.push(kind); + stream.extend((data.len() as u32).to_le_bytes()); + stream.extend((input.len() as u32).to_le_bytes()); + stream + .extend((xxhash_rust::xxh32::xxh32(input, 0x9747b28c) & 0x0fff_ffff).to_le_bytes()); + stream.extend(data); + stream.extend(b"LZ4Block"); + stream.push(16); + stream.extend([0; 12]); + assert_eq!(lz4_decode(&stream).unwrap(), input); + stream[17] ^= 1; + assert!(lz4_decode(&stream).is_err()); + } + } +} diff --git a/crates/shacraft-compat/src/entities.rs b/crates/shacraft-compat/src/entities.rs new file mode 100644 index 0000000..a7816d4 --- /dev/null +++ b/crates/shacraft-compat/src/entities.rs @@ -0,0 +1,677 @@ +//! Offline bridge to the server's persistent entity metadata. Original typed +//! NBT is pinned per UUID; a bounded visual subset is editable by the server. +use crate::{ + Mode, Provenance, Report, io, + nbt::{self, Compound, Tag, compound, get}, +}; +use anyhow::{Context, Result, ensure}; +use rusqlite::Connection; +use serde::{Deserialize, Serialize}; +use serde_json::{Value, json}; +use sha2::{Digest, Sha256}; +use std::{collections::BTreeMap, fs, path::Path}; + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +pub(crate) struct Entity { + pub id: String, + pub world: String, + pub kind: String, + #[serde(rename = "type")] + pub entity_type: String, + pub position: [f64; 3], + pub yaw: f64, + pub properties: Value, +} +type Entities = BTreeMap; +const MAX_ENTITIES: usize = 4096; +pub(crate) fn fingerprint(entities: &Entities) -> Result { + Ok(format!( + "{:x}", + Sha256::digest(serde_json::to_vec(entities)?) + )) +} +pub(crate) fn read_native(root: &Path) -> Result { + let p = root.join("server.sqlite3"); + if !p.exists() { + return Ok(BTreeMap::new()); + } + let conn = Connection::open_with_flags(p, rusqlite::OpenFlags::SQLITE_OPEN_READ_ONLY)?; + let data: String = conn.query_row( + "SELECT json FROM metadata WHERE id=1 AND length(json)<=8388608", + [], + |r| r.get(0), + )?; + let value: Value = serde_json::from_str(&data)?; + let entities: Entities = + serde_json::from_value(value.get("entities").cloned().unwrap_or_else(|| json!({})))?; + ensure!( + entities.len() <= MAX_ENTITIES, + "entity_limit: native entity count" + ); + for (id, e) in &entities { + ensure!( + id.len() == 36 + && id + .bytes() + .enumerate() + .all(|(i, b)| if [8, 13, 18, 23].contains(&i) { + b == b'-' + } else { + b.is_ascii_hexdigit() + }), + "entity_id: UUID string required" + ); + ensure!( + id == &e.id + && e.position + .iter() + .all(|v| v.is_finite() && v.abs() <= 30_000_000.) + && e.yaw.is_finite(), + "entity_invalid: identity/coordinates" + ); + ensure!( + serde_json::to_vec(&e.properties)?.len() <= 16384, + "entity_limit: properties" + ); + } + Ok(entities) +} +pub(crate) fn changed(root: &Path, p: &Provenance) -> Result { + if let Some(hash) = &p.entity_fingerprint { + Ok(&fingerprint(&read_native(root)?)? != hash) + } else { + Ok(!read_native(root)?.is_empty()) + } +} +fn baseline(root: &Path, p: Option<&Provenance>) -> Result { + let path = root.join("compat/native-entities.json"); + if !path.exists() { + return Ok(BTreeMap::new()); + } + let result: Entities = serde_json::from_slice(&io::read_limited(&path, 8 * 1024 * 1024)?)?; + ensure!(result.len() <= MAX_ENTITIES, "entity_limit: baseline"); + if let Some(hash) = p.and_then(|p| p.entity_fingerprint.as_ref()) { + ensure!( + &fingerprint(&result)? == hash, + "provenance_corrupt: entity baseline hash" + ); + } + Ok(result) +} +fn uuid(tag: &Tag) -> Result { + let c = tag.compound()?; + let bytes = if let Some(Tag::IntArray(uuid)) = c.get("UUID") { + if uuid.len() == 4 { + uuid.iter() + .flat_map(|n| n.to_be_bytes()) + .collect::>() + } else { + anyhow::bail!("entity_uuid: length") + } + } else { + Sha256::digest(nbt::encode("", tag)?)[..16].to_vec() + }; + let hex = bytes.iter().map(|b| format!("{b:02x}")).collect::(); + Ok(format!( + "{}-{}-{}-{}-{}", + &hex[..8], + &hex[8..12], + &hex[12..16], + &hex[16..20], + &hex[20..] + )) +} +fn uuid_tag(id: &str) -> Tag { + let hex = id.replace('-', ""); + let bytes = if hex.len() == 32 { + (0..32) + .step_by(2) + .map(|i| u8::from_str_radix(&hex[i..i + 2], 16)) + .collect::, _>>() + .unwrap_or_else(|_| Sha256::digest(id.as_bytes())[..16].to_vec()) + } else { + Sha256::digest(id.as_bytes())[..16].to_vec() + }; + Tag::IntArray( + bytes + .chunks_exact(4) + .map(|b| i32::from_be_bytes(b.try_into().expect("four bytes"))) + .collect(), + ) +} +fn number(t: &Tag) -> Result { + match t { + Tag::Double(v) => Ok(f64::from_bits(*v)), + Tag::Float(v) => Ok(f32::from_bits(*v) as f64), + _ => anyhow::bail!("entity_position: floating point expected"), + } +} +fn from_tag(tag: &Tag, world: &str) -> Result { + let c = tag.compound()?; + let kind = get(c, "id")?.string()?.to_owned(); + ensure!(kind.len() <= 512, "entity_limit: kind identifier"); + let pos = get(c, "Pos")?.list(6)?; + ensure!(pos.len() == 3, "entity_position: 3 coordinates required"); + let position = [number(&pos[0])?, number(&pos[1])?, number(&pos[2])?]; + ensure!( + position + .iter() + .all(|v| v.is_finite() && v.abs() <= 30_000_000.), + "entity_position: range" + ); + let yaw = c + .get("Rotation") + .map(|r| r.list(5)) + .transpose()? + .and_then(|r| r.first()) + .map(number) + .transpose()? + .unwrap_or(0.) + .to_radians(); + ensure!(yaw.is_finite(), "entity_yaw: finite required"); + let mut properties = serde_json::Map::new(); + for key in [ + "Health", + "CustomName", + "NoGravity", + "Invisible", + "Invulnerable", + "Glowing", + "Silent", + "CustomNameVisible", + ] { + if let Some(t) = c.get(key) { + let v = match t { + Tag::Byte(v) => json!(*v != 0), + Tag::Float(v) => json!(f32::from_bits(*v)), + Tag::String(v) => json!(v), + _ => continue, + }; + properties.insert(key.into(), v); + } + } + let id = uuid(tag)?; + ensure!( + serde_json::to_vec(&properties)?.len() <= 16384, + "entity_limit: visual properties" + ); + Ok(Entity { + id, + world: world.into(), + entity_type: kind.clone(), + kind, + position, + yaw, + properties: Value::Object(properties), + }) +} +fn keep( + root: &Path, + tag: &Tag, + world: &str, + entities: &mut Entities, + report: &mut Report, +) -> Result<()> { + let entity = match from_tag(tag, world) { + Ok(e) => e, + Err(e) => { + report.issue( + "entity_visual_unavailable", + "preserved", + world, + format!("Typed NBT retained; cannot bridge entity: {e}"), + ); + return Ok(()); + } + }; + let ambiguous = root.join("compat/ambiguous-uuids").join(&entity.id); + if ambiguous.exists() { + report.issue( + "entity_duplicate_uuid", + "preserved", + &entity.id, + "Ambiguous UUID excluded from editable subset; all records retained in source", + ); + return Ok(()); + } + if let Some(previous) = entities.remove(&entity.id) { + report.native_entity_bytes = report + .native_entity_bytes + .saturating_sub((serde_json::to_vec(&previous)?.len() + previous.id.len() + 8) as u64); + fs::create_dir_all(ambiguous.parent().context("ambiguous UUID parent")?)?; + fs::write(&ambiguous, b"ambiguous UUID; preserve source records\n")?; + fs::remove_file( + root.join("compat/entities") + .join(format!("{}.nbt", entity.id)), + )?; + report.issue( + "entity_duplicate_uuid", + "preserved", + &entity.id, + "All duplicate UUID records remain in source; excluded from editable subset", + ); + return Ok(()); + } + if entities.len() >= MAX_ENTITIES { + report.issue("entity_visual_limit","preserved",&entity.id,"More than 4096 entities; additional records remain in disk source and roundtrip unchanged"); + return Ok(()); + } + let bytes = (serde_json::to_vec(&entity)?.len() + entity.id.len() + 8) as u64; + if report.native_entity_bytes + bytes > 6 * 1024 * 1024 { + report.issue("entity_visual_byte_limit","preserved",&entity.id,"Native entity subset exceeds 6 MiB; source NBT remains on disk. Reserved space keeps full server metadata below 8 MiB."); + return Ok(()); + } + report.native_entity_bytes += bytes; + let path = root.join("compat/entities"); + fs::create_dir_all(&path)?; + fs::write( + path.join(format!("{}.nbt", entity.id)), + nbt::encode("", tag)?, + )?; + entities.insert(entity.id.clone(), entity); + Ok(()) +} +fn save(root: &Path, p: &mut Provenance, entities: Entities) -> Result<()> { + let worlds = p + .worlds + .keys() + .map(|w| { + let spawn = if let (Some(min), Some(max)) = (p.schem_min, p.schem_max) { + [min[0] as f64 + 0.5, max[1] as f64 + 2., min[2] as f64 + 2.5] + } else { + [0., 80., 0.] + }; + (w.clone(), json!({"spawn":spawn,"mode":"creative"})) + }) + .collect::>(); + let value = json!({"worlds":worlds,"entities":entities,"revision":0}); + ensure!( + serde_json::to_vec(&value)?.len() <= 8 * 1024 * 1024, + "entity_limit: server metadata exceeds 8 MiB" + ); + let conn = Connection::open(root.join("server.sqlite3"))?; + conn.execute_batch("PRAGMA journal_mode=DELETE; PRAGMA synchronous=FULL; CREATE TABLE metadata(id INTEGER PRIMARY KEY CHECK(id=1),json TEXT NOT NULL);")?; + conn.execute( + "INSERT INTO metadata(id,json)VALUES(1,?1)", + [serde_json::to_string(&value)?], + )?; + p.entity_fingerprint = Some(fingerprint(&entities)?); + for id in entities.keys() { + let bytes = io::read_limited( + &root.join("compat/entities").join(format!("{id}.nbt")), + nbt::MAX_BYTES, + )?; + p.entity_blob_hashes + .insert(id.clone(), format!("{:x}", Sha256::digest(bytes))); + } + io::json(&root.join("compat/native-entities.json"), &entities)?; + Ok(()) +} +pub(crate) fn import_anvil( + root: &Path, + original: &Path, + p: &mut Provenance, + report: &mut Report, +) -> Result<()> { + let mut entities = BTreeMap::new(); + for (world, dim) in &p.worlds { + let base = if dim.path.is_empty() { + original.to_owned() + } else { + io::safe_path(original, &dim.path)? + }; + let folder = base.join("entities"); + if !folder.exists() { + continue; + } + for e in fs::read_dir(folder)? { + let path = e?.path(); + if path.extension().and_then(|s| s.to_str()) != Some("mca") { + continue; + } + let mut r = crate::anvil::Region::open(&path, false)?; + for i in 0..1024 { + if let Some((_, tag)) = r.read(i)? { + let tag = tag.compound()?; + let version = get(tag, "DataVersion")?.int()?; + ensure!( + report.mode != Mode::Exact || version == crate::DATA_VERSION, + "unsupported_data_version: entity chunk uses {version}" + ); + if version != crate::DATA_VERSION { + report.issue( + "unverified_entity_version", + "unsupported", + world, + format!( + "Entity chunk DataVersion {version} is preserved without migration" + ), + ); + } + if let Some(list) = tag.get("Entities") { + for entity in list.list(10)? { + keep(root, entity, world, &mut entities, report)? + } + } + } + } + } + } + report.issue("entity_visual_bridge","preserved","server.sqlite3",format!("{} entities are editable through server/MCP; full original typed NBT is pinned on disk",entities.len())); + save(root, p, entities) +} +fn schem_tag(t: &Tag, offset: [i32; 3]) -> Result { + let c = t.compound()?; + let mut data = c + .get("Data") + .cloned() + .unwrap_or_else(|| compound([] as [(&str, Tag); 0])); + let data = data.compound_mut()?; + data.insert("id".into(), get(c, "Id")?.clone()); + let list = get(c, "Pos")?.list(6)?; + ensure!(list.len() == 3, "schem_entity_position"); + let mut pos = Vec::new(); + for i in 0..3 { + pos.push(Tag::Double( + (number(&list[i])? + f64::from(offset[i])).to_bits(), + )) + } + data.insert("Pos".into(), Tag::List(6, pos)); + Ok(Tag::Compound(data.clone())) +} +pub(crate) fn import_schem( + root: &Path, + c: &Compound, + p: &mut Provenance, + report: &mut Report, +) -> Result<()> { + let mut entities = BTreeMap::new(); + let world = p.worlds.keys().next().context("schem world")?; + if let Some(t) = c.get("Entities") { + for entity in t.list(10)? { + let tag = schem_tag(entity, p.schem_min.unwrap_or([0; 3]))?; + keep(root, &tag, world, &mut entities, report)? + } + } + save(root, p, entities) +} + +fn materialize( + root: &Path, + e: &Entity, + base: Option<&Entity>, + p: Option<&Provenance>, + report: &mut Report, +) -> Result { + let mut tag = if base.is_some() { + { + let bytes = io::read_limited( + &root.join("compat/entities").join(format!("{}.nbt", e.id)), + nbt::MAX_BYTES, + )?; + let hash = format!("{:x}", Sha256::digest(&bytes)); + ensure!( + p.and_then(|p| p.entity_blob_hashes.get(&e.id)) == Some(&hash), + "provenance_corrupt: entity blob hash" + ); + nbt::decode(&bytes)?.1 + } + } else { + compound([("UUID", uuid_tag(&e.id))]) + }; + if base == Some(e) { + return Ok(tag); + } + let c = tag.compound_mut()?; + if let Some(base) = base + && let Some(old) = base.properties.as_object() + { + for key in old.keys() { + if e.properties.get(key).is_none() { + c.remove(key); + } + } + } + c.insert("id".into(), Tag::String(e.kind.clone())); + c.insert( + "Pos".into(), + Tag::List( + 6, + e.position + .iter() + .map(|v| Tag::Double(v.to_bits())) + .collect(), + ), + ); + let pitch = c + .get("Rotation") + .and_then(|t| t.list(5).ok()) + .and_then(|v| v.get(1)) + .cloned() + .unwrap_or(Tag::Float(0)); + c.insert( + "Rotation".into(), + Tag::List( + 5, + vec![Tag::Float((e.yaw.to_degrees() as f32).to_bits()), pitch], + ), + ); + if let Some(props) = e.properties.as_object() { + for (k, v) in props { + let tag = match k.as_str() { + "Health" => v + .as_f64() + .filter(|v| v.is_finite() && v.abs() <= f32::MAX as f64) + .map(|v| Tag::Float((v as f32).to_bits())), + "CustomName" => v.as_str().map(|v| Tag::String(v.into())), + "NoGravity" | "Invisible" | "Invulnerable" | "Glowing" | "Silent" + | "CustomNameVisible" => v.as_bool().map(|v| Tag::Byte(v as i8)), + _ => None, + }; + if let Some(tag) = tag { + c.insert(k.clone(), tag); + } else { + ensure!( + report.mode != Mode::Exact, + "exact_entity_property: unsupported {k}" + ); + report.issue("entity_property_unmapped","unsupported",&e.id,format!("Property {k} retained in shacraft-native-entities.json; not translated into vanilla NBT")); + } + } + } + if base.is_some() { + report.issue("entity_edited","approximated",&e.id,"Position/yaw/type and supported scalar properties applied; unknown original NBT retained; passenger/tether/AI relationships not simulated") + } else { + report.issue("entity_created","preserved",&e.id,"UUID, position, rotation, supported properties emitted; vanilla initializes omitted defaults") + } + Ok(tag) +} +pub(crate) fn export_anvil( + root: &Path, + out: &Path, + p: Option<&Provenance>, + worlds: &BTreeMap, + report: &mut Report, +) -> Result<()> { + let current = read_native(root)?; + let base = baseline(root, p)?; + let source_is_anvil = p.is_some_and(|p| p.format == "anvil"); + let scratch = tempfile::Builder::new() + .prefix(".entity-export-") + .tempdir_in(out)?; + // Remove only the editable baseline subset. Unbridged records remain intact. + for (world, dim) in worlds { + let dir = if dim.is_empty() { + out.to_owned() + } else { + io::safe_path(out, dim)? + }; + let folder = dir.join("entities"); + if !folder.exists() { + continue; + } + for e in fs::read_dir(&folder)? { + let path = e?.path(); + if path.extension().and_then(|s| s.to_str()) != Some("mca") { + continue; + } + let mut r = crate::anvil::Region::open(&path, true)?; + for i in 0..1024 { + let Some((name, mut tag)) = r.read(i)? else { + continue; + }; + if let Some(Tag::List(_, list)) = tag.compound_mut()?.get_mut("Entities") { + let before = list.len(); + list.retain(|t| { + uuid(t) + .ok() + .and_then(|id| base.get(&id)) + .is_none_or(|b| &b.world != world || current.get(&b.id) == Some(b)) + }); + if list.len() != before { + r.write(i, &name, &tag)?; + } + } + } + } + } + for (id, e) in ¤t { + let Some(dim) = worlds.get(&e.world) else { + continue; + }; + if source_is_anvil && base.get(id) == Some(e) { + continue; + } + let tag = materialize(root, e, base.get(id), p, report)?; + if !e.kind.starts_with("minecraft:") { + report.issue( + "nonvanilla_entity", + "unsupported", + id, + "Preserved entity id requires matching target mod; vanilla may discard it", + ); + } + fs::write( + scratch.path().join(format!("{id}.nbt")), + nbt::encode("", &tag)?, + )?; + let (x, z) = ( + (e.position[0].floor() as i32).div_euclid(16), + (e.position[2].floor() as i32).div_euclid(16), + ); + let dir = if dim.is_empty() { + out.to_owned() + } else { + io::safe_path(out, dim)? + }; + let path = + dir.join("entities") + .join(format!("r.{}.{}.mca", x.div_euclid(32), z.div_euclid(32))); + let mut r = if path.exists() { + crate::anvil::Region::open(&path, true)? + } else { + crate::anvil::Region::create(&path)? + }; + let index = (x.rem_euclid(32) + z.rem_euclid(32) * 32) as usize; + let (name, mut chunk) = r.read(index)?.unwrap_or_else(|| { + ( + "".into(), + compound([ + ("DataVersion", Tag::Int(crate::DATA_VERSION)), + ("Position", Tag::IntArray(vec![x, z])), + ("Entities", Tag::List(10, vec![])), + ]), + ) + }); + let c = chunk.compound_mut()?; + let list = c.entry("Entities".into()).or_insert(Tag::List(10, vec![])); + if let Tag::List(kind, list) = list { + ensure!(*kind == 10 || list.is_empty(), "entity_list_type"); + *kind = 10; + list.push(tag); + } else { + anyhow::bail!("entity_list_type") + }; + r.write(index, &name, &chunk)?; + } + for (id, e) in &base { + if worlds.contains_key(&e.world) && !current.contains_key(id) { + report.issue( + "entity_removed", + "dropped", + id, + "Removed via native metadata; original typed NBT remains in source sidecar", + ) + } + } + let saved = io::available(out, "shacraft-native-entities", ".json")?; + io::json(&saved, ¤t)?; + Ok(()) +} +pub(crate) fn export_schem( + root: &Path, + world: &str, + c: &mut Compound, + offset: [i32; 3], + p: Option<&Provenance>, + report: &mut Report, +) -> Result<()> { + let current = read_native(root)?; + let base = baseline(root, p)?; + let had_entities = c.contains_key("Entities"); + let mut source = match c.remove("Entities") { + Some(Tag::List(_, v)) => v, + None => vec![], + _ => anyhow::bail!("schem_entities_type"), + }; + let mut out = Vec::new(); + let mut original_wrappers = BTreeMap::new(); + for entity in source.drain(..) { + let tag = schem_tag(&entity, offset)?; + let id = uuid(&tag)?; + if base.contains_key(&id) { + original_wrappers.insert(id, entity); + continue; + } + out.push(entity); + } + for (id, e) in ¤t { + if e.world != world { + continue; + } + if base.get(id) == Some(e) + && let Some(wrapper) = original_wrappers.remove(id) + { + out.push(wrapper); + continue; + } + let tag = materialize(root, e, base.get(id), p, report)?; + let mut data = tag.compound()?.clone(); + data.remove("id"); + data.remove("Pos"); + let mut wrapper = original_wrappers + .remove(id) + .unwrap_or_else(|| compound([] as [(&str, Tag); 0])); + let updated = compound([ + ("Id", Tag::String(e.kind.clone())), + ( + "Pos", + Tag::List( + 6, + e.position + .iter() + .enumerate() + .map(|(i, v)| Tag::Double((v - f64::from(offset[i])).to_bits())) + .collect(), + ), + ), + ("Data", Tag::Compound(data)), + ]); + wrapper.compound_mut()?.extend(updated.compound()?.clone()); + out.push(wrapper); + } + if !out.is_empty() || had_entities || !base.is_empty() { + c.insert("Entities".into(), Tag::List(10, out)); + } + Ok(()) +} diff --git a/crates/shacraft-compat/src/io.rs b/crates/shacraft-compat/src/io.rs new file mode 100644 index 0000000..2663d31 --- /dev/null +++ b/crates/shacraft-compat/src/io.rs @@ -0,0 +1,306 @@ +use anyhow::{Context, Result, bail, ensure}; +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; +use std::{ + fs::{self, File, OpenOptions}, + io::{BufRead, BufReader, Read, Write}, + path::{Component, Path, PathBuf}, +}; +pub(crate) fn read_limited(p: &Path, max: usize) -> Result> { + let mut b = Vec::new(); + File::open(p)?.take(max as u64 + 1).read_to_end(&mut b)?; + ensure!(b.len() <= max, "input_limit: file {}", p.display()); + Ok(b) +} +pub(crate) fn inflate(r: impl Read) -> Result> { + let mut b = Vec::new(); + r.take(super::nbt::MAX_BYTES as u64 + 1) + .read_to_end(&mut b)?; + ensure!( + b.len() <= super::nbt::MAX_BYTES, + "input_limit: decompressed NBT exceeds16MiB" + ); + Ok(b) +} +pub(crate) fn gzip_read(p: &Path) -> Result> { + inflate(flate2::read::GzDecoder::new(File::open(p)?)) +} +pub(crate) fn gzip_write(p: &Path, b: &[u8]) -> Result<()> { + let f = OpenOptions::new().write(true).create_new(true).open(p)?; + let mut w = flate2::write::GzEncoder::new(f, flate2::Compression::default()); + w.write_all(b)?; + w.finish()?.sync_all()?; + Ok(()) +} +pub(crate) fn json(p: &Path, v: &impl Serialize) -> Result<()> { + let mut f = OpenOptions::new().write(true).create_new(true).open(p)?; + serde_json::to_writer_pretty(&mut f, v)?; + f.write_all(b"\n")?; + f.sync_all()?; + Ok(()) +} +pub(crate) fn available(root: &Path, stem: &str, extension: &str) -> Result { + for i in 0..10000 { + let suffix = if i == 0 { + String::new() + } else { + format!("-{i}") + }; + let p = root.join(format!("{stem}{suffix}{extension}")); + if !p.exists() { + return Ok(p); + } + } + bail!("output_limit: too many reserved filenames") +} +pub(crate) fn stage(dest: &Path) -> Result { + ensure!( + !dest.exists(), + "destination_exists: refusing overwrite {}", + dest.display() + ); + let parent = dest + .parent() + .filter(|p| !p.as_os_str().is_empty()) + .unwrap_or(Path::new(".")); + fs::create_dir_all(parent)?; + Ok(tempfile::Builder::new() + .prefix(".shacraft-convert-") + .tempdir_in(parent)?) +} +pub(crate) fn publish(stage: tempfile::TempDir, dest: &Path) -> Result<()> { + sync_tree(stage.path(), 0)?; + let parent = dest + .parent() + .filter(|p| !p.as_os_str().is_empty()) + .unwrap_or(Path::new(".")); + rustix::fs::renameat_with( + rustix::fs::CWD, + stage.path(), + rustix::fs::CWD, + dest, + rustix::fs::RenameFlags::NOREPLACE, + ) + .context("publish: atomic no-overwrite rename")?; + File::open(parent)?.sync_all()?; + Ok(()) +} +pub(crate) fn report(root: &Path, value: &super::Report) -> Result<()> { + // Imported worlds may already carry a report; never replace source files. + for i in 0..10000 { + let name = if i == 0 { + "conversion-report.json".to_owned() + } else { + format!("conversion-report-{i}.json") + }; + let path = root.join(name); + if !path.exists() { + return json(&path, value); + } + } + bail!("report_limit: too many existing reports") +} +fn sync_tree(p: &Path, depth: usize) -> Result<()> { + ensure!(depth <= 32, "input_limit: path depth"); + for e in fs::read_dir(p)? { + let e = e?; + let t = e.file_type()?; + if t.is_dir() { + sync_tree(&e.path(), depth + 1)? + } else if t.is_file() { + File::open(e.path())?.sync_all()? + } else { + bail!("unsafe_path: special file") + } + } + File::open(p)?.sync_all()?; + Ok(()) +} +#[derive(Serialize, Deserialize)] +struct FileHash { + path: String, + size: u64, + sha256: String, +} +pub(crate) fn safe_path(root: &Path, s: &str) -> Result { + let p = Path::new(s); + ensure!( + p.components().all(|c| matches!(c, Component::Normal(_))), + "unsafe_path: nonrelative path" + ); + let mut result = root.to_path_buf(); + ensure!( + !fs::symlink_metadata(root)?.file_type().is_symlink(), + "unsafe_path: symlink root" + ); + for part in p.components() { + result.push(part); + if let Ok(metadata) = fs::symlink_metadata(&result) { + ensure!( + !metadata.file_type().is_symlink(), + "unsafe_path: symlink component" + ); + } + } + Ok(result) +} +pub(crate) fn copy_source( + source: &Path, + dest: &Path, + index: &Path, + report: &mut super::Report, +) -> Result<()> { + ensure!( + !fs::symlink_metadata(source)?.file_type().is_symlink(), + "unsafe_path: symlink root" + ); + fs::create_dir_all(dest)?; + let mut log = File::create(index)?; + copy_dir(source, dest, source, &mut log, report, 0)?; + log.sync_all()?; + Ok(()) +} +fn copy_dir( + source: &Path, + dest: &Path, + root: &Path, + index: &mut File, + report: &mut super::Report, + depth: usize, +) -> Result<()> { + ensure!(depth <= 24, "input_limit: directory depth"); + for entry in fs::read_dir(source)? { + let entry = entry?; + let kind = entry.file_type()?; + let to = dest.join(entry.file_name()); + if kind.is_dir() { + fs::create_dir(&to)?; + copy_dir(&entry.path(), &to, root, index, report, depth + 1)? + } else { + ensure!( + kind.is_file(), + "unsafe_path: symlink/special file {}", + entry.path().display() + ); + report.source_files += 1; + ensure!( + report.source_files <= 1_000_000, + "input_limit: source file count" + ); + let mut from = File::open(entry.path())?; + let before = from.metadata()?; + ensure!( + before.len() <= 8 * 1024 * 1024 * 1024, + "input_limit: individual source file exceeds8GiB" + ); + let mut out = OpenOptions::new().write(true).create_new(true).open(&to)?; + let (size, hash) = copy_hash(&mut from, &mut out)?; + let after = from.metadata()?; + ensure!( + size == before.len() + && after.len() == before.len() + && after.modified()? == before.modified()?, + "source_changed: {}", + entry.path().display() + ); + report.source_bytes = report + .source_bytes + .checked_add(size) + .context("input_limit: bytes overflow")?; + ensure!( + report.source_bytes <= 1024 * 1024 * 1024 * 1024, + "input_limit: source exceeds1TiB" + ); + let path = entry + .path() + .strip_prefix(root)? + .to_str() + .context("unsafe_path: non-UTF8 filename")? + .to_owned(); + serde_json::to_writer( + &mut *index, + &FileHash { + path, + size, + sha256: hash, + }, + )?; + index.write_all(b"\n")?; + out.sync_all()?; + } + } + Ok(()) +} +fn copy_hash(r: &mut impl Read, w: &mut impl Write) -> Result<(u64, String)> { + let mut sha = Sha256::new(); + let mut buf = [0; 65536]; + let mut size = 0; + loop { + let n = r.read(&mut buf)?; + if n == 0 { + break; + } + sha.update(&buf[..n]); + w.write_all(&buf[..n])?; + size += n as u64; + } + Ok((size, format!("{:x}", sha.finalize()))) +} +pub(crate) fn copy_verified(root: &Path, dest: &Path, index: &Path) -> Result<()> { + fs::create_dir_all(dest)?; + let mut reader = BufReader::new(File::open(index)?); + let mut count = 0; + loop { + let mut line = String::new(); + let n = (&mut reader).take(16385).read_line(&mut line)?; + if n == 0 { + break; + } + ensure!( + n <= 16384 && line.ends_with('\n'), + "provenance_corrupt: checksum record" + ); + count += 1; + ensure!(count <= 1_000_000, "input_limit: checksum records"); + let item: FileHash = serde_json::from_str(&line)?; + let from = safe_path(root, &item.path)?; + ensure!( + fs::symlink_metadata(&from)?.file_type().is_file(), + "provenance_corrupt: not regular file" + ); + let to = safe_path(dest, &item.path)?; + fs::create_dir_all(to.parent().context("path")?)?; + let mut w = OpenOptions::new().write(true).create_new(true).open(to)?; + ensure!( + item.size <= 8 * 1024 * 1024 * 1024, + "input_limit: source file size" + ); + let mut input = File::open(from)?.take(item.size + 1); + let (size, hash) = copy_hash(&mut input, &mut w)?; + ensure!( + size == item.size && hash == item.sha256, + "provenance_corrupt: source hash {}", + item.path + ); + w.sync_all()? + } + Ok(()) +} +pub(crate) fn visit_files( + root: &Path, + callback: &mut impl FnMut(&Path) -> Result<()>, + depth: usize, +) -> Result<()> { + ensure!(depth <= 24, "input_limit: directory depth"); + for e in fs::read_dir(root)? { + let e = e?; + let t = e.file_type()?; + if t.is_dir() { + visit_files(&e.path(), callback, depth + 1)? + } else { + ensure!(t.is_file(), "unsafe_path: symlink/special file"); + callback(&e.path())? + } + } + Ok(()) +} diff --git a/crates/shacraft-compat/src/lib.rs b/crates/shacraft-compat/src/lib.rs new file mode 100644 index 0000000..fa04b8a --- /dev/null +++ b/crates/shacraft-compat/src/lib.rs @@ -0,0 +1,119 @@ +//! Offline world interchange. Imports publish a new native store atomically; +//! exports hold its single-writer lock and never overwrite a destination. +mod anvil; +mod entities; +mod io; +pub mod nbt; +mod schem; +pub use anvil::{export_anvil, import_anvil}; +use anyhow::{Result, ensure}; +pub use schem::{export_schem, import_schem}; +use serde::{Deserialize, Serialize}; +use shacraft_core::WorldStore; +use std::{collections::BTreeMap, path::Path}; + +pub const DATA_VERSION: i32 = 4903; +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, clap::ValueEnum)] +#[serde(rename_all = "kebab-case")] +pub enum Mode { + Exact, + BestEffort, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Issue { + pub code: String, + pub severity: String, + pub action: String, + pub location: String, + pub detail: String, + pub count: u64, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Report { + pub schema_version: u32, + pub format: String, + pub mode: Mode, + pub data_version: i32, + pub worlds: BTreeMap, + pub chunks: u64, + pub sections: u64, + pub nonair_blocks: u64, + pub issues: Vec, + pub issue_limit: usize, + pub omitted_issues: u64, + pub source_files: u64, + pub source_bytes: u64, + pub native_entity_bytes: u64, + pub profile: String, +} +impl Report { + fn new(format: &str, mode: Mode) -> Self { + Self{schema_version:1,format:format.into(),mode,data_version:DATA_VERSION,worlds:BTreeMap::new(),chunks:0,sections:0,nonair_blocks:0,issues:vec![],issue_limit:1000,omitted_issues:0,source_files:0,source_bytes:0,native_entity_bytes:0,profile:"Java 26.2 (DataVersion 4903); blocks editable, other typed NBT preserved on disk; offline writer lock".into()} + } + fn issue( + &mut self, + code: &str, + action: &str, + location: impl Into, + detail: impl Into, + ) { + if self.issues.len() < self.issue_limit { + self.issues.push(Issue { + code: code.into(), + severity: if action == "preserved" { + "info" + } else { + "warning" + } + .into(), + action: action.into(), + location: location.into(), + detail: detail.into(), + count: 1, + }) + } else { + self.omitted_issues += 1 + } + } +} +#[derive(Debug, Serialize, Deserialize)] +struct Provenance { + schema_version: u32, + format: String, + data_version: i32, + worlds: BTreeMap, + schem_min: Option<[i32; 3]>, + schem_max: Option<[i32; 3]>, + #[serde(default)] + entity_fingerprint: Option, + #[serde(default)] + entity_blob_hashes: BTreeMap, +} +#[derive(Debug, Serialize, Deserialize)] +struct Dimension { + path: String, + revision: u64, +} +fn provenance(root: &Path) -> Result> { + let p = root.join("compat/provenance.json"); + if !p.exists() { + return Ok(None); + } + let b = io::read_limited(&p, 4 * 1024 * 1024)?; + let p: Provenance = serde_json::from_slice(&b)?; + ensure!( + p.schema_version == 1, + "compat_version: unsupported provenance" + ); + Ok(Some(p)) +} +fn section_cells(store: &mut WorldStore, world: &str, pos: [i32; 3]) -> Result<[u32; 4096]> { + let min = pos.map(|v| v * 16); + let max = min.map(|v| v + 15); + let mut cells = [0; 4096]; + for c in store.read_region(world, min, max)? { + let [x, y, z] = c.pos.map(|v| v.rem_euclid(16) as usize); + cells[x + z * 16 + y * 256] = c.block + } + Ok(cells) +} diff --git a/crates/shacraft-compat/src/main.rs b/crates/shacraft-compat/src/main.rs new file mode 100644 index 0000000..48b3651 --- /dev/null +++ b/crates/shacraft-compat/src/main.rs @@ -0,0 +1,97 @@ +use anyhow::Result; +use clap::{Parser, Subcommand}; +use shacraft_compat::{Mode, export_anvil, export_schem, import_anvil, import_schem}; +use std::path::PathBuf; +#[derive(Parser)] +#[command(about = "Offline bounded Java26.2 world converter; every destination must be new")] +struct Cli { + #[command(subcommand)] + command: Command, +} +#[derive(Subcommand)] +enum Command { + ImportAnvil { + source: PathBuf, + destination: PathBuf, + #[arg(long, value_enum, default_value = "exact")] + mode: Mode, + }, + ExportAnvil { + store: PathBuf, + destination: PathBuf, + #[arg(long)] + world: Option, + #[arg(long, value_enum, default_value = "exact")] + mode: Mode, + }, + ImportSchem { + source: PathBuf, + destination: PathBuf, + #[arg(long, default_value = "main")] + world: String, + #[arg(long, value_enum, default_value = "exact")] + mode: Mode, + }, + ExportSchem { + store: PathBuf, + destination: PathBuf, + #[arg(long, default_value = "main")] + world: String, + #[arg(long,value_parser=parse_pos,allow_hyphen_values=true)] + min: Option<[i32; 3]>, + #[arg(long,value_parser=parse_pos,allow_hyphen_values=true)] + max: Option<[i32; 3]>, + #[arg(long, value_enum, default_value = "exact")] + mode: Mode, + }, +} +fn parse_pos(s: &str) -> Result<[i32; 3], String> { + let parts = s + .split(',') + .map(str::parse::) + .collect::, _>>() + .map_err(|e| e.to_string())?; + parts + .try_into() + .map_err(|_| "coordinates must be x,y,z".into()) +} +fn run() -> Result<()> { + let report = match Cli::parse().command { + Command::ImportAnvil { + source, + destination, + mode, + } => import_anvil(&source, &destination, mode)?, + Command::ExportAnvil { + store, + destination, + world, + mode, + } => export_anvil(&store, world.as_deref(), &destination, mode)?, + Command::ImportSchem { + source, + destination, + world, + mode, + } => import_schem(&source, &destination, &world, mode)?, + Command::ExportSchem { + store, + destination, + world, + min, + max, + mode, + } => export_schem(&store, &world, &destination, min, max, mode)?, + }; + println!("{}", serde_json::to_string_pretty(&report)?); + Ok(()) +} +fn main() { + if let Err(e) = run() { + eprintln!( + "{}", + serde_json::json!({"error":format!("{e:#}"),"success":false}) + ); + std::process::exit(1) + } +} diff --git a/crates/shacraft-compat/src/nbt.rs b/crates/shacraft-compat/src/nbt.rs new file mode 100644 index 0000000..3a9d999 --- /dev/null +++ b/crates/shacraft-compat/src/nbt.rs @@ -0,0 +1,335 @@ +//! Bounded, big-endian Java NBT. Numeric types, float bit patterns and list +//! element types (including empty lists) survive decoding and encoding. +use anyhow::{Context, Result, bail, ensure}; +use std::collections::BTreeMap; +use std::io::{Cursor, Read, Write}; + +pub type Compound = BTreeMap; +pub const MAX_BYTES: usize = 16 * 1024 * 1024; +const MAX_NODES: usize = 1_000_000; +#[derive(Clone, Debug, PartialEq)] +pub enum Tag { + Byte(i8), + Short(i16), + Int(i32), + Long(i64), + Float(u32), + Double(u64), + ByteArray(Vec), + String(String), + List(u8, Vec), + Compound(Compound), + IntArray(Vec), + LongArray(Vec), +} +impl Tag { + pub fn id(&self) -> u8 { + match self { + Self::Byte(_) => 1, + Self::Short(_) => 2, + Self::Int(_) => 3, + Self::Long(_) => 4, + Self::Float(_) => 5, + Self::Double(_) => 6, + Self::ByteArray(_) => 7, + Self::String(_) => 8, + Self::List(..) => 9, + Self::Compound(_) => 10, + Self::IntArray(_) => 11, + Self::LongArray(_) => 12, + } + } + pub fn compound(&self) -> Result<&Compound> { + if let Self::Compound(v) = self { + Ok(v) + } else { + bail!("nbt_type: expected compound") + } + } + pub fn compound_mut(&mut self) -> Result<&mut Compound> { + if let Self::Compound(v) = self { + Ok(v) + } else { + bail!("nbt_type: expected compound") + } + } + pub fn list(&self, id: u8) -> Result<&[Tag]> { + if let Self::List(kind, v) = self { + ensure!( + *kind == id || v.is_empty(), + "nbt_type: wrong list element type" + ); + Ok(v) + } else { + bail!("nbt_type: expected list") + } + } + pub fn int(&self) -> Result { + if let Self::Int(v) = self { + Ok(*v) + } else { + bail!("nbt_type: expected int") + } + } + pub fn numeric_i32(&self) -> Result { + match self { + Self::Byte(v) => Ok(*v as i32), + Self::Short(v) => Ok(*v as i32), + Self::Int(v) => Ok(*v), + _ => bail!("nbt_type: expected integer"), + } + } + pub fn string(&self) -> Result<&str> { + if let Self::String(v) = self { + Ok(v) + } else { + bail!("nbt_type: expected string") + } + } + pub fn bytes(&self) -> Result<&[u8]> { + if let Self::ByteArray(v) = self { + Ok(v) + } else { + bail!("nbt_type: expected byte array") + } + } + pub fn longs(&self) -> Result<&[i64]> { + if let Self::LongArray(v) = self { + Ok(v) + } else { + bail!("nbt_type: expected long array") + } + } + pub fn ints(&self) -> Result<&[i32]> { + if let Self::IntArray(v) = self { + Ok(v) + } else { + bail!("nbt_type: expected int array") + } + } +} +pub fn get<'a>(c: &'a Compound, k: &str) -> Result<&'a Tag> { + c.get(k).with_context(|| format!("nbt_missing: {k}")) +} +pub fn compound(entries: impl IntoIterator, Tag)>) -> Tag { + Tag::Compound(entries.into_iter().map(|(k, v)| (k.into(), v)).collect()) +} + +pub fn decode(bytes: &[u8]) -> Result<(String, Tag)> { + ensure!(bytes.len() <= MAX_BYTES, "nbt_limit: decompressed bytes"); + let mut r = Decoder { + r: Cursor::new(bytes), + nodes: 0, + }; + let id = r.byte()?; + ensure!(id == 10, "nbt_root: root must be compound"); + let name = r.string()?; + let tag = r.tag(id, 0)?; + ensure!( + r.r.position() as usize == bytes.len(), + "nbt_trailing: extra bytes" + ); + Ok((name, tag)) +} +struct Decoder<'a> { + r: Cursor<&'a [u8]>, + nodes: usize, +} +impl Decoder<'_> { + fn bytes(&mut self) -> Result<[u8; N]> { + let mut b = [0; N]; + self.r.read_exact(&mut b)?; + Ok(b) + } + fn byte(&mut self) -> Result { + Ok(self.bytes::<1>()?[0]) + } + fn len(&mut self, width: usize) -> Result { + let n = i32::from_be_bytes(self.bytes()?); + ensure!(n >= 0, "nbt_length: negative array/list length"); + let n = n as usize; + ensure!( + n <= MAX_BYTES / width + && n * width <= self.r.get_ref().len() - self.r.position() as usize, + "nbt_limit: impossible array/list length" + ); + Ok(n) + } + fn string(&mut self) -> Result { + let n = u16::from_be_bytes(self.bytes()?) as usize; + let mut b = vec![0; n]; + self.r.read_exact(&mut b)?; + Ok(cesu8::from_java_cesu8(&b) + .context("nbt_string: invalid modified UTF-8")? + .into_owned()) + } + fn tag(&mut self, id: u8, depth: usize) -> Result { + self.nodes += 1; + ensure!( + depth <= 64 && self.nodes <= MAX_NODES, + "nbt_limit: depth/node budget" + ); + Ok(match id { + 1 => Tag::Byte(self.byte()? as i8), + 2 => Tag::Short(i16::from_be_bytes(self.bytes()?)), + 3 => Tag::Int(i32::from_be_bytes(self.bytes()?)), + 4 => Tag::Long(i64::from_be_bytes(self.bytes()?)), + 5 => Tag::Float(u32::from_be_bytes(self.bytes()?)), + 6 => Tag::Double(u64::from_be_bytes(self.bytes()?)), + 7 => { + let n = self.len(1)?; + let mut v = vec![0; n]; + self.r.read_exact(&mut v)?; + Tag::ByteArray(v) + } + 8 => Tag::String(self.string()?), + 9 => { + let kind = self.byte()?; + let n = self.len(1)?; + ensure!( + kind <= 12 && (kind != 0 || n == 0), + "nbt_type: invalid list element" + ); + ensure!(n <= MAX_NODES - self.nodes, "nbt_limit: list nodes"); + let mut v = Vec::new(); + for _ in 0..n { + v.push(self.tag(kind, depth + 1)?) + } + Tag::List(kind, v) + } + 10 => { + let mut c = BTreeMap::new(); + loop { + let kind = self.byte()?; + if kind == 0 { + break; + } + let name = self.string()?; + ensure!( + !c.contains_key(&name), + "nbt_duplicate: duplicate compound name" + ); + c.insert(name, self.tag(kind, depth + 1)?); + } + Tag::Compound(c) + } + 11 => { + let n = self.len(4)?; + let mut v = Vec::with_capacity(n); + for _ in 0..n { + v.push(i32::from_be_bytes(self.bytes()?)) + } + Tag::IntArray(v) + } + 12 => { + let n = self.len(8)?; + let mut v = Vec::with_capacity(n); + for _ in 0..n { + v.push(i64::from_be_bytes(self.bytes()?)) + } + Tag::LongArray(v) + } + _ => bail!("nbt_type: unknown tag {id}"), + }) + } +} +pub fn encode(name: &str, tag: &Tag) -> Result> { + ensure!(tag.id() == 10, "nbt_root: expected compound"); + let mut b = vec![10]; + write_string(&mut b, name)?; + write_tag(&mut b, tag, 0)?; + ensure!(b.len() <= MAX_BYTES, "nbt_limit: encoded bytes"); + Ok(b) +} +fn write_string(w: &mut Vec, s: &str) -> Result<()> { + let b = cesu8::to_java_cesu8(s); + ensure!(b.len() <= u16::MAX as usize, "nbt_limit: string bytes"); + w.write_all(&(b.len() as u16).to_be_bytes())?; + w.write_all(&b)?; + Ok(()) +} +fn write_len(w: &mut Vec, n: usize) -> Result<()> { + ensure!(n <= MAX_BYTES, "nbt_limit: array count"); + w.extend((n as i32).to_be_bytes()); + Ok(()) +} +fn write_tag(w: &mut Vec, t: &Tag, depth: usize) -> Result<()> { + ensure!( + depth <= 64 && w.len() <= MAX_BYTES, + "nbt_limit: encode depth/bytes" + ); + match t { + Tag::Byte(v) => w.push(*v as u8), + Tag::Short(v) => w.extend(v.to_be_bytes()), + Tag::Int(v) => w.extend(v.to_be_bytes()), + Tag::Long(v) => w.extend(v.to_be_bytes()), + Tag::Float(v) => w.extend(v.to_be_bytes()), + Tag::Double(v) => w.extend(v.to_be_bytes()), + Tag::String(s) => write_string(w, s)?, + Tag::ByteArray(v) => { + write_len(w, v.len())?; + w.extend(v) + } + Tag::IntArray(v) => { + write_len(w, v.len())?; + for n in v { + w.extend(n.to_be_bytes()) + } + } + Tag::LongArray(v) => { + write_len(w, v.len())?; + for n in v { + w.extend(n.to_be_bytes()) + } + } + Tag::List(id, v) => { + ensure!(*id <= 12 && (*id != 0 || v.is_empty()), "nbt_type: list"); + w.push(*id); + write_len(w, v.len())?; + for t in v { + ensure!(t.id() == *id, "nbt_type: heterogeneous list"); + write_tag(w, t, depth + 1)? + } + } + Tag::Compound(c) => { + for (k, t) in c { + w.push(t.id()); + write_string(w, k)?; + write_tag(w, t, depth + 1)? + } + w.push(0) + } + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn all_types_roundtrip() { + let t = compound([ + ("byte", Tag::Byte(-128)), + ("short", Tag::Short(-32768)), + ("int", Tag::Int(i32::MAX)), + ("long", Tag::Long(i64::MIN)), + ("float", Tag::Float(0x7fc12345)), + ("double", Tag::Double(0xfff0000000000000)), + ("bytes", Tag::ByteArray(vec![0, 128, 255])), + ("ints", Tag::IntArray(vec![-1, 0, 2])), + ("longs", Tag::LongArray(vec![i64::MIN, i64::MAX])), + ("string", Tag::String("\0Привет🌍".into())), + ("empty", Tag::List(4, vec![])), + ("list", Tag::List(10, vec![compound([("x", Tag::Int(2))])])), + ]); + assert_eq!( + decode(&encode("root", &t).unwrap()).unwrap(), + ("root".into(), t) + ); + } + #[test] + fn rejects_bombs() { + assert!(decode(&[10, 0, 0, 7, 0, 1, b'a', 127, 255, 255, 255, 0]).is_err()); + assert!(decode(&[10, 0, 0, 0, 0]).is_err()); + } +} diff --git a/crates/shacraft-compat/src/schem.rs b/crates/shacraft-compat/src/schem.rs new file mode 100644 index 0000000..fae5d96 --- /dev/null +++ b/crates/shacraft-compat/src/schem.rs @@ -0,0 +1,469 @@ +use crate::{ + DATA_VERSION, Dimension, Mode, Provenance, Report, io, + nbt::{self, Compound, Tag, compound, get}, + provenance, +}; +use anyhow::{Context, Result, ensure}; +use shacraft_core::{BlockChange, WorldStore}; +use std::{collections::BTreeMap, fs, path::Path}; +const MAX_VOLUME: usize = 262_144; + +fn container(root: &Tag) -> Result<&Compound> { + get(root.compound()?, "Schematic")?.compound() +} +fn shape(c: &Compound) -> Result<([i32; 3], [i32; 3], usize)> { + let dim = |key| -> Result { + if let Tag::Short(v) = get(c, key)? { + Ok(*v as u16 as i32) + } else { + anyhow::bail!("schem_type: {key} must be unsigned short") + } + }; + let size = [dim("Width")?, dim("Height")?, dim("Length")?]; + ensure!( + size.iter().all(|v| *v > 0), + "schem_dimensions: empty dimension" + ); + let volume = size + .iter() + .try_fold(1usize, |n, v| n.checked_mul(*v as usize)) + .context("schem_limit: volume overflow")?; + ensure!(volume <= MAX_VOLUME, "schem_limit: maximum262144 cells"); + let min = if let Some(t) = c.get("Offset") { + let v = t.ints()?; + ensure!(v.len() == 3, "schem_offset: expected3 values"); + [v[0], v[1], v[2]] + } else { + [0; 3] + }; + let mut max = min; + for i in 0..3 { + max[i] = min[i] + .checked_add(size[i] - 1) + .context("schem_limit: offset overflow")?; + ensure!( + min[i] >= -30_000_000 && max[i] <= 30_000_000, + "schem_limit: coordinates" + ) + } + Ok((min, max, volume)) +} +fn varints(bytes: &[u8], count: usize) -> Result> { + let mut out = Vec::with_capacity(count); + let mut p = 0; + for _ in 0..count { + let mut n = 0; + for shift in (0..35).step_by(7) { + let b = *bytes.get(p).context("schem_data: truncated varint")?; + p += 1; + ensure!(shift != 28 || b <= 15, "schem_data: varint overflow"); + n |= u32::from(b & 127) << shift; + if b & 128 == 0 { + out.push(n); + break; + } + ensure!(shift < 28, "schem_data: overlong varint") + } + } + ensure!(p == bytes.len(), "schem_data: trailing indices"); + Ok(out) +} +fn write_varint(out: &mut Vec, mut n: u32) { + while n >= 128 { + out.push((n as u8 & 127) | 128); + n >>= 7 + } + out.push(n as u8) +} +fn palette_data(c: &Compound, count: usize) -> Result<(BTreeMap, Vec)> { + let mut palette = BTreeMap::new(); + for (name, id) in get(c, "Palette")?.compound()? { + let id = id.int()?; + ensure!(id >= 0, "schem_palette: negative index"); + ensure!( + palette.insert(id as u32, name.clone()).is_none(), + "schem_palette: duplicate index" + ) + } + ensure!( + !palette.is_empty() && palette.len() <= MAX_VOLUME, + "schem_palette: size" + ); + let data = varints(get(c, "Data")?.bytes()?, count)?; + ensure!( + data.iter().all(|id| palette.contains_key(id)), + "schem_palette: index not in palette" + ); + Ok((palette, data)) +} +fn local_pos(index: usize, min: [i32; 3], max: [i32; 3]) -> [i32; 3] { + let w = (max[0] - min[0] + 1) as usize; + let d = (max[2] - min[2] + 1) as usize; + [ + min[0] + (index % w) as i32, + min[1] + (index / (w * d)) as i32, + min[2] + ((index / w) % d) as i32, + ] +} + +pub fn import_schem(source: &Path, destination: &Path, world: &str, mode: Mode) -> Result { + let stage = io::stage(destination)?; + let compat = stage.path().join("compat"); + fs::create_dir(&compat)?; + let bytes = io::gzip_read(source)?; + let (_, root) = nbt::decode(&bytes)?; + let c = container(&root)?; + ensure!( + get(c, "Version")?.int()? == 3, + "schem_version: only Sponge v3 supported" + ); + let version = get(c, "DataVersion")?.int()?; + ensure!( + mode != Mode::Exact || version == DATA_VERSION, + "unsupported_data_version: exact requires4903" + ); + let (min, max, volume) = shape(c)?; + let mut report = Report::new("sponge-schem-v3", mode); + report.data_version = version; + if version != DATA_VERSION { + report.issue( + "unverified_data_version", + "unsupported", + "Schematic.DataVersion", + format!("Preserved {version}; no DataFixer migration"), + ) + } + let blocks = get(c, "Blocks")?.compound()?; + let (palette, indices) = palette_data(blocks, volume)?; + if let Some(b) = c.get("Biomes") { + palette_data(b.compound()?, volume)?; + report.issue("biomes_preserved","preserved","Schematic.Biomes","Full3D biome container retained in typed NBT source; native simulation does not consume it") + } + for key in ["Entities", "Metadata"] { + if c.contains_key(key) { + report.issue( + "opaque_nbt_preserved", + "preserved", + format!("Schematic.{key}"), + "Retained in original typed NBT; not editable in this adapter", + ) + } + } + if blocks.contains_key("BlockEntities") { + for entity in get(blocks, "BlockEntities")?.list(10)? { + let entity = entity.compound()?; + let pos = get(entity, "Pos")?.ints()?; + ensure!( + pos.len() == 3 && (0..3).all(|i| pos[i] >= 0 && pos[i] <= max[i] - min[i]), + "schem_block_entity_position: outside volume" + ); + get(entity, "Id")?.string()?; + if let Some(data) = entity.get("Data") { + data.compound()?; + } + } + report.issue( + "block_entities_preserved", + "preserved", + "Schematic.Blocks.BlockEntities", + "Inventories and unknown tags retained on disk", + ) + } + let mut store = WorldStore::open(stage.path(), 32)?; + store.create_world(world, None)?; + let mut registry = BTreeMap::new(); + for (id, state) in palette { + let name = if state.contains(':') { + state + } else { + format!("minecraft:{state}") + }; + registry.insert(id, store.register_block(&name)?); + } + let mut batch = Vec::new(); + let mut op = 0; + for (index, id) in indices.into_iter().enumerate() { + let block = registry[&id]; + if block != 0 { + batch.push(BlockChange { + pos: local_pos(index, min, max), + block, + }); + report.nonair_blocks += 1 + } + if batch.len() == 32768 { + store.edit( + world, + store.revision(world)?, + &format!("compat-import-{op}"), + std::mem::take(&mut batch), + )?; + op += 1 + } + } + if !batch.is_empty() { + store.edit( + world, + store.revision(world)?, + &format!("compat-import-{op}"), + batch, + )?; + } + let revision = store.revision(world)?; + store.flush()?; + drop(store); + let original = compat.join("original"); + fs::create_dir(&original)?; + fs::copy(source, original.join("source.schem"))?; + // The source is copied and hashed after parsing, then checked against parsed bytes. + ensure!( + io::gzip_read(&original.join("source.schem"))? == bytes, + "source_changed: schematic changed during import" + ); + let mut provenance_report = Report::new("source", mode); + let indexed = compat.join("indexed"); + io::copy_source( + &original, + &indexed, + &compat.join("files.jsonl"), + &mut provenance_report, + )?; + fs::remove_dir_all(&original)?; + fs::rename(indexed, &original)?; + report.source_files = provenance_report.source_files; + report.source_bytes = provenance_report.source_bytes; + report.worlds.insert(world.into(), revision); + let mut provenance = Provenance { + schema_version: 1, + format: "sponge-schem-v3".into(), + data_version: version, + worlds: BTreeMap::from([( + world.into(), + Dimension { + path: String::new(), + revision, + }, + )]), + schem_min: Some(min), + schem_max: Some(max), + entity_fingerprint: None, + entity_blob_hashes: BTreeMap::new(), + }; + crate::entities::import_schem(stage.path(), c, &mut provenance, &mut report)?; + io::json(&compat.join("provenance.json"), &provenance)?; + io::json(&compat.join("import-report.json"), &report)?; + io::publish(stage, destination)?; + Ok(report) +} + +pub fn export_schem( + store_path: &Path, + world: &str, + destination: &Path, + min: Option<[i32; 3]>, + max: Option<[i32; 3]>, + mode: Mode, +) -> Result { + let mut store = WorldStore::open(store_path, 32)?; + let revision = store.revision(world)?; + let p = provenance(store_path)?; + let original = p + .as_ref() + .filter(|p| p.format == "sponge-schem-v3" && p.worlds.contains_key(world)); + let bounds = match (min, max) { + (Some(a), Some(b)) => (a, b), + (None, None) => { + let p = original.context("schem_bounds: supply --min and --max for a native world")?; + ( + p.schem_min.context("provenance bounds")?, + p.schem_max.context("provenance bounds")?, + ) + } + _ => anyhow::bail!("schem_bounds: both min/max required"), + }; + let stage = io::stage(destination)?; + let mut report = Report::new("sponge-schem-v3", mode); + if original.is_none() && p.is_some() { + ensure!( + mode != Mode::Exact, + "exact_cross_format: source biome/block-entity metadata requires format-specific mapping; use best-effort" + ); + io::copy_verified( + &store_path.join("compat/original"), + &stage.path().join("source-sidecar"), + &store_path.join("compat/files.jsonl"), + )?; + report.issue("cross_format_opaque_data","unsupported","source-sidecar","Source world metadata, block entities and biome layout are archived without cross-format translation; blocks and entity bridge are exported"); + } + report.worlds.insert(world.into(), revision); + let (mut name, mut root) = if let Some(p) = original { + ensure!( + Some(bounds.0) == p.schem_min && Some(bounds.1) == p.schem_max, + "schem_bounds: cropping imported entities/biomes unsupported" + ); + ensure!( + mode != Mode::Exact || p.data_version == DATA_VERSION, + "unsupported_data_version: exact requires4903" + ); + let checked = stage.path().join(".checked"); + io::copy_verified( + &store_path.join("compat/original"), + &checked, + &store_path.join("compat/files.jsonl"), + )?; + let entity_changes = crate::entities::changed(store_path, p)?; + if p.worlds[world].revision == revision && !entity_changes { + fs::rename( + checked.join("source.schem"), + stage.path().join("world.schem"), + )?; + fs::remove_dir(&checked)?; + report.data_version = p.data_version; + report.issue( + "unchanged_original", + "preserved", + "world.schem", + "Byte-identical verified source", + ); + io::report(stage.path(), &report)?; + io::publish(stage, destination)?; + return Ok(report); + } + ensure!( + mode != Mode::Exact, + "exact_provenance_invalidated: world revision changed; derived/opaque metadata cannot be proven current; use best-effort" + ); + let decoded = nbt::decode(&io::gzip_read(&checked.join("source.schem"))?)?; + fs::rename(&checked, stage.path().join("source-sidecar"))?; + report.data_version = p.data_version; + report.issue("modified_source_metadata","approximated","Schematic","Original entities,3D biomes,metadata and unknown tags preserved; behavior and placement dependencies are not simulated"); + decoded + } else { + ( + "".into(), + compound([( + "Schematic", + compound([ + ("Version", Tag::Int(3)), + ("DataVersion", Tag::Int(DATA_VERSION)), + ]), + )]), + ) + }; + let c = get_mut(root.compound_mut()?, "Schematic")?.compound_mut()?; + let mut volume = 1usize; + for (i, key) in ["Width", "Height", "Length"].into_iter().enumerate() { + let d = i64::from(bounds.1[i]) - i64::from(bounds.0[i]) + 1; + ensure!((1..=65535).contains(&d), "schem_dimensions: invalid extent"); + volume = volume + .checked_mul(d as usize) + .context("schem_limit: volume overflow")?; + ensure!(volume <= MAX_VOLUME, "schem_limit: maximum262144 cells"); + c.insert(key.into(), Tag::Short(d as u16 as i16)); + } + c.insert("Offset".into(), Tag::IntArray(bounds.0.to_vec())); + let old_blocks = c.get("Blocks").cloned(); + let mut blocks = old_blocks + .clone() + .unwrap_or_else(|| compound([] as [(&str, Tag); 0])); + let old_data = if let Some(old) = &old_blocks { + Some(palette_data(old.compound()?, volume)?) + } else { + None + }; + let mut states = BTreeMap::::new(); + let mut indices = vec![0u32; volume]; + let air = store.registry()[0].clone(); + states.insert(air, 0); + let width = (bounds.1[0] - bounds.0[0] + 1) as usize; + let depth = (bounds.1[2] - bounds.0[2] + 1) as usize; + for change in store.read_region(world, bounds.0, bounds.1)? { + let state = store.registry()[change.block as usize].clone(); + let next = states.len() as u32; + let id = *states.entry(state).or_insert(next); + let [x, y, z] = [ + change.pos[0] - bounds.0[0], + change.pos[1] - bounds.0[1], + change.pos[2] - bounds.0[2], + ]; + indices[x as usize + z as usize * width + y as usize * width * depth] = id; + report.nonair_blocks += 1 + } + for state in states.keys().filter(|s| !s.starts_with("minecraft:")) { + report.issue( + "nonvanilla_block_state", + "unsupported", + "Schematic.Blocks.Palette", + format!( + "{state} is preserved as a Sponge resource id; pasting requires matching target mod" + ), + ); + } + let reverse: BTreeMap = states.iter().map(|(s, id)| (*id, s.as_str())).collect(); + let bc = blocks.compound_mut()?; + if let Some(Tag::List(_, entities)) = bc.get_mut("BlockEntities") { + entities.retain(|e|{ + let Ok(e)=e.compound()else{return true};let Ok(pos)=get(e,"Pos").and_then(Tag::ints)else{return true};if pos.len()!=3{return true}let i=pos[0]as i64+pos[2]as i64*width as i64+pos[1]as i64*(width*depth)as i64; + let changed=if let Some((pal,data))=&old_data{if i>=0&&(i as usize)(c: &'a mut Compound, k: &str) -> Result<&'a mut Tag> { + c.get_mut(k).with_context(|| format!("nbt_missing: {k}")) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn varint_validation() { + assert_eq!( + varints(&[0, 127, 128, 1, 255, 255, 255, 255, 15], 4).unwrap(), + vec![0, 127, 128, u32::MAX] + ); + assert!(varints(&[128], 1).is_err()); + assert!(varints(&[255, 255, 255, 255, 16], 1).is_err()); + assert!(varints(&[0, 0], 1).is_err()); + } +} diff --git a/crates/shacraft-compat/tests/roundtrip.rs b/crates/shacraft-compat/tests/roundtrip.rs new file mode 100644 index 0000000..46c3eb2 --- /dev/null +++ b/crates/shacraft-compat/tests/roundtrip.rs @@ -0,0 +1,436 @@ +use shacraft_compat::{ + Mode, export_anvil, export_schem, import_anvil, import_schem, + nbt::{self, Tag}, +}; +use shacraft_core::{BlockChange, WorldStore}; +use std::{ + fs, + io::Read, + path::{Path, PathBuf}, +}; +fn fixture(name: &str) -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")) + .join("fixtures") + .join(name) +} +fn read_gzip(p: &Path) -> Tag { + let mut b = Vec::new(); + flate2::read::GzDecoder::new(fs::File::open(p).unwrap()) + .read_to_end(&mut b) + .unwrap(); + nbt::decode(&b).unwrap().1 +} +fn assert_tree_equal(source: &Path, out: &Path) { + for e in fs::read_dir(source).unwrap() { + let e = e.unwrap(); + let to = out.join(e.file_name()); + if e.file_type().unwrap().is_dir() { + assert_tree_equal(&e.path(), &to) + } else { + assert_eq!( + fs::read(e.path()).unwrap(), + fs::read(to).unwrap(), + "{}", + e.path().display() + ) + } + } +} + +#[test] +fn sponge_import_edits_unknown_states_and_preserves_nbt() { + let t = tempfile::tempdir().unwrap(); + let store_path = t.path().join("store"); + let source = fixture("sponge-v3.schem"); + let imported = import_schem(&source, &store_path, "main", Mode::Exact).unwrap(); + assert_eq!(imported.nonair_blocks, 4); + let exact = t.path().join("exact"); + export_schem(&store_path, "main", &exact, None, None, Mode::Exact).unwrap(); + assert_eq!( + fs::read(&source).unwrap(), + fs::read(exact.join("world.schem")).unwrap() + ); + let mut store = WorldStore::open(&store_path, 2).unwrap(); + let unknown = store.get_block("main", [-15, -1, 31]).unwrap(); + assert_eq!( + store.registry()[unknown as usize], + "example:unknown[facing=west]" + ); + let revision = store.revision("main").unwrap(); + store + .edit( + "main", + revision, + "break-container", + vec![BlockChange { + pos: [-17, -1, 31], + block: 0, + }], + ) + .unwrap(); + drop(store); + let rejected = t.path().join("rejected"); + assert!( + export_schem(&store_path, "main", &rejected, None, None, Mode::Exact) + .unwrap_err() + .to_string() + .contains("exact_provenance_invalidated") + ); + assert!(!rejected.exists()); + let edited = t.path().join("edited"); + let r = export_schem(&store_path, "main", &edited, None, None, Mode::BestEffort).unwrap(); + assert!(r.issues.iter().any(|i| i.code == "changed_block_entity")); + let a = read_gzip(&source); + let b = read_gzip(&edited.join("world.schem")); + let a = a.compound().unwrap()["Schematic"].compound().unwrap(); + let b = b.compound().unwrap()["Schematic"].compound().unwrap(); + for k in ["Metadata", "Entities", "Biomes", "UnknownRoot", "Offset"] { + assert_eq!(a[k], b[k], "{k}") + } + let reimport = t.path().join("reimport"); + import_schem(&edited.join("world.schem"), &reimport, "main", Mode::Exact).unwrap(); + let mut s = WorldStore::open(&reimport, 2).unwrap(); + assert_eq!(s.get_block("main", [-17, -1, 31]).unwrap(), 0); + assert_ne!(s.get_block("main", [-16, -1, 31]).unwrap(), 0); +} + +#[test] +fn genuine_java_world_import_exact_roundtrip_edit_and_new_chunk() { + let t = tempfile::tempdir().unwrap(); + let store_path = t.path().join("store"); + let source = fixture("java26_2-world"); + let imported = import_anvil(&source, &store_path, Mode::Exact).unwrap(); + assert_eq!(imported.nonair_blocks, 3); + assert_eq!(imported.chunks, 1); + let exact = t.path().join("exact"); + export_anvil(&store_path, None, &exact, Mode::Exact).unwrap(); + assert_tree_equal(&source, &exact); + let mut store = WorldStore::open(&store_path, 2).unwrap(); + let stone = store.register_block("minecraft:stone").unwrap(); + assert_ne!(store.get_block("main", [-1, -1, 31]).unwrap(), 0); + let revision = store.revision("main").unwrap(); + store + .edit( + "main", + revision, + "edit", + vec![ + BlockChange { + pos: [-1, -1, 31], + block: 0, + }, + BlockChange { + pos: [512, 64, -513], + block: stone, + }, + ], + ) + .unwrap(); + drop(store); + let rejected = t.path().join("rejected"); + assert!(export_anvil(&store_path, None, &rejected, Mode::Exact).is_err()); + assert!(!rejected.exists()); + let edited = t.path().join("edited"); + let report = export_anvil(&store_path, None, &edited, Mode::BestEffort).unwrap(); + assert_eq!(report.chunks, 2); + assert!( + report + .issues + .iter() + .any(|i| i.code == "dependent_records_invalidated") + ); + assert_eq!( + fs::read(source.join("entities/r.-1.0.mca")).unwrap(), + fs::read(edited.join("entities/r.-1.0.mca")).unwrap() + ); + let reimport = t.path().join("reimport"); + import_anvil(&edited, &reimport, Mode::Exact).unwrap(); + let mut store = WorldStore::open(&reimport, 2).unwrap(); + assert_eq!(store.get_block("main", [-1, -1, 31]).unwrap(), 0); + let id = store.get_block("main", [512, 64, -513]).unwrap(); + assert_eq!(store.registry()[id as usize], "minecraft:stone"); +} + +#[test] +fn native_new_world_export_and_schematic() { + let t = tempfile::tempdir().unwrap(); + let store_path = t.path().join("store"); + let mut store = WorldStore::open(&store_path, 2).unwrap(); + store.create_world("native", None).unwrap(); + let stone = store.register_block("minecraft:stone").unwrap(); + let stairs = store + .register_block( + "minecraft:oak_stairs[facing=east,half=top,shape=straight,waterlogged=false]", + ) + .unwrap(); + store + .edit( + "native", + 0, + "build", + vec![ + BlockChange { + pos: [-1, 63, 0], + block: stone, + }, + BlockChange { + pos: [0, 64, 0], + block: stairs, + }, + ], + ) + .unwrap(); + drop(store); + let world = t.path().join("world"); + export_anvil(&store_path, Some("native"), &world, Mode::BestEffort).unwrap(); + assert!( + world + .join("data/minecraft/world_gen_settings.dat") + .is_file() + ); + let reimport = t.path().join("reimport"); + assert_eq!( + import_anvil(&world, &reimport, Mode::Exact) + .unwrap() + .nonair_blocks, + 2 + ); + let schem = t.path().join("schem"); + export_schem( + &store_path, + "native", + &schem, + Some([-1, 63, 0]), + Some([0, 64, 0]), + Mode::Exact, + ) + .unwrap(); + let s = t.path().join("schem-reimport"); + assert_eq!( + import_schem(&schem.join("world.schem"), &s, "main", Mode::Exact) + .unwrap() + .nonair_blocks, + 2 + ); +} + +#[test] +fn no_overwrite_and_provenance_hash_guard() { + let t = tempfile::tempdir().unwrap(); + let path = t.path().join("store"); + let source = fixture("sponge-v3.schem"); + import_schem(&source, &path, "main", Mode::Exact).unwrap(); + let before = fs::read(path.join("worlds.sqlite3")).unwrap(); + assert!(import_schem(&source, &path, "other", Mode::Exact).is_err()); + assert_eq!(before, fs::read(path.join("worlds.sqlite3")).unwrap()); + fs::write(path.join("compat/original/source.schem"), b"tampered").unwrap(); + let out = t.path().join("out"); + assert!(export_schem(&path, "main", &out, None, None, Mode::Exact).is_err()); + assert!(!out.exists()); +} + +#[test] +fn malformed_input_is_not_published() { + let t = tempfile::tempdir().unwrap(); + let bad = t.path().join("bad.schem"); + fs::write(&bad, b"not gzip").unwrap(); + let out = t.path().join("out"); + assert!(import_schem(&bad, &out, "main", Mode::Exact).is_err()); + assert!(!out.exists()); +} + +fn metadata(path: &Path) -> serde_json::Value { + let db = rusqlite::Connection::open(path.join("server.sqlite3")).unwrap(); + let text: String = db + .query_row("SELECT json FROM metadata WHERE id=1", [], |r| r.get(0)) + .unwrap(); + serde_json::from_str(&text).unwrap() +} +fn save_metadata(path: &Path, v: &serde_json::Value) { + let db = rusqlite::Connection::open(path.join("server.sqlite3")).unwrap(); + db.execute( + "UPDATE metadata SET json=?1 WHERE id=1", + [serde_json::to_string(v).unwrap()], + ) + .unwrap(); +} +#[test] +fn native_entity_edit_move_create_remove_roundtrip() { + let t = tempfile::tempdir().unwrap(); + let path = t.path().join("store"); + import_anvil(&fixture("java26_2-world"), &path, Mode::Exact).unwrap(); + let mut meta = metadata(&path); + let id = meta["entities"] + .as_object() + .unwrap() + .keys() + .next() + .unwrap() + .clone(); + meta["entities"][&id]["position"] = serde_json::json!([513.5, 65., -513.5]); + meta["entities"][&id]["yaw"] = serde_json::json!(1.25); + meta["entities"][&id]["properties"]["Invisible"] = serde_json::json!(true); + let new_id = "12345678-1234-4234-8234-123456789abc"; + meta["entities"][new_id] = serde_json::json!({"id":new_id,"world":"main","kind":"minecraft:cow","type":"minecraft:cow","position":[0.5,70.,0.5],"yaw":0.,"properties":{"Health":17.0,"CustomName":"moo","custom_unmapped":{"a":1}}}); + meta["revision"] = serde_json::json!(1); + save_metadata(&path, &meta); + let rejected = t.path().join("exact"); + assert!( + export_anvil(&path, None, &rejected, Mode::Exact) + .unwrap_err() + .to_string() + .contains("exact_entity_revision") + ); + assert!(!rejected.exists()); + let out = t.path().join("out"); + let r = export_anvil(&path, None, &out, Mode::BestEffort).unwrap(); + assert!( + r.issues + .iter() + .any(|i| i.code == "entity_property_unmapped") + ); + let again = t.path().join("again"); + import_anvil(&out, &again, Mode::Exact).unwrap(); + let got = metadata(&again); + assert_eq!(got["entities"].as_object().unwrap().len(), 2); + assert_eq!( + got["entities"][&id]["position"], + meta["entities"][&id]["position"] + ); + assert!( + got["entities"][&id]["properties"]["Invisible"] + .as_bool() + .unwrap() + ); + assert_eq!( + got["entities"][new_id]["properties"]["Health"], + serde_json::json!(17.0) + ); + meta["entities"] = serde_json::json!({}); + save_metadata(&path, &meta); + let removed = t.path().join("removed"); + let r = export_anvil(&path, None, &removed, Mode::BestEffort).unwrap(); + assert!(r.issues.iter().any(|i| i.code == "entity_removed")); + let final_store = t.path().join("final"); + import_anvil(&removed, &final_store, Mode::Exact).unwrap(); + assert!( + metadata(&final_store)["entities"] + .as_object() + .unwrap() + .is_empty() + ); +} +#[test] +fn sponge_entity_metadata_guard_and_position_roundtrip() { + let t = tempfile::tempdir().unwrap(); + let path = t.path().join("store"); + import_schem(&fixture("sponge-v3.schem"), &path, "main", Mode::Exact).unwrap(); + let mut meta = metadata(&path); + let id = meta["entities"] + .as_object() + .unwrap() + .keys() + .next() + .unwrap() + .clone(); + meta["entities"][&id]["position"] = serde_json::json!([-15., 1., 31.]); + save_metadata(&path, &meta); + assert!( + export_schem( + &path, + "main", + &t.path().join("reject"), + None, + None, + Mode::Exact + ) + .is_err() + ); + let out = t.path().join("out"); + export_schem(&path, "main", &out, None, None, Mode::BestEffort).unwrap(); + let again = t.path().join("again"); + import_schem(&out.join("world.schem"), &again, "main", Mode::Exact).unwrap(); + assert_eq!( + metadata(&again)["entities"][&id]["position"], + meta["entities"][&id]["position"] + ); +} +fn write_gzip(path: &Path, tag: &Tag) { + use std::io::Write; + let mut out = flate2::write::GzEncoder::new( + fs::File::create(path).unwrap(), + flate2::Compression::default(), + ); + out.write_all(&nbt::encode("", tag).unwrap()).unwrap(); + out.finish().unwrap(); +} +#[test] +fn duplicate_entity_uuid_stays_outside_editable_subset() { + let t = tempfile::tempdir().unwrap(); + let mut tag = read_gzip(&fixture("sponge-v3.schem")); + let c = tag + .compound_mut() + .unwrap() + .get_mut("Schematic") + .unwrap() + .compound_mut() + .unwrap(); + if let Tag::List(_, entities) = c.get_mut("Entities").unwrap() { + entities.push(entities[0].clone()); + } else { + panic!("fixture entities") + } + let source = t.path().join("duplicate.schem"); + write_gzip(&source, &tag); + let store = t.path().join("store"); + let report = import_schem(&source, &store, "main", Mode::Exact).unwrap(); + assert!( + report + .issues + .iter() + .any(|i| i.code == "entity_duplicate_uuid") + ); + assert!(metadata(&store)["entities"].as_object().unwrap().is_empty()); + let out = t.path().join("out"); + export_schem(&store, "main", &out, None, None, Mode::Exact).unwrap(); + assert_eq!( + fs::read(source).unwrap(), + fs::read(out.join("world.schem")).unwrap() + ); +} +#[test] +fn unsupported_data_version_rejects_exact_before_publication() { + let t = tempfile::tempdir().unwrap(); + let mut tag = read_gzip(&fixture("sponge-v3.schem")); + let c = tag + .compound_mut() + .unwrap() + .get_mut("Schematic") + .unwrap() + .compound_mut() + .unwrap(); + c.insert("DataVersion".into(), Tag::Int(100)); + let source = t.path().join("old.schem"); + write_gzip(&source, &tag); + let dest = t.path().join("store"); + assert!(import_schem(&source, &dest, "main", Mode::Exact).is_err()); + assert!(!dest.exists()); + let report = import_schem(&source, &dest, "main", Mode::BestEffort).unwrap(); + assert!( + report + .issues + .iter() + .any(|i| i.code == "unverified_data_version") + ); + assert!( + export_schem( + &dest, + "main", + &t.path().join("reject"), + None, + None, + Mode::Exact + ) + .is_err() + ); +} diff --git a/crates/shacraft-content/Cargo.toml b/crates/shacraft-content/Cargo.toml new file mode 100644 index 0000000..ab67229 --- /dev/null +++ b/crates/shacraft-content/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "shacraft-content" +version.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +serde.workspace = true +serde_json.workspace = true +flate2 = "1" +sha2 = "0.10" + +[dev-dependencies] +tempfile = "3" diff --git a/crates/shacraft-content/data/catalog.json.gz b/crates/shacraft-content/data/catalog.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..79f7530913f5fb65558306fa35b8f35bb13e645e GIT binary patch literal 251094 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

*X%T2n0OxNZ1)(r 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�McgeZ=?hCR%2F)- z6J^^3*xNlU&z(JuD-irc$0dez+(onY>PA#g8Ss5-@42KJ z8zN`JuR7_TGVH=8c3Y6!*gn|HY=rz~(BkOF1?~1^(r^Z*`K4KZefCIW3xS8yh`6__ ztkJ?(36x)gYIN6NkLm86-sFg9gMo=D>E^X|hT`}Z5P=kpZ|Je1p(6H_Xy*^TDh;V$Q{cvD zwWO1Qq`@nSsx+PxAT^wQ1`ywC`J;7d;+OO(Zw93ahp2xM)fBT z?jpUe&1DEG{)xoN9C4hNLi$Vt-z|zfNe~C0Aq?~M&em>R!_mz0xRCL1=d6>avvZYk znIV^mpARXE#+cP=BPhrQg?6A*Ciqx*i7R62Y-)6;h;pl9Y^jyUH8lW5awy z#DJHSkUU9=CQdm5kG$OV^nUK8>mbk8;RI!7KKJQI;;0m`BB6b$2+9)*i?sBh)zWW` zlpi;)b+#_6V6UpHFF7*Bo zEbXpnjt;;)ug13ftrVjX;jz-dA2UutuP*-26q0;iGlD5FqVmtDa3ox+ojNDC4cM}~ z1*I+xhy!kr8Y5>xwo8P?lS|FDmEa@-v4Op;?+%+>$%w}+HtWB_P|R{*@_9zQ(iyg! zt;?a=q9Y@DR0SIqW~*3I%2FWBO_`gr013HooJHQ3gl?6Cq0VnsR>10nxJ^wCdA^}$ zhflccFT9C6Ak6@2w%(X&yJBPzbh3_8;~;?W4}_76R}#7Dm4R6cISNn|tZVVQteWBK*N$lZjyr3*wj zo3VVVuSN(n+1lFypTQ+75`UpJgc47WS~gT|NO>c&d`EK-ROnT-s_)Emj|ca}bs@s& z4_~lIWoveQ9jD2TIY$S{9NF~!Aw72y%8CQ737-HJ;tE(hX;7k{)$|q0imx1VQ)c0Z z+j<9XD-qmQWXg)gpyZqWw{9(tp&iN*Iedw6$@vs*nwoy)pQ1k9{X#`F!)%+#Sx(WW z5fxp&b9TDoLSGmK4`~)(ASI|XPhGcOw#?gkgQRTJB&)nL#~qQCDG#dg{V}aXC1ZMu z5m|gBEJ6nCpFVZ#Dh;yA+Hk0jIj5Am&;ZuObgLs`QvQD310Rg6go+uXQb~^}>SXpy zc66Ue#?wVAFGzH903crc()X<+cG$*2>EL9Iv^?a zM@hHXwEVzpj*^c1IZ0DF14hP>j~=1^i`8t^eJ%^aeWW4Vy1f8N< z&rqlKvaB^vL>Rr@`>wkOwm0DvA}hVxs!jk( zk_)u->&{Q=c@8*t`fe;W%)G}MQLuYZrjMXfynZRANs==vdy)4E)rfr0kn;0yx7Ud3 zm9M*a*Ya#}N?nTr;M=Pr!1yo?tOX_d1UZ*73j{HXK-5tueVgVU~r(qrhXoyB0I|k2e5=6F=t;?d>J1y+=nikUmq-I_}29 zpCmP%@&0@RD;C`s|M>J5=+kn)efrS6v#8~e)0P+K8m;r=B0KK$ioGB{`(JC<&Ojz1 z7jJVtq*0OM{ZJmD^|SZ%oywXquceB-(p@mxL^wJ)11mU#X!H!YX<3k8!zlPDUuq8k zY|2ywkdrtP*k6VASZPKI8qXow_7#@V(bb`hE7^I89r7)lsiCiC8}W){vC(k;HhHAhLwsPRw{n{>LUFR5GK*BJ1OtVJ~f^Rlw9Z}s2 zwV}>+;G(>P9$%hi=Np+;2dfQ3ofH04f@+LfYa;dylRv{wls};Owli49S>a_N-->RuqUZ zaOBk8VC2?(=;Jh#wXlGoN^Wk}Dey}5T31(RM1h4V;I%A+^D0SWyYN*__gh`SwlG|P zTnpnXrH4aL+uhy&o(A1rGUKiZ?Omu~wK$?|_7r$jb%&0Z-|y<}ET;tPm+K7JTG{P1 z#ajtK;Xzmeki{uJrq1u46c-X@#$Vr?N|0qrF$P!#m0z zA5P?6?uOGDhH#I}q({n_3fqxhGnM*shU0WjBc0yH)%&@3KA!HaPrI$riJu;=Z@gcV zXgHplyw$oT!=O}RToL?AW2`JcSfZ2JQ05=XbGE(f#lkmV!+*TskPUeY)d5SEtaJm{ ze%7+SxU|8Wa=TQgX$S@R!s@7OrgSN(nCK&Rmvh+ZYCWu9qkNy`=(1R{7rcMN|KZ#H zZ0fIetWdm^$H@X{^)=_DZB(B^5_{9fpMZNmtQJ8u7zlJIi3mgo)S*ON%mSR@WCX7g z(4n~bE-*tK3i+>++XjVTEGtr_CFUVReNbniRh_G7s}5+g(oYgaUjPccZ;ry&ecP)P zg+DA_zKHEMstB%t?Cdhg&h`yv-8WkhBWTV`*6HKN&UjMv>U;=e=n#g)1($d`(|p@K z<=4u#wV8lA9$ZNVspE+6=<$%c4yvOW_-*w|?T~?Q2?wu}lo&HN;2?k1C8q(t!_?GT zj{GE+*57L92MZv|1@}1XfXn7h8{0>KRv+Bof5opS2BF!h3rNh|Z`sfk{7i=(K>p{* z`pc`2gS`5N-@JM(XD6#~f&8>s51nxQy_JWf8?kC*%9NF)&3)f-Zb&VJ;@^FbX0f-K z-~a4;E~-xG`rQ_n90y#)Yg~uDgRaD@Ct7tdJ0Txk* znS|)BM${K-q21ARm3ABae-YCZWD_)5MCM>OVRYD>2lRV=GRum<3aH~LQ&kmtm`8dC zsALjE2Qz@igY#|c71xujI{~)<0l&m?b&2OcYMOa7$iPoQv!Q(pko|RICAImau5#4m zC*yZ+bV6Cu|C9$bEi~*t>CUllXq4o(3V2s8uEHNNh-F}1MfO$GHxpSJ10)o})<69E z3@*$hLwygv+%JnuQ+1Dh-FuuRc8O6d~O$;E?vw_35(VU zcxtJ4b=iSl9p8dQswW{IC@snq<)v@?h9Xya7F6)bdK?(~vatL_F4#XX=9c;}!VKI% zlN!1~A}0&}J^ZrnkGSbu3B3Uk2|z#b6Dz?A>Lh%9?!3zXO7+CxD$0RR z9p8b4A4`EW2OAZb$c{kDAZe{{8S4@$<7WhRU$y;f#6tErp0x)+A7fo%ESi%O!~47)OZRJ=8QM6QfQ@KfJLYZM|^Tf zts_gOP$a!85Di2q;eSOaGEjsf@>_)RJ-mvTO{k4Cg9zso=l*3h5;eeE815g3m0&q) z-e*8Y9|y;h`ygj5e3k|)PD8FGaD2=LF5eP}BKK_Hos(WrekcPaJemfkCT0BnWzuQ} zrXwZDFJ;nl359=s#giBMitP||ivdcu=z6m_@@pMumjeq8;>gK5pa%i1K!1XkUnuX6 zM%%YsT3}*rzIG9smmUk0AY035V-A(>`k3-<_Ty6M9Z zMyKnopSf;xdIAazzr{3Bzr{54=tbX>Yv+)Hs@Mii)-> zEssd0%@b)r48o6U6EeTwVpt?~k;?k!-mWu8794jBTFk&&1;jpDd1$FtVGxlx<|+1B zHk#~6V!iVY!hb~%qgvuX^ia;Ea204uBF z?VKo4y8I6GWd0!;7tU8xCIe>D2E2okx)>p5sv;;&*$%!CX4h;xG z!JYmo^^zS_NfB|=6kThxTlyRbP90xTWF^o^4MeX(-%v#R20%=2lb+SXB}UdnbDQ8DV160tJh5OeA=xarcS5@m*L{U&R1v6bX1J)HW4vsx9MY{8;Jhqy#bOwpJt1 zl?Q>gO_(2O+s1R(;IyR--Z~IBI6TyhJ1-i|C2Ey8Vu#4jHP24aR~31(BoE{>U8x6= zZctR2zM}oB)#O)(=Fs`uTU?@uO$^|EoR`&H{TW;--X-w@S}}$Wi%y zD({n9U#nej#6p|Y2I8qvt#TlqNCd8hwEAQgs!wERq54FA zwl3>MF&}?g>XoPOL#NlKJ*c=c-rr%LMkVb^cpV%upZV_Xr6h;{3D7mVRv=wN_twP* zVL%!H)lDO0I`c`N;OUF~n~OQH@~^-nDzxo(=e+Eq38=4lc$T>!-gQX7B!BO*OFV7YOTHu;%8Bs8I&ox_L>fSALKa zvAiVgzh-hXxi>aI;{ zgk6Wb*6uO2z-}!`5Ld9z+e;PUHTxRi|DObin`}NZKYe+l;HBj?xv8K(lW;){LW1C8 zGJ1F0$_xz!Zeo&T>Dt${P60N5H0HPpiY%mPo9i2_izvZM1M^Gc59zu6jMkgcJDW^0_2IegTk zr3Oh)q|}2Z$ImBF0V5^|`UjF0+H^ny_29+7P)SU`su4iu;*U42S91X5)&B;~PBMyt zb#tFOW?)aLnC=?Tp1$Xt?fnm9VEpSe4+mTRz?sy^eu9BOS(Q1#lnU^cjH5 zNnVRl-~~hsF=mbFN4l8qw>*I9n0|Cc8{W0_)>|#*Iw;77aDi+HBxFN$|0WyUGM8I8 zW@BmdPXy{5cB(c%&@>h;Z2E_`juZ8I1}G^iXe3ylGQHpO#qoV@MOF@SJ}5_1sRUUb z@+FYwB=o8%JnJuy)xyWXn21KZL!6?h|irrS-xVu|M zbK#iLLahA@nt=~DEd{7}3{=I@0;gJ3$DO?)?#2Z3-BQu=BSv~rxVyQag5RCpew)iB z=_lmVlmre0W?i%p!48{fjAeyX0BVJY&?N*J00+N3DGCxvE(`_f zbS14Y90F=M)(LZEiagunQi>Ij0VRT0TpKZKavhAY1qPaZ>&SS4YnMxm@)W8&;*j-gpGeCkaWCnqu4mM&#&2J-Ml8M#lI*N-V&r1+jZd( zsO>r&Qolz7U?boCZts6M8}Hw_`4N)x%5f%a2?i>OyKn7=O-+avsw`PnpMV_!7RC5Qx4BfNILYL<_hpVoWKJ z9KlUxXNfA|!CHSV{`tz#n(`S>UoIF0^FS0t*@7sjnsXa0DpjdvOAqr0rX#8+MvXj# z>ycN;-k`bD3Ne5=JlzhN!&@_G<}l!G>|&o4Z^B)3tY$bXUMl#97d8udVS#8~n5p3a z`p}92w2cNM&@%5od=gDGpClK?b?SS7mTeTPhV(q0%lk``TpR!_xs=5Llv3}In(A-j z1`@rMc7I6p)R08KAT}Oy8tb`X{p9mn!@BqHRvN6SX;K>f zXEXTgLMP%>`Hu|bn#d40I&{z8RwBL15ZBKy`r=Zg5w6px=r{Z`@OHD!8%JVA>~@Dz z*8XuqcOggyLtrwCWAv4EN)eHyuE8icZuUn_M@#BkVRQ&)Udu@ zW=?VeS(HN7@3cP=yb7fKIieu#-yxgPt~7&b|KFwrae!P7ni81!uCt<>5(JW4w-&Ap zzTvmne5U`kNLHEo4}21ahEG(`@Cor|{O!?t*^u~|^QC1zghSjQ^)DI38qu@k$M44H zEg1mXXQtq0UeF`qBGF2Xkt{nVkKx&)$a0ak)0KG6PstUprqH|8u8pau z#AIRfPg0m!o^^q@@+0omt*i@gDq-G)WiE2zMM?3r8s6yACrwZ+ZGojN6ew+7m0F71 zCI!E|@XPHY$TGkxGInPW;)+59~+X4PWX` zOq1#4hm=Lw0p~oHE5uLe6;|OwMj>j^_(_21xB&a4THD5(P@L1Bt15qC2M*Z7}i}^CuhxKnQlhzpm*5}j?cC~vM&zdr}BhIM9Y_m_cj0oqzDYsK2j%BsF2DCoYNw9 zU?GR8i_WW9&}Az`uxeG%QF#S7P-#~uD2nOgo56r^DuJ$&;iODE&t>8M6ED3hNLo$q05dK?*p zuyY^+kPWR=e>@tkuv5vu4y<)3{ugM>gJob|1+qL=L9e6Z2I`gkD)7P9gNq+7Y5b{6 z8-9V>t>E93OY1Z@sXeaddCt$TV(`h5q~A_IlmBBJhylOK!}xdAwry6o0(aWH3!_2 zYX_bbd~L}4Ezfz z@cP>9=9hoNObE0-Ejg2m`Y|H2U+_aHpyzUk=75hLs)|(`W6xs@GFS zEHl$VK&~SP;F&TV?clxg1QuZ&5U!dE7dR#0obR9|Iw3Z?5BGEl?x}4&+*9<%&wf{{ zrtPeDc9sW#-EGCcs7WpwHOU=-OEy4x7*%K%Q{&QFW@b%o*;>b=_Xju8M&l;AXxs!} z^YdAN*G0zEShd!g*)v)O&hVK03-XRLJ@TQ)w8MyHcaSEU<)P>bdC4OzDhoqe{Cl|! za65A?VQ?dF_46s*h^f(lNS)T)&>tfj?T1G63T;G7xbCeW9`8hpA&zKjQsE;pcQnbU zwYUHPMx|8@TifJDe*P9-X|x7TT@Z``&a_~c2!pZhWr)wAgxoG}RK8BVZ{2X`)BdhU z{fk#V3p9fZk_o@#+XfJ;8uR$v~CFR zxTBRl_#CRz7FII_Kp%-(eJ-UWsvlK^s#XVm?NKZdCxarelZF;zCm(du(Bs7}YkGP(=yX}Uhc*HoG#q_GfBZU5Ua@!X@e4GrY7kWY{6{?q1LqJXXk3O54 z$U+|~^C^RiVCfGtLFacv4GkT1Lk*=;pySs3Ip$)fFKP)H## zI1C)uyx|Em-By_CCiyt9fJ|2$Gg1>~gGv_aq^eXzWy5VPzkuR|wEmAcJ`9TE`4XWx z9w#dOk}metzz4(;mHW3Vs)R&kOz;wIPy}I^6LijLI|x(mkZ%uhwJ`h^(hrC94@@FF zzk;>_33uy3n}_~nKERszEisq$Ks6J)@eOjdU8%Ju&fdrV67q*GZUyP$X=u7Qj;+8w zeIY3F<~!_TH`W(&@I3xltC5HbTFxuodH&1 zTB3FqX6tw3TCaj`0akxy=GoFcpx**-T5d#nrZrQ3wse2L5a#-?M_K{NS&^BbwtJC6 z=nlIM+oh}~zI&*EU;X!h2LFRlx0B1XtV+OxERBiI7>M7`*qc*4ElgM=L*oY0j{q z+sm|RL8rhpubd!kM6wo3r}o=`Uuk3Y6f~)Cg#WAy z_F>NAsaOD$fN#}-4J-Iy!wM8^1`$dlk$WWKddiAl7BiQQ#T0_=98>YlAxrW_lr-q2 z!J;?{I31F{QIy~n&eOvYYuDV2-$_2}R{<~9PlPWnA`j^|46Is|c1#cegFy(h@IDtP zc!>~Xxw~+(s-X&-8kFg>OF#6fqX+F}=FZwG!tJ59q+Hd%ETymcv0rc{Z0SD^F+-1b z2n9v7L$E0B7N4nV{jSpnnqZh6^jxeX*jIqx&jVp4#1@1Vj_gCwEr7~L^}_@P=z*uO zE1@=-=&g5^7Tv_;r-= z)Lnf7cWk&&ay>(Ynb*d>9qakGi^AKE7kj$i6Ff)16&jVFj~G2Ls&mLZXxgn*iZpSG z5djx@T~7sUiQp1zfp#UIxmp>|7X6?n5zHL@O$= zQcD>$H9D!+>O`wRJki}3lF^McdSJreF+TYgdT3BVbIS(i=9e2(1qgKpZ5oCQ*2`HF zrvmHzF7vV~^{1BKLF*3VzpXn=Ve5_{bn6ZrYx;ZoJcI2#uBU;yw9uMIVV|YDhGf-u zta&(~ov|e6R+!feuznsDT!}N>0v?JQi~<9{C1|{WM1f`##Eh)tjZ9yu$|bsb5tjQ?l?kOo*4;N%L?6b1c^3$ zbPFRswsshGM<4*{0s%-Q1R%Tl%A$2pFMoH>IB-ID&sdWGrzh2y1XYO_bvwM(i}H_} zy&01CFE(zTq9oXezP|)u2WSRoFV1-`S6!lRe=&z-&CB!f#N_noq-DOB&TIeLG~J~5 ziQDAq`ufXhw&%!wk%YCHSd|awam2ESlP$zuF|Y2~kaM%p;4R8s7Wcr^qU2VliEsDZ z#);!LjT9(}+Fu|JC5dFcXUeqog@%&un(F8W#W{09?oUAqdIH=j7T`O2fo-okHG2b0 zI~*iE2$hp>d9cK@(nL%&Ut)?eCd%%?$*g|x5kKpdpKaNh5sof-@PJgjx&Wd+z~AXw zJ$+XKv4Z1Ovt$J>f`^uv{kIh;nfg1Mzl}UIsa^-yr^aI!k4}>=j9Uz8pYT4mV4DT61-`f_3xkV7Wus&7(F@Z{I7 zqqvvnbD9&K(T!b>6il{okF9Yo_XtF8QvSIi6D?|QYpkJi(66J2Ly!wFwm?=J;+N^VwQ z?@`aj<$4{=wlva-pM05^tUvag5?R@yr+A`CA%%6r)-Bz$6sf3wa4q;X(==y{wM=w{ zMUm6GXn!~u1Q+H-THAT*&%?CBFOfr$Nxu$$ZoKr~MLE(J^p?vvT z#xh{xMbk}DZF4c-bCu+89LH2Eq;B|MU+C38b5ON^^AIT`L~(%XX^YiqwCn(evA5p> z+PLlS%uhBR9?c!Pk?ei$M1@@Tk?`t#?(MO=z8{oEC;DJYeKPOxz?^+ALVPg9`_P1L zvf*?CHBYjZram=ACsBX6J~chrus^`u5iKKTA|d}`^V!Cbi(s#wdfXc!e*dk(@@(dF z@%Ouno7_DjHJPq(j~o8{G-Z#=UOn{0X`%nj=fYKE>MG~&sGr)0_BLLRA0PgVyvcZF z&-h7La8a7igxICvuVmE1c-uSWKXZnohj5uZxl;~4^~z4%I9lJInm&{;&Nw}qL%B_Q z@2#(K6)zqgOi7T?ad8B{c@T@|HuYRLqUh5?!;zH1nn-l`WStY!#4Ay{=%0+|!zV=c zjvhZ(%NO1I5HI=J(YW@)+J0dFbLS3znM)*z7W%ZsvI2sxkWlnYMS4~_N6Y!dr z!&57$QS^Vm9x5ig(CTz}et)d@Ra#J&#@XI198c^d)F;u=`TQ|DufwB#bu`&2m?)`yhk#XZ1)n3BFC()KQx{3P3`J~>o$)oixE|N6~ zlgDzuR=wM#Dq3X@57L|>3gy2x7#ZY_3Ou&iu9CuPewVbmKPoxEzc+zYYQ0bGxm5G) zm)JLLRb@V24-~@Pv;k+eA1P!oNpK;2qLw-%x|YUsK=D~db1t(ZrlE;yb|iolypv3I+y$$^w|q|o%VRZ_{VnDB>dNe4E$FZ=c1o6@3bT@_-`}*xRo0c ztR&GD0DRhvft2-_TTtM8mi$h!w`iI1U4L2WhJ}%}i8^nu%O_h&yQdy!YboVAEUC>H zr7}z%BRcJ0bIP-5rmvg#>bxZs4b5?EHdcJ3xVuNbFuV0+d&q5aoU4Fa|Hm_Y!#GFU z8QC&D1$Gr(1q%~Fj#(-#@A^l{5}tcI!$B_zl?XHVFD1UdcRcjm%Wsw3jWb_tH!xJU#X{-dm2#p5K_(Id`owY|nOi7TM6WM?f1$bs=S=`4x?ISeW+_ z>#t4Q)A_0H`Lr}n+F=H&9ClA7S>$rz^~UG>1ZJ%~Nf=wrg(G+;n6>UE8&lpBCwsq6 z_i>2ID3I_eZ% zYiPaR5*!fv*!J6H{#JbxxBe;R4k24q1Z(1`iQD=HVVBSnX}Yo9GAgNJul=1I&?h1C>{hk9F^ZcYr_ z2(}TLJZF0>L)=io@XWDoZSHvUv&BJua8l;GqhD5xTzZWZ?jdon97)%^57?fc#`9SI zGT95h^Nh{Lk!e%p$W6h0ABShyU2tzrEc4y=ub$}k{N2ffiaJlfcsKQT67*jaR^2XL zEqq-Q8)VNtITG{E^Wj40JJA9+X50Pll$%C18$HtzKl%&JuDGdJNzj{nJaxOGsK91( ze{O0C{IBfu&ZX5FSo7$y`MjNA1|2z>ZVMfhC!-%GBX@T2N5$9< z>HeGv$*IsgJliupg#R?6o#|+UR|7C~uSSXp3n?;wdoTVJ6=s-1Aroorp#)srx64ht*Oi zo_rh@KLx$xjvKvC=O?|7_q$tWk@#ephxlIeWHX2O4F|Yn*O}cqrbeBxH0&^D-8hv9 zUwiKKW}495ofYX|quoAUTbnrf)tPqU{5({>%|)o_Xe!O?$!YPV__3{xQ5dI)u6>H0Rqf?Jx`@!nLm#0jYS zP24tY+;3Tw@boBe>8hYM?sqrdLc-n^Ju=y#-s zy||3<7E8Q%P}uLjwcB&LyXO6bSq^{hY}1;G@0f(0m(Ta!Q%TL>?{#|TCdI>h8q@qe($3J#jCGmb5wpoYcJ2T zzqeO@aIeNrH6lrNd-A=VzsbECKh=mL+3h{}3HS?fsu5kX+adT#vwQXVR3oNjH&L@6 zB2#r^_!oxp=Z}YdRhYzHPTyxzNg#YseIdIU``s8mN>5El8e>;z%B@j+Hu8AG%&9wF z!n*}m;&gsBr&n+7^Batv`_G~Y`+njm7(Me6l$<*o`u+?7h3N$Gtz3+GCqc>Sv&n9l zE}W9JG^P*EY>s0@6Fz9XkZQyxMo|#4958=u{MfmBy>607y@)1t_x)6RWy_YAs923x z{LkH%X#3zrFB!3#@c5r@AEWJ`FM279)ue)-eEhic(WQ}zv4|-5!BgrgChm8ilg_*s+gKK@9I#vHO)DO|=(S_0Zs+4hb>;M@{bZ3l>)xcdM_681 zUz*o!XMoA+?8T#&5|aCRlW*O3=MKHSPL79zygg6Wm%~h22(Jxt_Xn7e5b-t<)HH@K z9+IRdpsrG6&n8#5w%=2fes_PfQWxRi1t84A7v zSu}>HFBbVvFunD%C31svN#^@91D-!~19TOA>YD z-d2l5rRhWExZ~QcWb?TUe2csLi_FYsP>J`G1J7gMkG@@8zb3%%Ymj5o$v8bs$<0I=4B9@Mt3I&w z*e2bXEe@A0^rGUF!RdB<6kTb^vdp<$sXfdU?J)83c#>pb)r!~vBPcX+!hVl8WZXWz zWU7VJqdc}FaILuq*}A&zu$R2z&cfC_SN$GutT4un{MYR~$F`34Vyx3mc~@g=L6y!( zjjf~`F5S8>o-EZC{y(0mxZjf#R6{J&ALNGuS3F+<_q`N~U6=^AvW&r6P zx=T`WfRS#77+_$&z41NgcfNC-f4JDQ_S)-NPpuv6x$kiipGx;hx|*?urB|?ujk2?y z*KKY@DSQR4pQ8_gT_jM7??;iReXT@Je%HMssCNI|o)-Vj^uM2j)28-Cpe zNjEFOs;J(>4=5J(k%J-zj8g>NQ`o`Lu|Lv0NwuzhK$NAKG6^S&=ZB)p`z;FN`J zD*uY4IlHXdVHvd3FQD`8b?2RSn)C((Jh;oeFG~$e zgIXER4okh;t79qG%Y@B~#^dqh<3&wu8Hkk2iX#z2dI*WuOQvNK6f>;3cS8%|jO2Di z*(}c>&W2gx=yOCk87l^5+9U(>JRL*2^RfE*dSIT>qbSi)kkp{R6VHYqUQ}7IxGOR(IsR^$KhjAS#z!0#OE>Gv0P;h6rIhP}p;@O!uUpTIU= zgp|-q0^CWz&+K_4w5$>r2NlU$d7a$+5UIoqnJ9;lwHm(=Ow(>dN%(sPDaoeem66|D z=7z5yNWspm58AdF(H0Hi+e~=Uu*+w?kT?Fvhe)zT^S=w7m`bTXUfN{zGCGca{o!GA znI{`}@BQYX}6S=k5dwJUF-+F;GKD55GCd#}Vo4;N<;!Styl0`J*x3#g)ynkBn zlO#3!2PcY`(<6Mjh|FN*oaXYBp*EAO-JP{D^H^SSFZNPs6qyP*32So<-2N2lvP?9S z5rW1&9=2PdWqMk7l|CnmBG?-a?=AYIH*%CK>yF>tFoI*xYO7@xdAioVJ=XOa;v-H< z-Dq&IA?CXuG?}*!oARAH-sq9`kll)iTwuSj`AI7TgX$-JS;!zmxIbvlyp-?RdxNP2 z401ytZFeaKCc}y=BefWm@PMFBc87fH=Y3is--9pwOP6PSUar7&78JHgtK1nIG7s*e zR9z7(=qL8u=&n3@97wE>I5;S;^u5(a8P?okMK4)o1SvcVz1cxq3DfsC-(^G{0CFzQ zWAj*@#l}i>NUQus=dN`sb%X#vujdizkDS~y5zUvf1TTLdyu7PViHMslB9(A~{cJaw zw$kq)i*F4O!Re~@m%^5Lwmm{%D+A1>_+;6et? zsos8>CMWR8_)7F@wD}XCV6DgSf|VT6TGrcAwdk4*P--eAG7(It9y`H)XGXvv`(MVI z4=DMAg1#)2dWXV-W6xFc!V5)R^mm-y9hs;Xdlz`=Ls^s;|D?;Oi)jwpA@- z#l+RH%J|-uI63oQV$G2D_dy;dI^0UZ3v8fEf}4EQPLo}(*@MgYpm*onRhKzbp9nM! z(n&hMNs{U7j7%2fwD8MjcUUEslUX>HIEs8Cc*o2yb%~aXDs(z?tS0PE!2L*t;z^FOM-nEty?0qLe7|XSE0oUFk{$nvEYu}I{ai_PBX7m_U#;|+ZIi> zPx~Swli^m+G19@n82AM|oPa>=8xn7mNW4nC0BM)P1rI4JF)S1Ux@N$-4kK<;1Es;I z;FbfVVNc0Xr>S0$W&8T<(;!5YxRYj0WboNXGYU0iDoOUQiZYU!5*kp>rwbqYkGrjG z5so3>Xb5;=t)?3yizKf#V>7Vle(-3nQxr2rhz+!_Y71}78& z4^$R(KCcF@E@VFjyk$quN+v8&p>Zp$Z^}_dlBO)!dYcsPMCCGQb!*@%*9pgv;;$n!8c&@4?hz5Q>vVYuB z%KXvzZ-L@!jpqVzY_J;R#XtOR=&{uil#IlX>~cnyPI1V_Og0tbYvsXPAwR6~UmHZ0 zca9+}x#7F^$hs~o!vfAuN~kkK{>C6rH_($7@F}(Eu|RICQ{ZTCS!A%&$qc(HbGk-a zNUz1sszDsMVQ4?IiU9`@CM=|lIw}JtY zv+`I{;G1s6k43YAqXJdX9@Z<&t&6~D>&4+TmG#AsMXsBQ0?*r&(o`!@v*X?HE!Ry( znU@%tp^_hF_U`<}gUxV%^wDm6c#Qu=yKWgA9oX~GAa5DKdkOL}r0FO>QQ>51^1Z}A zl#+S<*0nT4S=Z!?5|j7+;+xt1(#7nD+p1? z5UeT=u{xhb79L5d6P*X&MJ;;#_eQn$+}k}KP^peI-$pbn1sFFDbWl~6cA!cc43kPI zH*O8u@;7b`(dKR`h|40o<~`i!_QEzezC2X3d~DXk+1R$d8mZJA0A^K0&y-4>Kok4J)rS z9JOTXBl@RmMyZ1ymMF$!P#*Wa*#E5882bC7P&FB>7#JDGV*%}tI$pYTrY)6{`$(ZB z45WhCiC6Mha_n19iFc8+#H9&1$*@LkV{+uTyJNG&OH`k_i{l0FsrDqDMZIRv^FHlZ zIkx!toty%hswdZ18~K>VIUeXYC#M)bzyk^UNk9$6R4@lghN!BPVAF4Mu>+eAPyh6X zZCUiBf}M!re@0`gOu8BgD1Z}*P6OaZZl2C1PC))g+P$KeysmTnI3sxp$9FJ__5QzRRQ zPxUr|@;CtUNYV%KtM||v-jI2@dbJ7Hogx>p6k0#;p`J4|v`ngBkMO`^1)qehjqtblPw?AysB8UtIr=r>;GaVqxA6q%GZ?vuT7J#{_8S~q6`*MZPaq1?Kjt|Ck z`1+EMI95fU!2MygKK@UXeZa}RzNe3pd}1kFo;i5m=z~N_obv?GVeV%6AE&hM4Pb_) zaIEE?>h%N@aacfNTneTFAon=GjcXR~PWB zjsUXIUOigyfDwRNR+-Ibuv`|k=^bdOek%oBX#8t3nSHj!_fHG?)n=>jX7b(s>+{ar zdO-l|GrX|M)_JGXv*^}CzoG=<%W;GBn%4o#H8#DYsyjGdska__6`g-A$e4L`STfh48k;-Uu)kA4geB} z(PWlazeNxOzsA#Key)A{WZ<6F_~&G;57{_Z@DZMI-^pIfl04^ z2E|^bx1bcV=^V)W-+eNcUm>*-Z-O+r^;08whb&{{33RGV*7Hz@K0{)+n=~%p|2lf- z9k>u9NP6FD;&Va9v$;a1aLP)X-pQg`4PjE(CH{pm!O|P!Tp8JzwZR5=!;!1lM(0ao z19Irt2+E!@!p=~-F`?RibY$ILBIa53+OXp{eF;?>dYH8}#m-rpvh|oi#P%{i9eedu zQ~=>}(gqti2&ooC+n-XXCwm!;YZc+Ux|qC2(JEV?!v z(T^Bw-=Rvrx5Iwsg>*tvDHW&Do!#uhIG=7I2U%HJGj<(VubKx@=cw-XJgsA=7k#h4 zB7P!%jHf;9-e`ShE%DZXJNaeM-d}@PhX@J72dLZ~T+-&3ZRJD&7Y4ao;662FjdP=% z&-p=G|Ceg##=dVuzuI+U1agA6%O;}VzV~zx%!>^`G(RzZ zxVl2#`T@~=F)ua_(cJCI@~e0$N_w2C(eNQ3UOXAqj<%S9mY}uLf2~JotQjz@o)+>n z2@RBLkN|%n8d1PsUJaEdq4B+OO_?jMi#NwV(Z-!e?zEP;qNH-ob&NpPGb-;y8{+Z*i#X=6q648GR*x`Fg@$DAA!% z+#0ybfrLh0L8686=s=TD;ERf*Q3Vc_^_&;VDNzPKOKyc!9IkC|U~lWF!p=iE)A+{s z-tB~B`K9SRAV$s#L0p!IMAg#xoUe~~)A$A;V@%@4N$}h!Zf$%p73a;6v$NUThFZ33 zR=G%_ebKkkG9P_|kyA>rv$y&KIYmT?b0?@@hAjRV^htJ%zvG`JO%Y^;y{-~v8CByR3)NtNXnUc$+;}hiAJaTwXqpPSWeM;K9?(cWQ^eajH-7&=4 zT0^P3C>d(Wo=~6LkcWO{YzKLoD#IepyouR4*gz!04YbOKF??Ixw~eDrrj_{jav$2> zHfHTCPhECZZtDDa!Pn*&SsC`_#29VY+daE}$@8&PG-sj)*(}rCIOlhH1h0vKU3#F7 zyHyQ`5n2twnR+kwPi=!BSkb4u%r{(3iPBkE4gGdo1YEHy?U_B0XOC)-{+a9Br3#y! zw28Z{Fcuy=GSiI*mxetFP5a5TrL239X7t`HnY}(MAo*~FtQQB}5%N=mSc4A2jW=j$XsYz4_J@+b0Bc&ouy`*uD_0h zTlzj{@PEqZtVJ2Xsl|uvnh46hMDl0fPr2<k(b%qLwQ2g_ri_ZlgocXCCa>^8l9FMmS((xXPFTN&cA(D1^SRR_Y-iKPN@o%fC_ zQ{17C+#jlmPM){&5cEON9Q#_;-p0BR=(`+7XT2m#!yIS=g*SEm>r?8CDOW zoy+-i3v5y@G36&cg*=D5K{MS5(><;HZGPpxxwEjw1$I^pHRqMJ&1z;h z%pV>6k`;Qy8;-d}Ekj?4q>WdUoF4I8v@E&?Laf`bNpoMssBHa8AB!CP-J+^Vb}#Gw z{`6+uQQpr-C^=*x6OA#(br+j}2S8N~Fhb=H-6U-iHbgx&Qyv1!yWPsc%IF^;XHOx> z*<%gX@Ua;^pan>KQt-;XoF+iho-7%#GB^leY(WI_u>p)NL)gEb(g5@q0uZ~V@?>5Q zwnzE1sL~e8h`ej`V*v0TiYFHW0N!hp{Up%d2bg=_XYKYL8~Ux8liebA)x`*-?amay z!pL5b1H=sE0Le=NkRpQ)W>0SKd$o$#_2L*Sn13AuMh{fL1xhp7;-7Oc0lYFoUjRmf z*}!jiKpK?1U%D38^g=%(`hIj<+CBhl3m;trKQn;9&#M4}BwkST%XP$QX*JtkzJjo% zwivk=2tUrz10vdgeEJX3J{ZKy#tXCmaSdosQD6pOhKpTqi5??TvU)-udk=tCb!NNY zD?2<%s&N1KbrIIq9jF*eR`$<+>e=JASQs&=D?2v0PxKv@Xn`S4o?hW`EN8D`bX?FtUp;iUD$JI z2UG}J@CB&C2aKQ!mqBdf!>$D1I@cD6B*Gn1lVF{GP4Yr>P4bdV3lyYJ3gUsr{32S1 z<|@JVU)F~CcDuF=gJ_qZL0+qZYhEisfFb2ptNO}$&80!hu#%p>B$Bpw3LWd0xS9Px*QOTAc*bP!q)&-id!LA8*c%yl6bJi{iDg@xF#`r zo>S<|3iGaV4Uid}tIr3vjei2Sl79st1p0e{t>h$mV6|$XG2_FdAtGk{ABAsUtJ0AE zd_%toY%nM1Oa@7O=+&=Dd?@olgjt1|N`|tbAasF2`zfTtj_aqD}b*9 zaD#iQ$E3v+5syEnZ&snPyo)PAvIl~HWDj{D*#nuGDrlgvsvPeeBmiB=`utL8O ztkCDUrtxt8N8_>j?Hb27tuPee@fZpGQ=qc~@Ob=hzghwPD*f88TJr7nQCC&ee_vO< z7yw}2%wG2bH5h>%kARK!7TBKeespaW8IL6FaV{$b|5`Rk4Cmo zDkoU_3t*cA*ulx0OlsJg8nOHn)&TN?hCWy-f2+#hG!j=ODE|#8{}o3hv%dn2n~WTIw-2yqQC;i~ z;dSA$EK2M_x^wVY{#1bay91JC6oO8GxgGyi&HHmC0Id!55OJniX+*f6<0j~Bzt$-(Zu`~gCiR#n5(EEC9N$POMgu) zA&?EwrRb=>2jJd;45$ct!6$D@_z+Tp*PBn$MgZXRi37QZZi9S2@0dY89}5tAIPT}_ z&`mTExAIpV5Z~D-`Wo>boP&qSIDjrMapCmSZ49U{KQ;UDz0=*`$mpB;IHIEJ9Vna- zhz}9R0pdec@V>H<0T3drm!hCp{m|PUU3+kc94i2P`T;!vjh$`>Kx2D-2IJ=Om`?o}Mse&{>hug6+BYuY<<}l{35y)V)>$!qUNJq~hX4J6v21B zJ07H+d0lbM7WJ;m5o8#m6Vf;am=wNsg1Y9j0`lE`2Cy{$`S)^wGp1t8eV_<^HK93u zEVv3XdZ>eiC@Mf9%F6hQ1%T0JyZ`$P5kQ?Ve@wLM48&?${TAMU_XZHpU=sTZVrle( zSQ>d?uoYBV3mc_rFao9dv&AA$fT*{w05JosBbv{|$E;gH5q^>YFDKAP@jTdA-;&`A62Jz?OFI zHKUNb!`-efQl57kKHp`8+#LgNUvq2?va@Dg4#WY(ZC8TB*AV(&Y~b7%J^QWZyG?7% zNz%0g|2qgI!64ZA7X(N@U#nY70zl%89$?c;=mnFCqFQg|U7>XIYx0R#*Y59W+7Fx4 zN$3#tyKuAB{@+vZ0;jMAOrhGRts_+rTT|~uj8B^X}$CH z^YQdV>(4+HmrX>8?_?yL*_4&W$VkKCoQ$}}uYL6(jGCk4&#LvqU- zGGwGrlIRt<^)C-Hq-ExruP7cRyl;58jPto2bFt!2Mn3hM$sc<{Hjd{v+U?ZG8y1a3 zP7mmh)|!p)xtT^lPUUE@{?61C#~gnBVkqw!ReI_qLh_&~%X(&uk3T$+^+QBY;n9Xg2!CWdvVUxF%hGVu)sUdo;3kI7 zh*H>##GQ<+Mm1v>0{cXEhvZ?9|Lwd3T8_8Ws^`4V=-=XC_+DcR4IBxOp0*|IJ!5=x z>+&I+-NVN}IFH~&ADIL+TV*20{*VT$cfqG1UA-g+@?D&$@DB_N?3{gkgOHDR%O_i9 z$my0|Xnkyj_GQYUlx_w~a&htxI(_6RpOlp$$LA+}ruFek;^qg%1+Z1VX-n~>_Ak8? zFX@3|2_>rg2BPt|E#IIMzW5<^tIX#ywwSnl!eIG$3XOd-gisqonYUdC#!lF)1xiNw zi04|e9>xD8iw;x|!x%8NeT}?6z0p+tn{f)9Jktys?9ay67FR+ZtQ#*Ix*u~3*Hcs7 zBxQxX3TX0UBX77JQ9^#{ev2}x5o`_fnu^-qQhgLY_gS7TuHfbsyTWMHm<~a%ENQQD zH3JIo%Zt>@(+Iw#cl2*=VIFdBmnICM$2gYn5{$7?41Vfbh6cbBikH7$MwC&Lc{H5@zkP*uO?RVhR!x^|D0oY1^5z#sq15n`!| zQkjbB<_|mJeX=`o)u=sMf3PVTK`B5?K6d z&38~rSnVn5p_pdIJ30U4^LvDTO`Tgng7t1l0M-5F#nwfIE1geaWC5Va_#>_*cS3#@ zNBk_O1X&qU{OnEL`3$H$<}%<7r!BKB9%Vh@6JVR(!RY>N5tqnVKV3c8T7BrU_8dg#@Hj*JUVMq9M8@eiV z;e3=RpTMBt7L^~yE&Tkv{Dq2@Ejih$1an%c?A)JNr*)g)S3w<6%WlKp>)f~{_~i|B z)gy;3I_sQVZt;(}p))axR#x_A{B~Kgg}OXnZN5)g$6h8BH8GTru(3Kk<#)-#fsKSD z;1+zSZvXAc(9sPHR8sXgHQoE_PzfUZOvKR*%^tg8ve{#@E@$hPMW90Bv}zZgEhyZR z%J`N<*EUw7njztiGy=QqoeRZD}>RQIt#hjIk6a%4@?wya#jaHn0dKW7o`xbVNRcp*GQ zB>b_0E24=3m=-7lmtPhzt#dM^b!&SoVLPbou0FxI6WUhwIgIPK9+9?rY=9+iD9^9O zgrt!HHj-f%K5?#K1xbHym-yEEPt|TC8pVRm8o$nWmT73>P0DF$R}?8*S;T%_6K6`FTq$`t!c?{yvM70&c>odDWqMDfZ{AxXkdtP9@f&}qIP!5APi0|B>fMCz zvDHc}!dJ|e-*dlo#)i_c`weplrR6;9S*l=;9vHiG>+o8kJ@b;x5p-3Hk>n#v+LLxg zVbDs+a=QAF&xTen-xXc8Q>5rH>VVpWD``tZznM0wN01|ww5RMIhZhU?90Howw>1u! z4C%ss74+t?fxOLxC}Bo&M@vu@iLnFz7&0PxmUqKJA}v=M3b?fFkuS=!g%XdXjQ-gS zKv0P5GU}4*I*^OMcY~>+y|T`D@#~_9?+CM#mul@5cNpyY~RQNelv0xPwW`^nzcgv(C6k0A; za=X6ctFFmQ!T#M~3LR~F&|r=Pg+zr?hqWL@-EvcuNH@yF#Fc>S(G>ll~sz zq>-m((7PdIA$%3jVMbWpt4pYD z68m7iBm~O)oa$)(m6d7i{q-j_X`f`jW;Ov@cpVHI4AS{dYes(W4~;Xo-KUigIV1Nq z=P2LJymw`d9O<5E(dprQ70cF>7Jnsd5rlra8}JLlKUNvZ^)GCOdMN+mrjROHm=UO9 zUsjE1Bs@bnwcHexwPJJcK%FL97h>CH6%|iwa0m(Z5V4sN1#Ft|g7K#woCu_AqMBget!IfAN5 z$+}jzg;w&&(6X5fLt0v==XI`RxVE&t9MiR>?YsV;!4e-!=yeZ68#2tHe5?4xrsrj_ zWD8bjStzb&fC!K%xw)^}e(3Px-kt$7GD-~-y z*OmkPG-woeIJc-W!S}jjRAO2ZWo>N)I}wTC%^ko1G~1k1Iy%uO*}v%-?%#EE2fWT) zj(B3)<~ywo9TnZqL|Le&65uB~NFo(0Yx6@OPRAZT3A`vWwuL?}-*{qlpdDnlh!V}X z9}On1zqBc%p z)yNwBA!^e`v3@GV{h%fwZ_`}o?eZdJYl~?=Avsa5yAfGL(891>|B2+hTn3>N70dLz zz^XD0kzu!Zf*m`9ZKdpriYM1eJ3l2AJK?+M>%zAP_=nXeF`zz{0ey@X0{Tdw4AX3% zWZ)nY5K)zvw?hgzCko$vXD7Hycn*xfjSA%us=5y>J(f1F7{Dx;+~C8&Xr7wbrawhI zSUwobC-#G(esbmplmOuE#g0~5vomG^6Je~#bI%!mfe{hBLu6p!r|KsifnZo|bH3Bj zsb-BD8R-L8wxT&DW_eS4XEqr|x@6l_1mLdKBYX}c_l2@@Iy?Qv#8o4Vt%O~m&!&%< z%21InL>$qn!%5e6KOj=Ewwdr3lY3_invYwh9828fGTCCfhrSG>+z&3tMAsI*jmH!- zG_A&n)gJam9muy_`}Zc@ z|3YQf=i`O*;@B)1fxqz&q)cxoS%Dvo-xb#PF1w^pI85K?eqgLR*J?0AitTc1qU$o= zXJ>eh3{C7VwEJfVD=P=?Ye%8CrHN!PH(q0lDL7!|(i3ZY=Mt`m-@x)_fAn%hf+A$I z?&TsYHZfuV+A0*oE;Fo-g&{Y(NBfK*Y)`H_u|)=#Za@OU6%#`hHb*5-mkw+__M+>J zdJakHCU;wF0qT=Rca{~_rW(k8PHUsU(c3?8&={q(l54F2yN@wK0f_%oGJY4@Mc9L| z?I-`qq>rNQyYTo z<%T5cXxN$m0E^)jO}`oFKo96_dL)Su4oAs8z&px|!emYu8J z8Au55nexg0*$!m>ly`4Gm4i2=*po1m73*Hnj=n<%^y!{#Y_0`(&zyC!u#!fp{Ep6K zOcG~5hRv0?dRWs4#bV};gO(SILR2CZSC8G-?(X^%-OKEqK8u3P%Q))?i>es+hzgF3 zrIH0&c%M%1A+~(+?hJt2nZtK8YD*4)5zW5Qub&O7&NpnI9+1ooYXX8BFS;Qw_Wao` z1_Fm6{##cnTN3EpULskO^qcESH>QofX{Rl@M!d;?h9+|^vdXPrNo`5oPs-)H73@j4 z$SS*OV3GlC*_Z0sC7dM9a*4mOM__2!b~(5f!|Tr?X2{FN<5Ejjs&;_d33m7GcWZ_X z>rKn{%-*3GO~q%|>2G8{*h0h%pVrK9@YuCgajZIj96PHFylJeZB@>If0zO7!JjBuM zmrI5i)a60UY~Jzian>`28J$@*THTqUle6w6iG%&k#TwS;c^PTx%fm579?O|O;VI_% z=xUlfTZS@UzgAWCy*abDSC~X(yK88%PkmB;3E?yoInHJ&T{BbBSO1C54U-<9QecgN z=H}m75fwgoQ;S?ubyN!F47C~cMvOdAf1*t9qTMRV`&az?lvb?Kx1wL9)x|SO0)NVb zgzg3xhq&P+D~4hJKBK@FW#jUf8*jRyClb#80+yyJ{3C9W>+i{)HTDO6N>v{OhQBX6l0TV=)_%+2*& zk5jOYbPb2*FHd~udpuoDV{i`7@<3r|x}^E_yjHGHU$jjT@xS6}m! z43^SkY<9-aBI3B)H|6Qy0l!T=;>yt%UJG1D6FL<%x|YS`Y-prOq~5(Md&Xv_=gK2d zJ<&R;K?k1t`w>@`v20ty($kQzc+lpW#!!1r!Vd-}vQAoS^`@rmcIH*G;3cvQNzDmV zhy+@hlzuovD-ptgi3+rw&H#dymE zc36CMna#9i-BPN6li4%}*|@UwWtUTyp1SzOBQnL;`(6e;5i^p-r*~+?T85La3V`-5 z1nq4zg#DXdGZ}ZHRg>m#+kxWJM`89`?SQ!hq>KrIHvw>a{@p%R|N(I%3a|T%e^ceIZ-HVW(o_U511GUhlwo}QW0MPp4eS_2( zG!B@A(H~@ z3Y*IDruR zUmC46>U02I$D7|EB)9BjDw;2ZB|cnTc1k@|Xt`lnxy|&WylTx{nd1Rq$g`kP+lrMrMd2&J%~jcJdi@7BF-} zkMxYK@U8lbFAl!YXOd9PeFt3(%K>n)D8j>8z{Q*k%Ok;{ZejJuPVkSNS7cnT1kz|pUlL%W!q?i5NQ$12DOkRbom+(lLmxkf%u@aKXeM8~PlH>l zG9>q>kMMtjCE=l9q2;5NuJ1x zGzSAZw8SW@!WG3+M(Wy8BAGt#T4o;K^-VTW!>#Y7wN|Gmn;fhV9Hoe0HPcs?F4vQi znEW(s|4o-9=&!4tV9FV6^<)!oPx&wC->w@{u@LqKQJBD~ST-MCch-r|5rSGsQKs2) zkLAn#S#JAQGp^CwVl*O8|7yznt#`jsKPPcPP)UK+__vXg1T#Q~+AE+AHR=s^#dX7x zH;LL8K;8Ve#I%TlOANKeby`$|H@c3*Pn^+ETN zxxy{JWx7g6ic#cC0GB|Gs1!9F4M7&b14n`N3rLa!83A__0sp>~m|e`NCx|lj;70_(E|K^I~qS>qEJN}Rt~L?R=pq{d|%lvtA8segobgkO2Ql-4*Tw-G5(J4FBZqP zQ`a=;ed|0?Uj7#crI@|5c69&ceE<2%sDF}PXuB(VvB{|Dfrfh^G*y_o_)AN@P6GVv zV63dj@DgEpXz4GFlH~Tz$v?!8jCEW7GNiJf6pXRRcUo0k)$ z(&1MO@uj7Kwu#F9E*m$EsQJJ~QNaV$xo!ffbnsQe)0HjT#m$LvN?v`&VoJrp8&hYL zajKaubFFJ{jIs`!?2Y^`cQ&uMidUBJ=62_$h8wyYVx24ta~fz}Oh$_;OZjN6mnK41 z4_$>FcL=%ke9)Dowfo04pK0?wd@eg#fH5c&ON#<+wcal+XBW7(v`oP{4YHOGjW%ST?2<~yPf}WXXUpg=^yXUpE6B8 z16!LOa?xf4HmTB|1?gE5yC^o_G3Cvc{qkwJwmPBo)$p-)9ZGq7c=qC=Tjm5)Ru)(K z=IorI)@z^&Z@-XL#O0<4kC7qKR7vk;rLMH_D4;;ZpJc%WXJ50Ln{gvB!aa#__H{(i*JZ-1c`dvB& zi-F7IZ0EdE5N|#_^b-$0B#hg&N4}hT>6XkR{p;NCbRXtjy6?5bKv7cUYWqM!^l^=@yiFa7?Z44WD3;diiN^fIn|9kk(H3T&sn>$7y!);-gtQ+WedaqaU2x~` zbLeX!HA}PFI@f^OmM^@GuJv+15nQFad4dm1`8PCK0>aYo{k?B+wyHGjYQVd!th8-| zn0eHllX#Gl*P9j@IQ(a#rz)bzV@Q|9`o1WyevQJk{l%CDh4`KZ) zMppj?$?Yb$?NF|N)`rZhx`&>7Z7^ILEYbMv5Ptc-RTovS8=Csb(Pe(cTqe!H9l*V+ zPpNUMi|55~$5J=8OwDuZ-Dx{;O*|c=chO36(I3=pD(p+dNcRw4E4+kaW4(_H)YW0% zz)$blMg}i~g!g@&;ks~tNnaTJl1GWxAamKZ3UcgXN(QIi+*)~coiOy3<0Hr_Cb4Ln zuQU$`sbflEGwqfmhKTDd^rO(g$D@jr4#;txsRbS`mlHYRs--Z7S|5E9y{76y+6)aS zm0~lP>3|q%nQOOvW3+S#Z6uX)l~OFCWmP}Ehkeo}d`C}fYjUVs1+cVdRAZcj#kHwN z3-x{8OvK&zL-c={a+0TDrV~#?>V+2l>WS`<%quNb*Gn{%Cs5pj_;kjjtwe^ zS0A>4?$5=m9QdMUv~em!bFcX$;aF$5dPW8d=1)`CPR>8aO}F1|X;Ab^^9cPsHPPJI z<$i!Q!3l4hTHpk(`@2e1mD$5t*~HgR~v zV`h)3MwjtVKqA-Q(QU}pSzeiXs)eFyKGEEujEgR9nhUfX0WvvYot+e$f1Dzy8>$$qKMaRk$yZe--F9`f3D&o$a79#69^cFOgw}C22V(BJTNuF!b8iT}o$rpWA{U4*pLXe%dM=SlX1)Wyi zb->%Xl*Q_IZSVkRk9s*Z)>svhC#ipRJV|Jf31l7zi?&~`iHW4*b-PZPVBh2ON8SB0 z3pz^?E=$m{`+#CR>w;gGHp=DbYCGi-4c{J{F3Qg^I3Fr1#by0M8i4V>IDp~RCmL1B z+jF(f7$O>6sQsFWWSW|r`u4ja?!1`G+3yE1b+`U zR+px@bjq>Js_q&;=z00$-3HZ*Muo$R!O|KsUeQGF@<6ky2iCm3Gpu5&`YOGNZx+x8 z`_8^~EEZL~IoKA*5TCG;1-+xmjH{4UZQZ(bvnqc32f*1Kg;G)lV=H&hFBx+5Vt!4= zitn|(zu2PCH_Y(*ZLzc`_}yA*<6?QdjL4MRrp|VAJc5Skt&8Q%FD%n4W^39moiL-R zPVJ^qy;9pg+@uMBs5YspC9RovXk}~i-Os_~T)UR{_Ah5cf1TiZB|@tss?Wz57c3co zi9p%y7YNEv>NOMPW}ewL?WUMvciG6d@kCY`3i9gj)LKDN&P&dhwdtl+tk$gEeZ`*o z+b%-)3`NeyO09=TQn#LHGOC??DBkHkZ|0-rKCb*MZpl`+cQJbMrdT*ToAyHrkH4*I zjQx;Xb~gQolvCs4$k~cLhJi$}*9KnbB{XAXDjZ_ycY!=Rp4>b}_<4y7x%xWQ?)PT+ z`&T@OYqtM3bnnbhm<`9sbcovu3Al|dR*fUn4s0rA9IC{F zY1JfJ*SRHv#5`+WJ+`(3UE07BhwKI+4e#HSBvEh?CMtWz*_DkMBCU^(T;6BM7^*K0 z+S$SEZ#Dhv&MtPQ8dza_%)gpEqCP7@SQ`z`wMs5%n)~Ie6M@`$kct=lqa(^gD{|VP z@o6WbhAiya3&t}ZvKfQ=j-LooGDXE+#si+H8H4IJQ-mlfp5ipVyXT)1Ae+q3u2$vf zMTnLzw$A1lU%Iys!{Br9J?3gKR{@j4*&h{Y?9Z;I1s8s3#M8u@-}?Mk-e8h~Hxhf8 z12g8I1!YE0YGfA8uJe#g8&oRFXV-8qC0Wh>;feWUP@9Zj!%)cNP1CqBYIC;IT?4_O zS|*PJQ3@MPWauLwf8-gWKLZXFnMwM==;r3|ZeIjw4*!h7-@_?kJ4d4q4^a)Zuj*2P zYAmNv53J39FNv2GCmeDo;LEO;k=O=kz0Hd^yrS-^!!m|HuH2k4I}gtgn6vP;#Jtq0 zn7Z+HX*~}L^?-f|ZzE%UCCfrXcsTGZb6Nu*Co!l53b)%y+Q(JVX5=4k0~Ljl?le+8 z;SIzw(G@iBM@(w5w9h{=i4TP5!lB6{^1CziWXR*%tu_>lzhI$e-P^} z;~}qoEm#wm=vt3d~S6{O%pA?@YEZlyCzm0A%p` zu<^ic{kon}IttiLa+j?3G&r$a7^u-~w_W9TyVJ1B(imG}LLA#Mw16}MLrQl@NK1!w zr_>MzARr(}BOya~HzG(%H%dr%C?K7pw19kT<2mQ~-uHXHf6nlp`BSGM2OKLlh)jKz9w9xtaO}{mJ1HhA6cq; zMRhLmLAFa5hr^y1w_&dvb^j2yCxi0kDKDdi$<@1-8>_T<|628~_r|I-+`m=wb=ciG8(5a?U^36QI=`q`flmWAZDquU=ay{({trzIdX>+&1ojI~e7sAW;hopj>xibS4wUwVnlJ zKe7Inb9I$%W>2Gx$)(HGQi7J;Dv56ko3rYc5SP>n*bD@JLNOFJ0&Kys z*TxzV3mB~}P&Oi%lzSi(dw_{soU;#yrg0)iK9Id?PsJQ_QJ#1{o-oEShIw6+MOCg&$=e>3B5@C&r9XmypXU&pNC1WQpWhHSxVyJqt z|JH8MFCA6zqE3lH{?u5$8krXk+F2MxFwdCvUgJEvy^B^j?|Cy}!(F4M{fPC2m@R>^yAmq4}1O0ViN`M`_ znnTE~)w*+E3~q7C9r~;4+Slz4;6U%|8q`mUMahjMLoP26v<-G)>(g3Ur|uqBO2Mip<{!*taD_&tN6kq7+4-TZIu@X&T|I z60oLn9g+6Z5yc%Iqc8|K%g|D?Ceei!+foagvi1cGCMl8j%Q>(;oOxDIpaW$$kEqJM z`eQ3}`Y;EQfa(MkEIF+wjask(#cbk&5-E(B>@^vEe_VP_a9^JL^Xk8l*yG)`0`#?UfLClt6`S!kYvn8-D?)r?UE;|Gy0ZULPTgkx79SR=Q>$w3BW4*f zR)h#}%9utKw5~Bp4~()`*sFMZLeH+Jic|*!)RM3m@qXIm3J~{Fd>1ycXF>2WuC22( z9Ytpn;$)%F$u@ENw6_+0`7fu~pqzU5H>ZBcURFMTj$RckB!NqtN~#ajSL}zPiw#AW zq?Z_qF1v~VNbuMbiO;lmiS=Q6_A4s~l_Jm4wSu9-`JWn5NxsSNs*z7=>p6tanRZ)G z@1_vw!?YFO01p!PL*cy#twif)B~_Av8cd)^0jB{ez@r^jL0nK9Z#e6cQ|UBFJcl<#rZPjC^E`3EYdN4&MpH?h zOob0}XMt6WkxGmZ=zD-_Y+B{9YA#_!t|%|=tMagYlsQ%bnxsj zfha*)(?~_7Kao9(DGjWbb>0j|MCD1#vyKtS2@wS;?Xy-T1mgJw5hF(10xD_chl$u* zvR0rS2>lWAAo<$HTsr^3VEF2nv}+~4d)Im`tmsI#8!)G(r3XG^e$0owiFhMd9Q(R-DaBTDw~gW^3@&vjL* z(6SR#cmm})g14&(%6!_@i@7?`fCuBlK_pdTA#XuX36Pu3r%8qZOp-6VyLl3LH)+ib(e*Kj{-lI7p zu7adcThWEun*g}sw^(K}K>H83y$NIu4-`libm$|RY@`JZ`HaquV1&0o5qa4NS5A|y$qpd$DY4yt>L{HD*xWR7}|KyXs zbcs1k^QE-5EX=0m%H|N|W(K@{U?0UH=Mp%S7LoqVO>qk=2leWQBjXBMa54=<9#}+2 zNsseYK!L7U0U&V1BgeXfr<-u|k0Ca~Q2$iJqrw#Im-SF`ltAg0FC2WY23 zgTgOA-+LmvuSQp`0P$Z%PRcI}4eIpnjs_eW`%)G^r;pvqK$r3E1|)J>^6+%l%|a3E zk_Ql#poXjf*FPqGJ;G>s!0VPh|3i(c`y{OITul;hl-zJLQ)CWS|DQ#EV>l8N{~DB; zG6(ze_pQm!U}5`Kish~Mq4rtz=gdEjJ!lx7s8OL^V3wQ@nu$IUn);xIN+R9N1}3Neyfcx z`0qzmK4<`6f@|rbi%7FG}VzYAkbfw=<~u^d4Q zBT39iI4oERD7bM4+-KGYB4Q7><>uom7L28H@q?&E23pXqp}#;99Tsn^^B@!^0IA}= zXXt%yg@*;3>Z!r_V;t|Rj`!_MIrr+ zT+FfAP79q`?O;(aL-8S#4MnjavIF-CJt81T2#rFwpJ8N{z*;v2J3E4f-!8=u?p~bDqu~F_&YdN@5hpvM z_@x|U4SjEIED#fnfGzdw0wqa=TdnszvfsPORvs}Og5OE#^K2IHSfEd{yp+oq$lDb` z%b~bYk(~S!{8<@mNQEJ+XRd{7#sI}o0TH!U3cQTjKei3&(xnzax^%%ykjCVU-{;$c z^+|T2D43@MY1kGKENS3)GaD&7>-%D(w^H_UgQg&~h?d$5_iJbLA)GwLdi`&D$cA!= z9ve0w+P4Hm`@&%s%ENqXf}VIz&tyU z=KIw|F6-Paiigrn&S2Rt!TAspoMVFYFXPo9{YyyGo{4-Y&CJfHC7FtL+mi*!*7XIk z6e;1V$IG)>?0_S#f`A}Bv{_T&ObSA456GFAAuf5kOU*n1XXT=XY+xx(kTX5yK=N(_ z_mByCLz034`Wa0s2Nk2Rws%|@zEuIRrUB@D^Rr$Bdl|$$lQ>cay0k-5XjVClyvJYn z^`RA}Op}8fal76l!NYNq2@Y(cRD#tPtkF^%GKeYQ15SFy9eUg<M%j!aQaWF*?co0Gzj+giajt zgF}y!h`|DI$lC{&G7ta+*cn}GQ@VdNBL!HL*O8yi{(1wQjE;p)M)%#EjOGO%(0Ow> z&_YfN;M_bTSB_5*2AYUTC+Y|VLH@IsXIt3e-Go9GbV9P2`q!8T zKf2bL{!J}4D77|a{-#!Itw##4z}x2`yYE{DUdO;A`B$GnS7Vc+V>x5;eT-MguFgR$ zK!w|MO7S?5+%D|vToXQdYS(?)?L{ zY??kY0J*8E845d#Cn)9IyAMEobJKT8Mqb2wFt1U=uhA_d_?ew_RnVPCbfJbQ7#$X5 ztHV4@xA_H=sLliu>|-^a@BB5CwA3unnf<;Gv~7h^s3rF0GZfI-jPqhr|5abySB)^N z=x7t~nt0!%iDW33++ec|PU!M~48kTd(lq5z$mY-enqmx<0?U46xQMa;VJGI}kGVh@ zG^`3z1`P+wpzNhU8PrR&8VJm4rWN0DZl`}gIN`svm|xoit-b>&*izJPilAjs)ZPe` zs!}^JOu^qjQs{jB%IF;=d+5MSy@d-;VIJr0y$esV^#fv!oXMXO+^2Z>5YIaV%Kv{K zCX*Qzw=>?ids^05u;|z7NRf_;-?Y$xhJ1P=qtRwheCdsch#}Cx%JW*@Rlnjor)_97@5ID12zbI`(4 zM0zjZRok$Bk+xV&=T!N(z~>$%1HV=0@HByD&cgAa2k&V=D2|Jx%&cl!}lrTRdWC=tf)ct42n`#e4%*DR1<1#~Po6q(LcJQ)gB27IUm z(?brc*a`qe&x6Hp*QThx2jVRfCp%}WZp(4eY8RJor)z#$*FPIdc3d^$p7m`=0^04r z$YSA$6xk~(Fb?V`RMNjn17i7tZEf4AQ~)Q*gNzT>dS?btfxy?+qUh0^^x zw6hN5E@X3XdX8hFxq-p2GnekNBiaTA z3mC6to8w}QM-Ik|0YlE&qQ1-!9LrK&`H6Iw1}eWCcD3fehxcu%-6rTG#wIkaI7ZS`wQ`f5w?sT?dL<@NP31C70drTv;ItQv z9GTK^PR&B5PYjv~aL)>{OE*}+7iJ}e?(&#_=xV7jg#sp~6b5$da?Cx!Jj%W`szJ=fZyooAme}_PG58h!57R5L&lq+GeN{Bl6R@2qnt>B-$atf@YD^~!f2;=s)ETHal)1^cI@>sYq?)9iQ zjU&qS%m>We8!b39)vNd#tjxf3JKq+iTLbq~QxUZcV0(X;-d%{xd^ncM4S!VB=+|Un z64%lA*_R})D)k@Dw08&>FTYMcp!o9jvPdK~F!MSq2leaOX!terv+OiUid9#x`rM}1 zPWNB)mymqD>=_u=AAygkGyYK{6a`njOv}qbs(THS{@kfSMzFfEiI!gj!yG2ed_58f z6aB1>WG>4SqHTvR7Ms}g(-PZG1U$NCm4>I)M;#R$By|^k3(f`D!D|Svc%0BhuPamv zxrXg?@Dxs`za?QV(E$ToHBw$N`$$25PFlp_HzR*w&}g7)Gx~Y{ z3yyKlf`|F*t=lb_0Ic^x)xkIk+PT741}FV+7Y}5AVU!bV7LP*(Zb@_Lz8qKycyJQ3 zm=-7FEJa{qJfGL@*t%W%)*wjQL@Qy=0m$SX zi?(X>1ZWf;!F@Ny5i_gpMFY3A(!4%Ty-v^%LMk#_IepsvohakTXOFSPJ%1|hcu(I* zqw@RVnl?PnvAc?0W?Q@B`1Z_;9v;J=fDVP6B?GWtpuT+6h)VGLHkvFrZG#=2(S&`* zUW7_&N*IuP@?dxIlg6}09rPz~f5lKf61@9*>~(4q*gN*d%zZ33U~TupLVK=tL38?) zIg}4hZZd6zp+F1-K+a zlgY7d#AnP2(A(VNdw24+yKU{G8B)PF?~k2c4_mu zpcOI(o&Hx;i*^hS4Lz`jgZ)sxM_Yir*7FQW2DQHf*cu~z zbT?X2Fv{9sfcee=FgE29W^$)9lD(bqtZF`2o@Z6}YIV2R#lUVo&b`%H?hp@{Lr|6U zF~BEbo63dM1wW;R63PHChJQRelF-97bAI;$p z2E&IFH3Hn;ed`mnnoWRxE1mv*YqxQ%#sE|R7REW|-aYBognht?5eHlB?;O@Ah+M46 zdz~{Hg7xdYgB~C;(T+OsSr%vjG$N=CdZp_)&bM6N;{qNNsVZGgpegk5ww&=K+h;&o zBD!@xr{uM#7VhLtHw$?WEu`jVAw?(73>ddanZw@A z9pCqJGP4Y*xw)P|zaS0@aK%l4m2NU?x5Rz>#rM~I1_(iO~ju8A+;>qrn>*VPWH+GM@jUho~Lqm1nVaI!RT@>Nao zQ&6=hHoAMCHU{qfz%mgTc-n&0SzlVb0cfiJX}%!!G~$+_%sXAv-P^EZXVJiU>WgRa zdX4n}<23-}7lE^e1NSIa83ePP?jsc-lR&LFLAX=CtmD^&Cxb;h4aaaC=r-9e-B}dj zGKb&qqvYTWc98W5=Q8LfmdU!4 zht+G<9C|*jJ^|9;>z-lmGW75$(Ssfy?pGLIwMf^$*}0p1QCdJ2W;j5Z*%zEAkjc}R z#$A)~szJ{iB9&_Lz4F0d^cub6es%T|Fl~vALXB(;JhcFyjBmjqG1RUSZpu|AkK+1u zlzw_TsHAQ~;IrfIhfqMfEub}zF;63G^i>6RXe)QZXTyh+G zZL7r9IW4p14)gDolVBw@_@gH8qqC!nLDVFN{ldmqzkgn>?Jw)IO^rnz|6caEElJ}i ze%+O6wurq86H^OgYP(+h{eMDJ{P0V)AmpDfcavQ4WAe!YNT z6j>OSCgfl6ALxq!Xh#ttc^Azl@@W`BdY%=K(D>zIwHx9-C==E_|x55+i0S_Og z;l7NMG!V>KfAVD7B#8VjH6YXHp~S)ZM^S(ZWA*r>NktnurE3HxvM{!pZy?>6ZI^R9 z-RyUw}deE76W89<We=mMYN z20k4=ecB#Hmp>2&xYk4DQt+lPfABOh!&ZBHff^LPH)*C_3Ens47$E8)T|J(;bLH{D zbev$!(i%Wzk{%2URZrlX>O+M8MU~0rZD)S3&aJ;(!Gc;?JkRk$o+XXk+D#21SkDDF z7TKMB-Wu(6fTQRPIWGO=(&<^$tROO7`a@a3@jY9;=tDc3vsMaJ0D*D_%{uaFAflFD z2Iy$~(iOT?KcKdqMhj9Up#Zoc%VC#8j@k|}n8ZT`PJ8#cL#mD&v#PZIniVnl*Q{fQ zYGbk!ILEpxnQ9Skz~k?$X>DRn+=GqL)B%rNMylGP{5IvXoHyCG=rVRA4EQzzWkr_* z>wntu%ZkqCMQ2o`jw5AY?oy#fh|X%b3MlZ3n+o)N9wJjCiI8^?RQvieXIkoQ1Wjf+ zRj+qnNuaO3(2IMbs?!_~i&U8ZorOAM@Yypu>!+&L~i#Z37I zLxA9PaM;}_>mVU*I!=Xg&x~Q6u)&z>L)|;~tKsHTZuh)b$uG;(x73fUWj9oqBbXQj zQ|X^HkJ*<(=6#~j5aTbnSfcYR8u)&?rsPpIECJ{QVId0nlm)X=l+ne9SEbl_K;chBjQvW=$9;G$6c!Rjj6bPS~F zefo24z*=TT&ST$L^|3f(jJ*c^8dsaGZyWD0qK^N|0Qj( zK|BU3t5kR)&K`Q~>uxYmZojYgb#p3$ToH}UFkF3F1&qG_KeNTW$b3R}W=z~|-Vs}BvFwE3s~^X z8I~f5NzW*!RAiiMz4yAURMe^xtwU~}w(jZUBFFz$5rq*O4pu>_2CYI{R1cl~U`mBD zjC<}+{VN7>Q^CQ{>iT$Sly7wM1gI2+iE7O@gz=R*7Wa)A^F5TL>r3(wkYKAMfhXL?UL?>YgOLVDX2Vd`Uw@^F4cc0Rm$#7_AL z+&K;exVsZeCZQ46xBXKIF$5&h<)A1T6?nc9EU$f!77)%MswV_9L&`E>_9X+~6?QWm z4#0(XCQCI_)zr49*uOGUEuVM#BYS@xcvg{QejUQof~~1ipgg)23+Do|^e`KxT(W{e zsZX)_dopqUkxYURSjE8jZ*UX0^P%9*g5dU9^?_A{QB@qJY(L(3w=ST!(@guV?TG`T zT8E5D#E=`0FR^CHsZv1E0H6izdGLNE5UWkkssy?*@q+O&kGiaI;~{;abiG!TmRqA) zI5fX4os5{UNUZ~M=Keb1#-@CT(h2@pjIv}(Yqn$ZCcmzU^(6oRVsbdnts(E#imfq) z^Ugxy%uy{M94NqeuKZw1!s6q^x~*)H3dZ+%0ibM-yUGfuV^W5;`lAn=7;i9!4n%B)g&A$to`6UYnJNF@QQS7;4N)FBcU-o$AT)Iw1ef?9AP zlJe~Vz6i#tqzbCf0ymE?f&o)y`@<2TcV4^+s2A(^X89P}HO~5?sfBLi} z*sC~q$@9t{+bqzBkr%8M@s@EkV$2Fgr8MTA)3a(1^@qJhG+g|4M}p{@^XI>3E}Jm6 z6deF^s?>l_D-Hhr6V9tb)td%E2S4099@%Wt6W!NTU|tmLl^+ZEi_W6NU8QGDEwA|p zoz?b{hRSPN`SaD*$d@LJH;OmTBlzn)nj7bpMBrs`r$|vKF(fJ>f+rsDqSh%1{#zQH zP-)a8-;{=C;TR%;s2g@{a1oZFmF5g2-=%P4<@uD;;L=d>)@*{*V|E_o5OV>$^nFTZ zI$h8s`Tr|%0Z`&8qxo2|h}B)|$-7G%?<;LKmZOpcZk^dU9!>jtHaY}AO|e)nYRC!y zNa?Fr!MrsC=zKPge?E)0yy|n4sxamkILRGn8iyb_7DBNy+{$SwcFyy`%+(L5;KHCf zEFI528@lhH<9%Xy2zBT_C?iRs2J>*ivtU?b_ z^J5~%Y`=3n0WAggP-$pLe{g*ft)la`fpE{DB-S@2&};t%(NL-a5DlCg0?`bto1ErNvfHw+VEZ%R&HXb9rt%Y-Xc~3olfKp)J%4vHM{L%g@mk8&p3YWI*Eb5 zymfR_(1-Diz+q}BJ-}gVhCaYyL2q?CW_p`ZeRe$;Bn0?>v}Z!ETGu+{+iFj|*Kbr4 z1mASWK@(QM*eEDDS@?*rIwXb|zG-xiZyMbMWW2RQ4Jev8(I@qxpEjsxy!Q=B-wf?6}7CbH*kh2Q8+Kz_>Ya8FkkhEBt2!IlqB{6c$-iS!p3@$MHc}QPv zIkJe(u}DvZRMP6lL~3-#`_z}I6QzWygW`kRQ#%W`nWPMtRLk+xpL3}Xiq0F$w%0FK zuD%{V{b(+ErQ0)1o6#uoTYx6Xr$@ohtF`U?^5@#{kB_uwG;M9?R#%~K67B6j4;NNt zgv@KzRsKU|Ip5F;;OZ4m;>4C-y}JB){zq@V`BT2JquG8(U~f)=S@8djL;3L!4u$da z_1NFtv_|v9w8X*e4dSGZBT5b&ZTlC8vIT3z4ETKSh3vj1 zowp*+&{L7fIeB{FLBn1et-Ql|U&^ZIxm7!+7@eUIDkAHXW4h8o;Vi&dK|l_TKtZnm zOzNc#&%ycTcN^!YEQEFe@5$3N!|P;_V*E1~eaI``L{)g)?WK2FI-I{PD|C3K=1MB_ z2KVT4y{nkh$tUn6jU?-vZx~Cs*b{VfKLx&3Qc{#~2zJ74`jNqLsgMq5S|O{NQ-8Ugqyd z3wFM(P`i)I1-sEd5N|uKbbRiUX!b*p;E{FqhOnf^SC8hvr>W%#&HT`fkFD;UQNv?Y zZj0$hN9(eBnsd+Z{QBMBjkwSaV~uq=q-u4$LUY4g5HO|7R#XLorMq(^ZPDeYWQzA7 zuVps*{%QF1B(<18^&hL={Et5h` z+ie}2p)Siop>mym`e3m`SWRD%1$x)Ki4?qx*Z5TZckOx-jZZIYzrJa5#0R69bU12dEvNJ zX0o7DIOg{IWq~ADHm~uF! zQ{&HIZmnpQTCJ3u4&kd5AMfclehiVLArKoY@K)*l1HdF~T&%27C5`wp_NvZOcus=S zG$eLk_LOt>IjxwZ!ydpVS_C;z9kSoC&P*^0+*5p~MH@Vn0juse0K5@AALjSj)cpWw zezGyFwNy2eXhy5_pHV25GgfR_&F5@>rrw&W1ZbdVoRDG=co=|XRo-t^>d#rQ34t$G zV`Ik>t9D>PtvVPJQu=oyx1?A)+ujE1lo4@~AYP#L8Qh>)d^k$Nf z8rZUTFh99|PgrVJ4CpS4eZchLMf@HZF6*d@YEfzlQU{L2q_#nxco@Mqhf%f!dlbP( zeo0kdGsB*}!;- z5j@l@EkY}gM_ENQu)%g%q_9);6hw`&5z>VZFj832dtucHQb|O(+u#>E&kkZ(NSS&e zC0NhDx#kSz+NR3iTq82fzKx=f)+e_)3 z^%e&IqWd3uYwE9ohQPoZ^ww|3gNiwrW0~4pfY2(1=Gv*yTst6=ca3l}5|ikYDg=$e zdhA?ygXMW$S!V!YdH$VS*W^M_C$bx;lkT=0)d#ac6W&i!2T!Met=_;eh~vT)?d1{o zApcQFr{4IF{zY+=L78+i`C~@hnRjbWkW;LHQxK)VDQ_n(nLZStv07bB)5$(&Mzs#x zGiQ!eO~FObu0yB;i?NuISeTfqH?F7(Tc0^pE*}UfsCXz~5>D5mmiDdIua9_)vD{b% zlOPA4TS5-h%D6Sru6KtqY|jsuhtG&l=hK6ucI!SsA6AI6Nv}*p$co46jW2DlaD#J8 zIKZ{AFSag@yx53IiA5&rx

WTN+Vg;bDQZyq~jO^GTu55jW&Hw^!j+b+QC@v^hJ@ zLV3^w5Ft#upe=HioU6c8SY?#SZ5r_m8XksWAZs@U&9q8gP#iR!?`iWLRVG`W?-&#Z`jI0=@KAM6};EoL5c z7>kA4#jH>0B-jI0dAyT@R;qR#b?`_=e;EB{Kxvcflc{$fxR>b*Lpd{vdbK)td9(rM z%F;bqM?uEeh;*EHQ?-Oa%*g|ItLH17u$|*GGagGH1A)o*M6DC3>pWLdf~!ovAdoS4 zKy|Qq$EvzYv0>iZ!xMKa=oJH57laGDsrO_Vu#ll-8A_;TQ^cVY=qsy^ZZe=}U-K|r(%L+R1f0dC4RYu|8%J69Gb*sbJK)(|b zp$k1y3P8M#l?iy56G4j^`z{Lg!v5q6KreK1z3yF$c`eGdcine71TaVa`yjAvP+&{E zpui5A0odNl>x!0Ps89D_`0ciQ1hw(Y3Q9gGrw}dz)PX}WqE(;Vp_Q+{twUz7H>n4K z^&j}Jz?l;I+@QRxhWdGbXT}qT#HUQp6uMr2HGTsHOBp=DoLQTou3`gqKHX2P*7oE! z98r}{d=-`{F*tBWt}dqKcwt~?GpZdK}74Z<$nk1nZDiiY4M$|N-x%F9?4 zW#z~H<$(m0fTSA)GeLYEqik(#qL-nwElK520BY6ivxUq#B7+foEN=S(p@a{c2`9u` zY@fe~f1WxsP@4Ov@cLiqNuSE}y{z@!SngN9{%_>>(|NyQixgD%OAD@9I6apQ>OaWu z9@BRMLeeX97zzJ_{0^LWZ&o+?DVVE%yxnlyrvCrrZ{K{@b_pG?Je$1#$4)}LP5f)K z??O-Ji6u8a`0Z9h)&`Ed|NlB%8BOy{dO+hbi>mmqdx5>xkmUF{42K`}>KXdl=*#2R zI7Ysd{+7!z0BZ13-w13x>DJkTt~UM58AR@}BJf5Dls3ynunqMbfQq+eJTqH! zmrWHAKldUpPLcbOT7u9kuq6|q`Q(t(NhNT5S;xiGcZV*4&8ekNOu~iA^(i*5&dm?Y zWkMJq9Sdbv;~`|mxKz}g=!IpDS%A#=4Uhkn;=iAoN5IU4PF8a%Ah*)VAiQ}uHm?T2 z!euRVa4$x0Eu_gP#{=xk(Kta=Oc3}m0_*0s^6=bFF%#yCC3Fahu5?tMf_<)WV`&*F z8$hBH{AL7OU7BB+->1@=r)j++8w7(R??Jz9TV4--qO5bwmPxz;-PHKaUr5w<=~UeU z=2cxoxNkuzx;&*mPJ7S!wyjsR3)#=Z9>)UQIzFrF^XreU?Rczm+)5qjoVPE2aD1cl zP}9IPBFe*=%RH%gIb0=n$#f$XfANFuo4<#eR+uLA-nWwqPY7a--=O3GzCY0MusXN& zc)rrN{PK#0kr6__;9vM58bbB}COa^Hl~h1{Z*jNv_WnWqE;3n7^X@h8I%R{SmrQvK zgcGXsdk0LGULi1Ngm5ET5o5l;kO78Vj}f?0eE0fzO>DJ%3u{yk!rhGjN!T}Z4{fuC zgxPJbxw#i1voLA@G0PR;!jCiQ92Ey!=gwx({U}S$f2~b#>7GA6_?{+7+jI}9u_<8O zX|O}HL-G*25eIV}WvUAMH(MAfVTMZUCKsI{{<7-sLl5*>Q)F|6qGhpBwwd_P8XJlh9m|Cl2Qw%FYWyYu2^xVt{(=HU32`MMfyc&H6CEhF;N9iw3}| zVQ>3%!0q3NjGlChc<3WiP%RabT|JO{puaFlPhUbII6#Lvi1{l`73^BkMAUexFQ znu3Bwh)&S%d*~A^kQ}@qegJl}MET-M(b8Lrvt}sf$~@`wt(5A1WbWNEcve~c)+_*k ze1jVq%L>BQG9qM@0+uc`Z@kdNXtqG!cKPdyys4H01J({NI9jEF_cS_{ z3V>NxRo*yQ+E9y{6%R|RIv>JTQ|>Vx6vQ|FILiq^9;lx4Yiou;wBeAI+hD>Sp1Oh= zBtOA?W6;UexB07&BnI4(M%OLB>aaKIu_5EbNeNlsW5zbbhh`t;?m{>3Ot)tsg%eCY zB*#P*g1=7zz{z5%CrMgzGW=}gP7wYv0sdUSeOl83zm{;P1_jwHD2B%(ORsPhx_Wms zW&#nuK_35B2Qm(=>*c^sWCfY)b;zU7D1>GOlmM6xFykBmb}Q|b^hg@`XqRi55Hku$ z2mnIZhiI}5m24jX&fiBr<1Wd_L!B?+MIBE1SR>792{99rj4kNj2@l*IwV2MyN|&BV1_GguOAhHvWe{g4V+;gREhz} zU)n6`05gaS4Q`qV{D9ppEoAXR5BBbzAHkWh9TOuopq~X;DLfK@m2xgl1>l}yLc3W6 zg#12^4j>e(zMlq=xR_Rr@!${w;i??Uflcz zf+hg19SetfsJz6K;dY2W**Ys1@HsVS{&Z5nAAtS0GJg} z3Z?jzx1FSrPo?_T(;nGsGImC1!?SD2^`RFHu`7yW+;UU{7i+h&f`q0ps-!EOjpV2( zO|-mzqmRU@$KJpH0?Xs}l@VtF-6c+RWN}$pWZ+PCCGH%(EkPw_l+6(7D2f>gWlk9K zfs&4Y)R$$169<3YZj_XtvXIR5_Gi11N7e+jxN5=Z-F(D>gIS@sjO--m0QT%zM&~8%=$xj&#&u4Po??{B{qsDsTwbm_?yIY zqc4nBqGl_O4?vN^;OPXI^>2DYl zau+#E`Ea2oc?b7*S2gg1G76F#(R==n#J`s*YK9iR+YnR}ua$jxZ4fpzv>=N2S|iu% ziOv@_l&!!~QTKN&m`h3%JxFJal(CGtiMg!2{ss|4LtjNTkcRV!VyFjKVDA~NWuM(w zVmHJEm(nZI+w!vMTA@^v3ko7jM2l9HG~6vp@OQ$Z*?`-WVgdUCnWK}@OXQ>Qy2Ewi zAmh##@N$DYUcgoiik=H1gLRhbNlFB!(gzk76tipoxp5k!!<4#{VX{pxEXOR<}`&>IM;90%BDc5tvvfMg;}!m57QQfpaNA;RoaEr*H;^5J^RE_p-}29#_LsZfwM(`_ z@+5k{(i8@z9Ivt}Y$`W-0%S~o@7wif2%*Q)LTFb?bCJ4GFqxI;9eB5i?j-lvLxu^& zs12^%cP@PGgoVEW=YJ@OEFP^jwn|tHD=4eNb-1!5v1}|U7vre$Xw!8 z%eBw-&o1G_V~rw<2($U$<5|8}$NQg~+Ah_o_6u+d-FKe)p8Y=G|4f_t=jYm=i=t5O zr&Gt*^n!Rzh0~JQBrmpfN`4R@uXK%%cP*Aw8inW>T6c8S;$}5w3`CSi-)_4)JI|yl zM~ivEWWqh~8d$Efr?FC3Ueu%!ZSHq=zJH!|xpy(0dj6H$Bg@a%6uII${70L_gKsUD zB~gl$BxH3~K8U0-iTANt*F~q%v=WQgs`#!ej-PJ*9@BAY5A$8UcSI2ODfIVPqDxJw zukW_j>JeY>n?eejO&d3Db@I{6bhARipK>d*uizmfS=v_>3U@6fO$zz`zVxO6NhhN5 zJKw7}tW>o71-yF6Po$|SD8HV)=H9DB4vG+6<5Cp4QbKJZi3OF% zWjtR4MEL|7en#KMe6x^v+8jUScVtee}fe0CD%vpL;q~doJVVBFq*(gB77h>d1i6ydM{7d z28XQ|(fcXXJ98eXInQ{4EGb7!Zt}o_JI@_IBm7(Z;P9SJD?YT4Bn-poT@169vpAEO+VsOj4iaGrlyhm@}@`&p8qH*nR(<>Ve}EJckdZKaNHg$ww_n zB;&s?zj1{ZAk+UD$tTY{vw5V-?smM?Y-rn!*`0T2OL4oapUSGk5Tk3vYWUs#0afx~ zFVAg`sJhhEEOJ_>$=0J;`Kh-6tgu9TgqLm-r3D7)zfVX z9}SZp|7Iw$sd~h1vb7oC$G3Li!@BB2mzZKRMsRPpn||DFY?-xMU}w|24F3vm7T3~LvM zKnAs^RSt#B-a%PP_Q~pVq*_(Jsszu_!y>}qxlzOFNFgg5yvi94{8@g#WGci)) z;?GOBV3y|;s-ay)HfN(LNk2b#=ZzQQfJNGlREHQoVSaGb?7|O2tlXoNGg_D<8vsm+_6Al%)i zR5RS3^>^DW5V6{L_Aqm~CMo(CC8UzaJ`xjmtb&vM(Q7_fX2zHY5_z6(Q#v{Bo>Kx| zQ#=uBMWLAn&LLXBQ07vlt=k3P`Re-&HrI-@c;$1zpXK0BHvkzT%sVbS%r0EX0wqZ9 z@A$4!9g`3d3YC^WPHdmbiEnG9cWB(T?Mt~_I&@IS);iu?FvJi&ZaLjH%k24sgK^qp zlder`4f3c@bn76VbvK@lG|lGi9oB^Xi(JHv|dCHATLfPj`{ ze_MTqTl>Yiip2AZRc8w_lVUgCk~FmsU%X<3<1qCM3bCqFRqefK)M6X!xcA*+>5`Ki z6ZpfaGQ*Tsm4>!Ll`iB&Xr}7I& zb?SY~4U!Zay*s8imd^dPw7!tHcW#tb`@f9ihcYhXCgTj}wgtkbX@xltQ*E=^Zfy+k zy?euPH-lp!pINzz0Ot!|(HkN+vzLa20+k6}hihZ%b~P&c65SlKskYyh6*g3oSVK1k zU>i8q?W!&_FG*}uhUAi<5)h3mVG_B^%UPYG8f@y%NH*249MDQ`hWRvM8uE!w}vWtq=p-L_^j5_QUNjd~e=VP-hCxx~MOS zx^Q#3CaX6)ou=25B~hrl0e8Z0+&P3VUO9pb<)7++rvHx*Ej5uAqCXqIzL+vIV&?f- z8(7WE$&hSd*u^dcPw4=0|9|Lu>$s|#u5X-fX%J9p=@JAarKKCBK_sM=mhNup?k-7b zkZz-pR}ZtZcm?HwkP3K37WXaQ|Gfe^nlrX)?S692R0!irWGVSZSJ8n1QW- z;I-m%pj|F9V1BvYPCp)6X&Fyr&Ea+2R-;$PB|z;k0kuQu2RYACqtFkC^|0pialPcp zF&vL7>DV1kQ7i-|flguP`1(uj1U-q>WQLSyDPZN=pw@V&y&H&PyKdW@ zNVdC)65!)@m_(NTL#gYISuLw4`TsE=#TifP*hDH&|J+1a^1u~z_o z!WL8#H2Xf5;6Ve#)Q_gIz0xjV*vMrI4TBgq;@f96fafs)C6DVgi5V2??(p zbutn}^8q!*8&Bm$Pd9>vIPe)T7P4)rw=;13Aa>HI?j@t?^v0nsQ%aJ3N%;$Xqn|86 zr^{J(qkngRs{UyPM}0ErF~m;#btaMkU$=8B;g*hFxX{LS9jC5cz9%d`#U~FO#%}?y zsm0umzOz$P6*xH_7>tR{+lcFi)if2aMK`}J0(}(`k70agZY8W71G_MYZLA8_;nhUk z4-1lAt|I0<8qgWqMdQ!{&XCFwjDJ*kpwcNT{}?5aTpySB)p4VXQTjJV&Vw;>oeD9> z(RTH3z>X672PH0Q<$|d+nf2rt(3GwMg&DZ&PQ2xcxnv3-WDd^aqyiDH<5ZJMH-_T; zhtryY_fa0Vw{Sh&bzA&wsOlTHzdy#%eZO>n)jkHCNOylcJ6a#SxzWx3g^YW7GZncL z`%SWdMCJ0IHT)mVjn{%_E3ollR1f4wYwcF=-I_NMSU#U?qw29DH`=DWwMTKOzdgG; z_fI=aee7Loc4zchy0^Z(-ke%LxjDRf*d1G2=wF%-Dv@!Dk?8inAGI3wF>!xLTYT?! zPXjvZ}wTY#WP8)T1Tzvi3Q|ca|xg< z+gQ(NI4M2zFPUt@DQ}Ju81`$|ps&pI2;H)wTQ$qyt|-0en&Na}a$YdJ!qVjC-;=sc zVcE}IYzTS38r<#wFzP4;RrFjrxj-2MnC8|{{V|Mk1ku< zW%>~Tw{zUq@^(%!;zab`KEaRjPdKNZNgW;rX+FOa8dR-bLWD9=l)$)i9IXWQy(4Vw z#oRH}9eX*N^eEIaqgvuo!Lzk~2RbIr1w&J8buRv`!C#;1sIGYt`#=b;iHM)j=LpubBXkuen;#WWhL6XC)S18kZY> ztQb&=+UkDs)uicsoMU}`$FIA&hT$~2r|($Msw-T!Ok&D*zG6Tz)2tiOjX*AK={a*g zyAlmC@r_~hXdQ-ZS;2F=8N)DaZ65xkUdNNWW=FRnX5nZMk#1sUuixz2TS zdtg3|p}Z+0jF5qfo1C-fuh6E#Y8(o7Ii)W#7L(DWW#R*7)TwJMs798E*bx(n$q`g4 zm9P0(w3tBHxGVISTs3H0$aAQ`kX5Nw@nzySgPdPyJF2z>%h4KC?6kDYv@v$Hq6|v? zM^w!(8o8^{zD4P`R+^fu;I)6#&#%VQ-(Hr1_ms_FX@wfjrR}HE57aP{`B}1zmv2ZK zg9(!&-#=bBnStB4nQvI5@`4q`RtOIR$x%o}Tj-6H@>qgkvBH8cOsW#>;`tETNR6Vj zWBa=|5_3oj-iUDA8L`LeXFlZk1%_ex3uro#8XG16ATE{V(8KX*3wkl%+7PzW+7jGB zum|mUr2!#!AA3ytiL*9=ya`s%A{p53^}MgI(63_OXz}Hfwjx(cua3THt)%U*2vp0A z4b(EHcZ4@h7<}#HK|P-H{Sqlho?o1Ct==h0AsxrmQJ@vabO$>KXi2MM%jU>#O1PPm zEwDMxI#pzhpPV5AtHo)KYC=-*?j!E1!Ut3-t3%|O|}`>lzx?yU^B-xLn;v+z5> z&%#~oAoWbYAvFEaL?+y=WR2Y1jQZ3Ey)vfuG5Kf0ZWSMuPCPuQl_y{0{uIy2Wb^)* zt!S6wv8n9M$?w0`RF9@CT#a^rts~P8id-pPsY58ndjwr4r|%CUY>H~Xe6`!v&SpRC zvU?lmP<@EC~@{Di5ulXBwmIN zN?b;r1FL_Gl`Yf)zKoZVZOjLA%Lm|)=S@mC*&-{)vvInYLq{6NAcH1e<5r5Wrx11! zO=#0Bb5&OzI1#tobQo!Gg5>Nk?0QDtnt?WTr}5y#4H*|L1x`exh8#ExB!@KNPJ>1%--%>hXzvNcx|4KrBSd z9Gl++YSBd7tB~%mwNTqUp_64S2m`u?sC2%W_Vd22!K>OCk2U!MF`gdJpxvv1ngOB8 zmtu~x!{+@j--2wfXGn@)H|Z%Rjm_JJ21SdKxGvr4@YP7OD_uQ|LTl5g2KWjSCRJWN zPQC-XdO$EMsjW!iXFaI;f;t3_VFTt^l~eY~@iVc6Us&NB>10&su!6@}A4AOH%HHN| zwSxA1ldx{#xm!LE%W`Wzte#+z;F9~%YyRAZ1ChT1|{!OFDUY>uL)368nhfbFoMy=@H5aEaDHOoM-g zz@6uZ3eTID%aRx1TZoYHs!_69RzOKVeatk)3;)f_oAyRK6b(f|z+m42ZmgiMB2Yau zaR5c%a|d)cM1IG-oV3vxin|0=kBO{~>mnf_Mzx!=0d=?}DJ^F+aLz)T2L3Pc!W*$P6IW2nX&t11B% ztZ*@OLlwF{ddooZWSZ~1_LG9fI$$#buugMqa`^OyQNA0=qU zhUy&0eM%UjM(`!P=klQRCr0jvRxr!_!z}S`*cyrbK>wJ_1n`Rv0pu567RZaqUXxgy z=Tl@!d`1JGd^e*9n}=k^1OcB3#31$TM8Ic8?l9pVB@@L9KVMQv;*%Zt=DS-w*eort zq?m4FN|@O-Osk(EDe(odOfhHA8(OZ&>wEAr*Vjtwk%zf&t44Bzp3tc>+OaYN*z5+X zn5g4t9s+>;WEh1&c@kD#UL-fn*!=5$Mb<(0n`QmvejWJyy_@D&o(a2G#QFaRzGxv( zMr|Zl$pqm`dO<`P^(0DMP?Rd4WZ$5w;LHjZD=#3f$!O%notnXR=LF^znVgeczvp+m z*?w$(xR(1kmey>$I9~I3=3ka}=ytcVO`?0y;_h^HVl;8jEI-3KH;}(~E+?F$&26yb zpM8IIbar;+U^$O1|B~PKTE38Z2Usm#tZh15ZlTD}SC6p&sFymG_#9sUUs?7?Aj>X! z`A?Rer0g;CpDcS@N&c)YXQ-u1EA#$qnUJH+NAKHijI={{Du0*!=rwOQ6LBumocE(R zu7o?CvFI4LtbOz!LM}EpX+=w!#~Q#@V9VR~gfgAa!!hnh^?1~pNDqS*`S`D-lK7erov&Fs3>)f0QuX_~ z{2MgwNv3RrHFjC`g6Ln8oS1OoyXkTP*%8AiTy-w)tt8ySX1#_+k zSKT_&;b2K%A0l;IB|dd118iGBt~>M_Cmo7EKmTJ$4q4WZSzkCS@wW6az(!oHu4L#U zkfdB0oW45GOsyZ_0rv&`nnSKuLC^oXUp8SO++5`(ZgK&re(w4G@7y&%#?~JY&4r5YPDn8guZPwE6E2c<%7~Q z57|sZCT#Y=0ChF^A&-2o3h`Op!1_taSefyQ<4AIpl|s@F zXdSd~nI|T$Nk~+~o}55pA-d%R1kq7b!K{uF|~s42({yVh?#C!Z^Bgsbb&Cb-?>zoJ2>h%3o@ z3}qQM<8y`wyf#Uw=&bhq7^Oc7ER$$qWkpI^Xh?p<{?XhF$3bUJS1Q=SS}qt@F6dy8 z(l&(q$@C1ekZd*cfERLW<-pO$a1DS;{?LEMgat4l_KnUsB{_b!Ve0b#h6?(xPBAkHrFFimxzN%_7P*|Ryl9A%K*a)cy zAZpB9azN~?$j? zp!oJR{t?O_Rzhhw&;nSedstxBz5lQhnBxN47Wl8WDOL@@WhDv}i$b&weg6x3w^=_g zi-_<@T4{9wf&ld&R^*UGkq-T;0qCs6R(i4imn?Wdp_#R+;QPyB#;jIM#fun=JyPQfoY+2!m)p8cQyG zqfpfV6b^Ljk1r;Duf)<_STwpkLdnPks1-iK0$+ZK3Q!Nq?Sj)`)Y$MSKmtrp8s^1V zNcwx=C3GHxq$A-&>BTV^a%q|3B>Gqy8}3-oNMqBfCNYN7rRYtmlo}N4%jj1qMh2EjyxS;25-Q35`Hg;1CKUPGi1= z2!q&bGwEf#EJd(c;YjYrx8$0TBcUod|I?~b5F1e@uReY@ZH4E@NYfGU70t6YcP~=AID(O2#tkzSSv?gy`9KhF9p+682!Pye4{BLHm zeOOb*+7mvj|L%U~LITPhyA!kXri~C+ILZLC47W4lHU0>S0`Gg+JqF+`j;#An*I2$fjGAHW^dI^E>Xj&{SNJJuu=a@ns5e49i4Ts9U2qmiCu7wFmH!DZ`nW}1aQbgd z!TH;LQL=fb7W_>>6Y$xLU9^BkDxg3#4_B1qh)z)wblHZj-vV|$dg4)*S=wxb477|r z1A$%fxXAYo1_^Bg*q@Zo_yA8twJg%%AZ;)J{WW=+o0^qLsSOgj5xgUn0@Y%zRl)FA z2ial4=)gLn2Zs>;^tVsOC$#z3$|FE4=b{q?gMpopS_c^oNfe6y;~p0qYwW+imox_S zy^;U;UQnKWtq^%8Si{&7PmuOe=t~qT08*!%$Oc@HVwXKKB8F63T(!KwC@rUKO93f?#mMeqjf~TzEEJ`uX>fEs`MN|g^9n> zxcQUqZNQs#ff!T_t1z0Tpk=B|HJ2}Jk|o(Je}#Y_COk}tjlDw=&H{eOur}+A&Wk5N z|2QLsraJ1kJd6qxZ{xbOl+A7Wn-~$Gt(Dle3S2E_=c=%#f+@RihQj)4yK`<1UdwNm zeCy+t6q+Wl_hzu?ZLUVo=WA*zTlx^JlBC;1V3Y$F` z5q=R(Z_U!}bs^Z#mI0bCp75{-r+yR}?rS>#WkF943PioN10CR>zW{U!5IQahUD9tP z8ZsN$>0kc3fkfaGsR)JjMA4iOeqp_dBBOjwNA(1qZ$VO-0m1@8;ZLGtY|Eir21qhb zBoQP9b*?(8N?+SN<|4_Hgg=Q{d$ejs&frFI#{{7wETaGA-1t)_&;A^(@m0!T2FvGn z0?Q@w<|q;weQoftmLJ4wzShbO+Q>2yIP$Q9zu;OOBA+5Sh&TYq1+MN!WA#iTG*N2 z3;g`U?7#F{_wyrx(J8oq(R)Dh!cKtP|EI6J>(!upu5#(1H;k1S^=F!50w;tBK2;90|C)I&}kBkgJ0b~LKQ0T=>#Gc>5XUToJFp3YA*<%3V=@o!jD1Apj7~8gi!wN zb}%}z9r)Nq`T3}XhHQ&)L@XM!7c&T3Md$=jH$b;6*>WVGH2nWBUJpq3fgn1ukpF>> z4j)9<6F%;x8)^zlj~kF)*H=J#Zy>_=LPeMl^SSGq-={c@iUKqtY+yq^Ug0I_k*YF> zZ|;*u^x&u7p-g-Qr1xg#B@CPOR}T-(NQxvO#e8dP;7d>Q6-$!jI4w{UlsWu=hipK3 z)@D}HzV$WzrMJ8<0O-!}kQ6c#!B-wh0~?wFadb>adRCBJ64VHQeBysqy+Tm+{Ox9E z4=;7o8b3(l?N(JQfuwOlpF|=lmM!wN5M;iag1vEv{60(`<~G>J1r)0{2b18_tDp8T z(3Zl%S_l%~OnaeWtl&$vZ&UWGS3zvnw76n#xnLIkh73n=^HzYbV5Um%hfbZqnf;*v z`;P+p?*WN-I{!nwat@i84M2JDIj(G z6LmvqKq1*Xf%KAmG7vc>IQW2}JZ>IQ5MW3sS`DdgoduxHY-yqRVhM+N)PAxir0k?c zKt%e5hjrDPFh{-04)GHI!{-S-`Mkr9tp9c_D4D4|&QYclRNdEr>V5%L zHw9E(P+tMnZE$_7V*_e=Bn7CMqk!Y-F+h?C>;p-F=g(W7?9Uc7$qc|G-+(?*#S0OB zJ_H8PYm$hmD9}Ft7n3D;ae1HeIFM(W;%AQnW7YXr5h+7Az<&S-iV1t3U;z0|od45a1S|Am51o;qf7689c}k#{c3WAV5`6F3YpkOUK$~ z5LE(*J0bw$c!=~NuB^M-ti`(_6>Mq1vZi>iB<%fgfE3iK*g*^g58N z;eI`%03~2TiHOvQ_sf2tVm zH?}k*8{p%gI$RVA;H14(`(IX?ASF})n}sOqQ}@1q0WBs6brTm>Qz4~ zlKscGAQcA)4nuL0i?RA-3w45_2KFlD*PQ<Omu$jUR}_+aM)up#OZh1jXdw$bl=d->+~WA>w-j~Ri~TG$kePR#u^2FDmlqwUPm z!P4!~ct@W zb)+em+Ba{p+BpqhlGKA}mj&*mDvboC!Lbc>2noG@QO0^2asz@xmO7U4sF7ee?K1$} zc@Tfz}n3xaHe@cA6ice>I;L2r-C0;74 z9`K#-7Ft{G3m*MogBQ;M2z~$rx?EVe`5-KD+&=p^nIIa@;;2zjG>|9Wd=3%FcpljR{q0yYRfR+Nq3`Cw2aLKU82GlJl= zB^bzgqs=m6e}*~o68%LeaV8kpvfGzSLWwKDAR)Ad$q`0e2!5pctH%_6(C*3kSC9Vj z0`Z}UN$-s19PKNGzPuo2oM;GW7TAG8GjH_m!8L;c?tq~J2=*-imV?3`1S<@J9Rq_G z3Im#9yZ9f_*NlF`j1%hvLl)_?`AgocydBVU_tM0pW;p|EC;|pFli_$!$E-)dmSJE^ z?8NrZS&@|>*vxjl($F1Xb&>VwU34gg1Gusg?rGB^9`lE_6z5v%do*MEa)u2Gk&+Pp zn_)DB@#QSh7Fo)mUd#BmX%Q`eD;fbC$34zIkb?>!2RTeZ4n}@?+1I5|2{M2jWWWx< z0JyQf6pVMK|KVUKz`cHnk@bY9!?c)z0i+_w4t zIrIB&>*_;+9Mwc+7qu6XyXU6x6SLnnjy+%Hbv_iGA>r7cRQ-nKfstl-Z}@>S$o0i+ z^bd)B)%NS{mHs%Oq_Xrdd*X1~pH0}lv|#$?(%t3zl@oAG3m73U?IP%P(u3{H)mY2Y z65qY`qvLsai)=UB-G2RXEy=^x+40!>G8_Nr>wYZ@HNOrYu7*k6%pB2}*O<`Un-6bJ zYhB#0`zA^C_OQS9-xFjpo^LQAb4HQkDLpW*Wmqy@`gh;HXS}dxJ2AXwZz^(Ux4fGO zzr56K1`f~Uk(55(kITINZi!#Flv>(R52sn|5cjLdov+KZuljrXfHvNUIiA}Av)$Bn zd)4tFgTo=*`}m**UbVeNtVkJnD`FXquFL%@tpz+RUlo&($n`#o!er zMOS6Pug1oHIn5y{#y*siSiq0TF%O%QLnTRl><4a*Jl+?zl$Bw%+^!#-4lljubGbe^ z*FCwP%Ij{3dvEVNW-`HhomjTVXOS64NL$7^9Fht6x!u#pqtpB0d3k1Gg@D52wq{$8 zm+}=P+ks63e4l^<&h4m?b=9uh)xJd3oJs}}$(|I6bCWqzBxBD$Q)DOxa4n#DF^D(k zw%b21&%cG<`7dj#59D45aqsTFOoOFDo|ag|SKl?^=C}PQ%0p$e{pna0U|}bAhICX^ z+a`hfH(nUV_2@eud7!4!@KjUbt@-GD|F+Z6y-pe-!^98KDFHSrPrEALjOp`x2*|1d zZ25|7I|IVqwrCK9dhC}e#+~T?Y4l7}mvUx{3d(46K}!elas%_Tiocch=ePZaTL_Sw zAt9lPr1hdH)(J&zkdYba<+)mN8BW>2!kDgxk+=AByFo)~1h5t*wYDd)?!|jZ2NZXh z_fMyF_Sa>-`!B2s?b{&NLS|N%hgK4e6#BI`)Q*6=G$}*Gbp~q1u@?ET2mid=@Ex2A zC;#&Hp8BrL%AILNi2E{1w|`^u0(oPW);N6}G=?&86Q{OvvzXHt)w(g*XHD46B=LOO zZDrlQsb9yMaJUr$FOY1GJ=kfT)y|Weh-An1!tva7;tr)k+JLmM3$Y>j{`YaBxq`cv z5f_MkVTib-xlAKsN*fe&4r6Le$&wTk8%aRnN}EpZ`Q%EV@1gLSjG$~3lS2)OU~PvDFT{{h$X>^pMqi`37%I_qg7RHn*k9-eAI*Apz4z`vO^6`HP}cHV!U`|YFi;7Oh$ zP{McJbvjhPcfKtrBsGOb!Z+7Gsm9_xc`i7t595Wb`O$Tld~d(g$fFRRRIS`@WlAhv z4N+TKfaTNf?BN?9oLhaiHe8%#83N5X_h(3j&Age(o_ZaVczSF;>2#sR{-kO@?Xac= zGIsuC^${Y8nQJ3*2-8f8ObKHaPuJr%djI~)IL+Wr2PozH+ERqHiL#wPY)>#SYp{^$ z{tQ4+O!*9x=ii(ZYe0FyYsUFnzy;Zjbi%>m)Rdx;2!EaC8K$KYNMZrz_Rd^jhG4n=F7{7Pp|Pwq!a@i_6@4}zeHmLmxVE4Y)J`6nAzfOI zqBJ2uKfCpo&eWLjlg>XBxOqYMx|v$m>zE_-fMa(yul&?v<=8D#yoZBLyziK|otQ=& zsfL0>ttov$LLOlip9Yx*XwW zLgXiq;9ex&=g&J~%?ymJqrp+sFi{+OymNmwQ|yKU2t3XEzFng~$Ds0oWn+5QIPI}$bYplf>vI!|uV490x zWPRK1G-MNwWy1`ixnTYhIu$pFq!KDno-q^NSrQjNh^9SsG#SA0BkSAk|qW? zQao90@WajRd|MsR_twdnzdxWdiRb@85&2&zMET*;mvAl%CNMbl%(aF2F-UjXC<;Mu zr7c)PenkJL2i(YOPK6J%1>79xLp;dG@De1i>XCI|i&s-KMnuVsr(>QX&dDIg}fGvZ(3SYWN`JA7i=8~#k) z7OYeyI+9lp1YX}C^&7R#;RE!c8sU3gepxiBo4@V>NA7HNc(X`X1EUN&H6#A%nnju# zY+DG&c01;fHmz_ptL0Mc9hX0|xNn%&NtmmU!~n;@u#~AgC?ic{hxW92C=0 zoP>@z-MbxY@7UHVig)tlfg>-5r5E>YD;rqOL*l}`;Wz2?u*o^Uq%2Tp(-c*Z`_ zcL%v`>F(7k&WXx>jp`E?_y5M?;8^S8-(;Br`h?oSr5F6vx)WBK(L2-x<<~sz_)vo9 zCZI9uonHD5W92(p6@gBH!~NqlOu8DZ_R|v|D;xqhsp&$OAmCKfqPIo6{>`&bMHe(< zvPdo!DdKZ(JkxaiyB#<}y5>oEV^#>jRnG)_q2;9gx3d?TZK}uG)Tx*^gGQp0=JYJNsRa3;KbN59jyg@(Lbs0dd&#_eWMc`c zX6Nt;*yAOK$4aexNnf5gaJYtTnxC8fexppqIogC8j(lVM`={vMgF~j7cMokW z9aZlPgF^=G?<($EU23d<%yALAO4{$4xl3wNz1J>$oW-DS3Hi(lwb$V9{Ma4mUsink zOVy`9taT3aa-pBEyS#x=lPr_iORuxpxgJ00!$W4kjHj1gSF>}&CW}3%3BAY!7(g7t zr-U-po-aH-YWl!3WS&xjJLU;&M`s;|FW>qVy60{E7GyD4YSN_$NY}{OgB2<_SmIkA zqb$@(Eks3Zi*UX43MCCTC!Hw8Sw_ob#48#JI{))SBpd=x?7 zzJG9ZZn7xf^LzxuhwEhsBW{r0pI07A75|1 zo@VD>F-*Z~x*0?tz20W$zB~!#rbgxG=w4*E2aGQSam})CJun$&9Kyf<==hp8BgxVU z=ZIt4YMv~8nN)(NFeJc2{z>-2;xeTK63{aBIAn5fhgJRPfLQm3CGV!@c0@Ix6pXls zI%m)*{?8m!oPgarqn^FQZ@mxg zFE^78KWYL$4F_RMF{dEfWl0H~lC%eB2I4?>d+zO&DkQE(vgBRW+)k?ofYDung#wxnG|3-&5>U{ld}*yBlzIXd71C zvsxE}OzZQK>(>|E6z<;!_8{U;IjSVR)vUwHa?-=xn|5HH@5)dkS%3(kVWnF@)?y&^ z<(My!SU|r$@P8p7!pG;oB_hOPxb*598%m4ydPI{vQVpOEmU>v{moE!(klUhN9XbbT zf~rTKo-j9iciMiQM|yJ(q)S$tdDe_+mGAk)FwneS-5!L_y@Q*eGkTJ2SQ@;-`I#Cx z>%E5emTU6G;Rg_muTDOb-takx0XVG0XC1=lp)z;2X}KdYrDq)C=0nKywP>9)FwJKi z(&k$;cMc1lp5)DkWUA3Gp!(|dH#@KMs4;N%hoUJB0mTi(@yR~>hIw%;P!B1`Yhk)x zY>0*I0YcA8uTiPd+z<=e5fEg_%4o)6S$xZ>Z~Fu`k!1DjbpGbHCy;u98|UwHS(`_~ z2Cac|`~%E|=B8NG9>AHL^b7foq)oAi9l(OJGx#yfm-soOY^kxmXm1bF4h4SB3vjYZ za{(1FBKb7>Im?U}w3)E*Z6Q84Os$SM3jvYf{Bg(g`fBF3{>6dJvMBy9j%*M|+7tu_ z{CI8eM$)!e#1=3bWd=V|`I0PWlmR#z{JD0;wO>6}_6=YwCi&sed$r@Clna4>6KM+) z)O;9wBN1?~z3{}Dy@o8y-;RHoLsFkalHnHh*`1nGQ5g}% zi}3a!FNp=$EXx_9Haz#3-39k`Sf8DM#1FykL2lZnyxj@bldDLue2q0;9GN1Hl)Kju z=SD0#G4bIXnoOiECnt-qI7Gksj;rvIIRoU)j05a~WTqPRLZFXcU-Rwe98K)* zrr48@h5bTp*x+L66X1m8g@=5G>~XwP7fH?|k2ye-t{uI=OrTyhwIyGMlL0VR6=;XYW-ho z#vS@^;(iV|GLB7}|2`tqL{C_=Gz5+~+#a9uaT*X(?pgHcyuW6np?}fq4hdoIv~;&| zxhmSCh3$xC7R5eECl?GVMXl)g0T?UOYJ{A42kP~zo;VCgv))7fbiB;p5+3YaW3))P zD&6st;KhmsgpkI%gl6P_88ara8~qX!BJJ<8p24g$7ENMT{nb_LX+EZGANx~nDsEsR z@BUtDmaa^AeWjg~W3tb})j76OWkrPE2l3l0e!Ot0`O4@L6bg-%m>`1Of>{QotkKYg z+uk8_ytr?xNE!5+uMS=98n`P|bbWUy;L0uR>M!9Bb~;pDUlktCt_}37pn13cG;^Ki z=rxMOVa6uu!?I_@KaHI!W>d7qhDo$%BtAu$EoM`))j{3r|5haUWu`i8ufZg1pf5rK z$#||hf|SQBYgATI5@~0;I-az_JZn@!(dj&Uz+I;;xgr})FU0vT=?2Zj;D}@`%i@P%9FG>r2ekyIcRE(!WqE7GwXx4oUC(WjoQah7 z`w&F|Z+5|%wWVBs~ zb!v3U-8R;R;Gmq!Iz6T*tWG|!2}w5An0c7J6ZBtRwHsO$mH7jAPcXS@F0< zrpK)6-V_8Rt8kJi>WoYYAjCChPG(`0m#M*0>pPu@S69Jioe#K)h-=DJnv{k$cPv=ba6Z8RT1_4|lTLoUg)ap>eGoYiZGgSO(>1c~gVUs8PH8 z9X+CiJ_b{39?y}sJTPs2@3qKUx!+{Pz2h+`I-kMU02U}Npj{j^juv=H!nLPXRUov);Q#t=S$HM)6-bl`0IZ~(&*NY(!)=06?Pp) zRo4|j8Xu5`M4jpt$%Pk9DEjbrRuGW-Tg2R6Jx=DY2Xm*e3WR*AW8KQM{)ny!w#_}J zHzBOR1|!YA&g>R_u8_yfb`938IgqHOzXqj@9LU?HS!H$|R+ap25C_tou*nSd`ur+= ze*~?_piDC#jvIaR|Ab;V!u$$tj_!`6~|;CdYI^6_1;)|$hL>WTtLa_TI%=CG=|@drC1 zroe4&O)Kdt)Q2T=^>YVZ?{;?k1~PdmBw;@GEmu| z?i>ryHS3*hjI%YWyG#K4zvfSU>jlQ&E3Zm%2K;An#+H`!h+zS-T#La}RK)f(&) z1LNdX9e@?G@oB3R`}kLL5=1J1lGDBBQbf1yQ_d+q`ipmIW-Fb{l#C^EtFq}R1 zJcLeVuP0i{0*8v7>Zp-h9UQHM^#8G=3uA3?wn&?qc?==jvJ^5TiwIJCS=E(J*E zeel4Q4Bx!MQW-`5Bo~qW?RyxBdTt8l6->bors3nPzA7A;rDgT3qT{UHj+STlMaKxo zFBZ;M!sSTb-~Tu{Z&bO4Xr85uhJ?cH$nYuV{P;taX?)IM_ zkqy;t){HR*ucJKMAHSLa(5e7vn=(#CRe^gWAT6n6R{NS$BKgWu#HNS%^Kk$3m!M;i z3+UTA&QGlbEfYS4xgs$YGOFLlrkb+3e{9ZgslA`U`Ye)(cz8Rf2-vOjW5)bh<7$$Qv349W6W9zc&Yhz9;kLdb zK+sOG@z%VQ2@(NQUuEYfu= zRln!1xazu6Hei_ed+f*KhDt>TG=F4}94j{a>dbNh^QB0}Jke(k++>Q^@ckJ2RjB6$ zhq`Tbqg|x6&`5W$?av|0+MQHvpfYh;^66Qg?~fmiAHY__2YiE-vn9VP#om$qg->Fr z*H{ED50GsQ>frFD_B+RIQNg)P+jOqiHOhqoPUS;+oJic}2^RZrWHPyFgFh1|k)nOb zg70r{Cf_+P&^6E*;QV&2vC}Xv)wFX6v=nL`u94j>wktZI1zgn?+KBWYykkNL@rM4^ z@jL!XAr7+n&SV-UjI~NhTO63h0U%kX;9?JwBED7fVRte0X&2`IJu_9^HM6Zcqd=B~ zc~DtqTEaF~QeP>;Nw#c!nJ}rot-7EB@)2PWSN$1DhM5nJ5dT2u$O@N>PeDW|h6CD$ z$gv|j$s2HpRA7iTE|(4lkbRy;L8X4(g;;JDXLtQsDT3FfHQyntvE;*^lA8uFC!(!8 zs{zHa`S{`~Gdp{Za`~>!lca?OMuZWn&8tHqlj6PiC(0f$(G34lYWRLDQo%h2$nuPQ z<+4553=e^V|M9bp!Jx& zz+}1J!i%I9n_3uKaFjL)@=wh1`aoju^|EO}cXPT3m|I4U6K1;giURY;D5cT$d#I8V zKmzMaGUe#G*C?3ZE-otyUHYTBE|&uoM2f2MG+T;lcf!HkN^!~bO-hrBdn^D{o`x{n z45k`Po4-}VI-f=#FO8N%dh~c5(QlM4Tj16R&Dd(1->;f33Jw|=C0I{9Qi1QG=Xri! zbdbXN#8Z#kc+I&W|*dSC*w&8_tqHEx?$6Yq0?{Oy@QFR3=hmI9E`B5e!G@8(Z8 z2J<Kr)%a&A17)o-*OY3@1&7IG1=l@CKPbuFrxPq7&3w7gnD_U^Mvu)grthBd*8fB?BZ z-b3$qX<3m4(q1R9*#OROl^4C3+| zpbU3yN7DwHd?H0H>Tdqz2gymn(#O~~k%@7^wjtdXS?)fAqYwadkma?;r;KnEf_ONX z(%@$q;PZ3fGeI^lHis`r839wC?PUI3aU5tZ-ul*hh9R4QiZou{18>5xD54MmDMYaz zSxTK<3QR-Kz1pHFLk})q14stXJZQ|hNVSP$f@-jLYj`RHPa%j8bWW4aJ9_S;1y&D; zfX?@Dtihxw0oXb9Us|9lCl6DeS-*!Pi3>Cqhcu3wK$kyuFs^9#zUr z09^>EKwIfywG3PmYMVHuo?_qB$M5+yo%)I6LeH{!xkqvS;Tg2lPMxb47O5GaX1IDp zDf2)p$P8dr$A8@Z*VHc{o6Hd}_8$XNcp*@r-snwT&QQUe2z^lpDo1UNx;45gEZ7j1 zi}g`x%YA`x97?LNn?FMav@c>0lfM;mTM9sHGHCk3e*O$&P(DIn<1Mga(RRl==fu~R z-y#L59}B19={g)m>p09ZBf&G{FG%4@80nWr;nH*7U5II7Gx@)~fFFLU)GSLDv^OskrbCQV7Q4WyjSbL| zMs~6o1M=ys`d!_qG~&bN##6rWvGzEJ(ffv_v`35ZG?IslTC<uyzekU?VG zcvA>ojotn=QFw2mup-9SpS{+uqc#gaqhklGO{^w!Zk}GI!zbyy#|^%?CDBo^PcFmJ zaVzeP7W*9VX0ba~Z>e;kCLt0%JbY((6AQlZjmr=?(sOVmNX>Gt&iJRpUvMM} z$Vh_G%sqFsF&G%`GgqoRudd^UgOiEZq{g>^Dz}2qDO-~PxYm_x#%(6o)|!)o#Qw-^ zRMsYNa{M7h@hV8lvCdQN$Ri|p^;nBs!$BKm)rdh38Jn(uv>?(PujTT(iuJEdE? zLApb_L69z`yG2St8YHEpLApU&8s6R8=ktAk{|U~rGpFX9>s&MYt);FRS}oAX?^yc| zgV{Ur2GgaV<4P7AVoE%=pSdk@k>4zk2R&}uuN>@8Z@mLAy;*@*5f(l0)2s+2zrS~- z9Ht7~*opr0bbWSmdA29A_R5=Cj0k>}mElbYg?*=j>NJ4cHW^{(n(!|mR-qVzovk`j zgi6zW(p8zbApOaR_d%)D`v7f^P7onbKJE}8N|_xXo(o{OWRpyTTq=AM6m1zVfVT9R z!^#dG{)D2P&?E+Sm1v}sew8hP6#V;1M{C%ppV|qjfg`oN1iYapJenZ?JVJjm;4W$& zB%dKs0N5EoK3j+(2|3EdzWCIUO5+PKvE<+|Zik|%TLDaqp;`2Cv9oRkzHYx3Y~qm- ziq+wLBY|-WKBebh%?V010q*97^oq%>)`pRQJuo~Qo>m7+vk|aS7CuU)i=_q7s=Kcj z$lb;|(I%h_JCSe`Ehxio_^{GDq&on+t3uT7asyLN6XsDu4!91ux$}CG+*zgTpPa}@ z#er9XJwBLftB!Y)Ss)oxppNuE$Df(+2hh@6?1TvjFukdeCL=~i)A64F2%jNqVFgQa@#FYf#mLdq^R6?Q*NVOx%fWMx&i*rwy zSPu{IE8z@g1MXrpL1W|wj8V@WqzCp~!=QW%H|@&+S?#W>&L=vu@gRwhcRSO`WzNZ1 z7q%WSd+{|q6m3Z@fX-0YPJ_Jkt&YYWBx8E6Hlx@lNUpq@#vnQS0JC#q*^d;m1-zow^jb2>GBcV^Y>u zlQ&-{@vJz5-;Q#1+=bpP5(88ZAoCJ4hdcbLXo0v3?tIx^UlM4ZwVPVgLz7NnXIup4 zd|7DXq&J#2Jg5CHaT>sg*-{0$2fW87xp}J1k-tHELjvus1Z-e^=1I6GLR@cVuDUG* zbLn0L9G0*|a3_q}^1(hcAk+?F0`i&h7L=IOaWEx8vf_F5hrC}C0iqsAaGACrxMvMPtZ|1jCg zcnO%4t7_2U?Rx@RxeI7FAp8n7Wut@6f^HCW_!uPV&*~M#XkBR$hLY+%|b?SB(64Y}^b(OzeR@A?M@1ikNV@codmtZfUe*Qx3 ziW|7u89Tyc^uq*$_NaSNSN2qQ&M_;W4a^mP70CqH3&e9q(Uu~JQGcgA=Vk~go-733Lo^WUKQ4^RtmtV@O`@U69z&?{ zV1hE!AiUz|*a`C|QJ3Qz7!|2kRauhux&hY~Guoj2lc_5X?PbtW<5nd>`zZvwAzn+R zaru^8-w1-G>zFKc|RSK=dTkNZfJsaXl{X$JZxb`9 zyxCPgW@NvVNjn7PTxLSRTyoomQ)Rn*dE8PP{Xco9LFJtcw=ItEdEOU=FYJQymySBY zO|(UQObRkP1HQ8_LY#_x2mA`FfkpA4Sgj zUsp|D4k5M}+EUA-g&9yLrB%2DtY%V*1$gDME=oVf$)wlPkCeUs5WW&5!Z?$`U!X-I zT})DXxb@2=Q`n+x6HvsPZE31}wEtUVu|CgJ`}7}H<^Qf91=>)@Kpm{I z;+jfCa(ay|_^fMaZvsEkWUS`q!GQn60k8~klPi*wBZw^q_i5V?kxC<4z%s6YWpIMa z;9S-{>5qdkx{bffzy+5?2QDM-5LiZuSPrYHjzt{zbYg_b>!~#c?blbm)N^0#Yo3U( z)_vm=&A&OXVrGiN(&#dBf!(yOwu{I&?>YYUAf-bKbQwXjQtYYm{c$vWXvBbE5D_K) z`ArEq`ceiNd+m*yj#(W01mI-KNfReJ%9!)Odw$jkJQ;9D9kBn`llngw?rPhNd=t)* zr1S!>jgiAf6@i&v28;@*t@{suS$V9$e@lZAVj9pn#&)B~K3W`Z$sJ%_q?}}Z6`Aqe zPNVW{Zg@YZST^n_r)f^uZUX)MAK3z0NOdcdytM}x^V%K-Bg7RJKAfemAT8iNt1Nh{ z<-)SSi`$&>Jn_#DNdZiSrQR(bk`VlRzoap)9c-)hZtB3iwxh{acu>>Y;E|& zU}$AYSai5BrTM$^(DLd+TYvEi=X}E{H}HP#ytK6WPN(XlW1>0QnAS$WxPVhLld8ZJ z-Ohsf&Yw?x!v~-ELKOJ_rZjWKj?~jgq%ppkJ!IZ1s(N2lKQx4+H;d*wzx=kJ$22l` z)@wUmPqz={OZZ_$`cXsudpa)W11if|-dC;X9d9&vvHq}lT4id@gbi?pA7mx+e4K7f zG}Si5Ej(Cw>7qHMp{y+HY3Uc6p{LbUS&w*7@qR0%qI%y_OAEH5radsDf0TbgJgzA1DRSi6h}(y#E>C+Abe*C6>i$X$+nPHbcSfV0!|Fe~t=2}beHgMU={TM-UyZDEK>O28G+DppHkur@NYt>k zPOaZzAs(gi;6|MK^v!EZ$1uQc)P69tHH08iv*>33sy~c~d-rN3d zo2%Y+o6AyslGksdr}5+Om3Da|gphK^VlasI?p@`$5-`m6GeL#qU0~(p5YUn=+;W`! zc4Krr>IF&DfwlVji7_4L_h?VivTw6uu-@TjbYCQ|gJZpC<+2*yh#jpOD|O3Y(@(7S zXY9kHN?*fHhzxk2`AVA*8Tgo?<~uaecpgdz>p8rrphxhUo0A`NH3%)so25mm;tc7eWxb2ckse47lr{SkL{SSOaj zrQii;7mMdvuTg8Bo$sX@uknk=%k7{ohY+o|bTNIAp6B=WwF^gfCaGDV440Q;j;6mA z66rQ-=V<$zWZQaB_=lPhE=B{#!YN9G_%Hr;GI>lEb@%9pmcOO&b2FJH1J9BumrQ#c zRtIa@ZvzM5JnX+!KQ6EaucEk-ZLLX z6D=}5g;R0m5?_y9%wR3M68Z0fW&;Kt=@k0!ot2a*g=rTj7Xj~i{Ftp(#n+piSe42h?Xxfia&+@}Ql$;Om zt@6QX7iWUwTz@}Gt{~}pXve&k5L>)K^Ek|gsT}`_>wEdara*pguK8oo2GU5<3j`OA7#H(OkAr%kCx__A9~P3!*A+(oLFRQjO`%@IaUrxiC)1S3@{qn) z#+o6eG$hj2?KTo+UO9E*FX%|@zXqBY>89zm^x!S0x2xBCgcnpn*B znSZsZ=9|G7RB^{3L9dJA2sKx0MM#(r4AJU@4w=kgGAqys|8}l~!;8|*!tV+Qyv^+? zk{sPs`y=?!%b-TD3rpZ3OW>ieu$&unl^BJqKLH7!!Vt8CvT?@6ywE#sq=e;RG_uMm znw@n!e(2p^c@BKn<)LRd@L}-*JMh+;&G@7L)4lQi?Wx{_SKxxK!##hQvX3UvjS_Y# z3iM+yMiK`5LPq?P#;vb-wza_SYroo~K6N?uG1yMU{&1$EqO#yBBHg`4eH>iy(Rjp< z0BCXvsijOQ`iz0!cOi~(_N6}7DkP_LRz2{)Kbkcz_Gt405in%wuX*v%wzg~@L+R`( zE)VeC6%~TD3qg^38Q{1|i{VaTO;kb!_d}=pVngq*8$gG6-IF$7eaxLrKl=W9tkL{yUoBjN0TE1cFQB zL~%Hs2$3t52CxNSC0u|vp5284!ZmrSsB_gOVbEg@YOr(fO~Pt`6Amy-F$o>%&2UN_ zFiRmMWeE2oIEDW`cPBOif=OtELBEmBrh#)3K`Vr!`&nX#AW<4S$6x#=SK;zxwX`!? zh3%dZt#3mz*L#1DUeq%G+CCk}=;bStO()MKJ`L0pSvaex3V>udF-HIZHKYXx04WKB zx6f0NoeRn}dp3u&h}k`Y16Htj&(=@Wg8$>#bB5)~Z!&?r$N`*tqQq9RV3QsyE)=p} zurOsfk$HEI()HhCq!Qzl3Q$J81xi351C$P*NP7K{?+#SUNd57*zzqmcNtJlC0Yx`RlS?Fk9P!-}|9kHLJw_b7g6#{U6*g}Wd_{MmXHA?@uOFaTAx8J>8?{*snG}GK zE{c13zSubc63~eY0({{~pu}{U6cx6ILgr~>fjZP4_tnqB5eJJZSSNoV0Ac~0Vd(nn z{Sv(^$IYBs4BEa>3ZdBP*M86gp$1d9Lw>%d{aPrTPOy5t4F9ihWP$@rplqUW*@Kxu zjRU*OY7$Wfw3Y&C_DlJKNbA)_sPD&-{MQ|Wwf;5OqG0ZCMJ3aL78ZLHOvtThDsUhu zA-F8p_{m&z=tUUiclZDTqNfZfC7I6q7CP@Es;?lCG>`j&i|c*dGboW1Cy3$p zhx=M5xq1jp*ovsa1%Q?%B0Rf)RI3MyT&x+a2emmN1(2p}^A=5fk--o=gHp$cfN4Gi zAiuvlBUYPZ$hI(MXZPZuC|b7sF$j$!u2{! zoKQk%?~m2y_(TeZnoL~fbc6n%+CQI2QMu$j08n6(j-iz-DzWGlFeOsF6k&&66wY^I zCuxVDie#R;P`RLhND@EYi+K4sDv$&%ul4~YYp@DB+mNso1uL&LDiTftst_4YL;lW) zO&qw=#$18t93fJaI3e`%;@y8}+5Y$7hr0oESr1_RBmvc?$XPd3nd6>E2}2N03gEbM zuhY z_~11`;BW(Q`0`TVa*E&X_aH61Qu)3}kGuvnPUyMg)_6%l>c6Xg@Rf5w8IJAHUA|@Q zFs#%#E7IuAn2Pj0J5nnhJ^OUTYvsF1eN-AzoplOR;ZryHX0yE-wM4FQTb7d9)pBmoop?kVA@0FpoF;<#*x{rsq_=Pmj<-jmXRiq-q_Q zF4+K)!~A^YNOTrLAy%RwerW&giN& zR6fk$eMqBCbMfurbwfwsl}%VhM&h@xYmD53%u$*yJx`88|4#>#$$Sx@3XZpDj+%Z; zI#E>VGlQ2yVM4S&G=2i_P%_oD4`JsG5DTEj>b0elJr}6ZltKzcRMw|6K)o=>IbC zXYA^T^I5ctOw?6_d6y^6XfoBA;0r?VDhK9<@cnoix{8{P{KA6c&DmrB_)mnXVz=zS z+k2}aj0hwmFHKi8uv|4m_1uc=A;4|X(&$OwEWku{_{r(dLE55RP0>opb=AM@I<`l`57oO5&3n3V*~vYgxe;#EO{dol5!hrE&k?Sl5bs1Mv1|- zS3<7m=+BD-$I@rEk4XUJaOC%>Xz&%K7tR&`YA ze4uvmTF1g$3JVEzo{fB+yestyp$xU}r}rG13o+tbiLcC?39gUHA70NX!;%~S;ly=D z-!%M)z?Z-J{LD+>E?VxzJ{35_-X86!SBxh3Ll0eF=y+2L@ZIvwAq3wF#F>HfyLqR@ zHTVdZhcD4Fy14UliE>H6%$(($+6!1aiO*cm|3)?}qqZ_Y z|JHX}?)3t4_l?m0^l!?}zu-*yUI1@vlD!xH87MRvEr_CuA473kM>zQ!Z7$5!x;J<8 zP?q*n9y%yKLO^_n5HU=)rd$#42!wtscS+B;17Vzg>{jgs4+NlW;!(!GP)56ly!Iat zQ@7@~3$KWUxm+}h>^XnDQfuuf9WEPHa^DdPT>dR8e9W70ke!a6rI_ARIZlx-g4yKU z5XLtfu&{Lev}Nq{7`t}<=kDQ16zl0$rS+~foAThO`O+z{s=4)Uak^)8_U`D`)2qWr z$h)V{$cu(=p3P#@>24W)c_NRpSdq1L*7OIl2+4^H>@}`ng8#_1#0z-AV6pSYPlRQs zeJ_zbbI|V`@6LU$&VQg->R>whcafv=8?FVYQ%4dnFXroQOFX$eT^{sAEfO5l*PU)* zJzMgRmc@1UA3Peba!U-<6ULtKA_@Y;$gXf-CZwE!#YalfS^JzTH&A5hVd=M! z=<*Z1XZN8r1q9a4|8uB$XZy=Pj!Q-%*{Ua%KZdS?u_ru=*69hZ_g!3{n*^tEk#gh@ z=p-Z_i~Zpj_cX6@9|@D-6S8S9*q{@8&*s_Y`_>=%?-{;1pT$^&5`$ZiIgy;;nK-_} zyUUDgto`B_y^fuk=ozZ(a5608u9lJ_8r%M-+^;e%k4$4viOy|tUhm+n)I930+<$&D z&K0d~uNGDAc&F#oe08wHHGRjQx zk8zHfGuJ|VsBt8ew|(AjOc%XGkSH4zO7LhSpXX$i4yjeh^m#Gdn#vl$h$o@7eN(lu zJd)NzfSS*A{&D8i(OS_cCQLQe$LPSDuc7#*v_#pEQuEgGNK#EX|z%aWF6hCy?o=*xHOa)j%-#wPG`;B5be6(eM1C&Ufiu zyK2gk7C{Hjz+zUzuh|@C?YsMi`R5%(?*e|`dta7U9DF+*)LEQwUeJEh7p~Iz8#2*X z!(76w)8@zTU*>lma&^>rzIHyNIO~~S`|fNwJ$Em_?UeHF_V-dvlghzzF?cypp>BWZCaW84z5z~ z5Bi`$%5vTSY^Hri33k)V6f1KvbX95Fe%Bng@n!U))Kub) zn-p+(nu@<^srsIx0~rmkb{=DbpM0K9F1K#E96x>&mquYoKuo2|gCo+62!gY(7(w!Q z*e)m63r4b-?Ioqu_)7fQ?N~FQ4 zRiz=F2s0YeCcf3B?ky9?LGFD6lrxpB*^zh4j^E!21HkM`KozCe4&pQ_(`ypd=V(Kw zVu%b339yLMniyZizmJ$!l+Yj%XltOtqg9s2!G=$3W@7I1$CM{k;3(-z^8ky_n?&eB znAXTT-u|IB@=N0kM@dz<7^W+1S|bd6t3_NN zQ5O{0*?3G*D`wHU-l#&g13Wgyc4IG)(?eHcBa+s; z8cNLm7gkf(OdbKa)pncS(G8A~y;uDNXU($e9CIh^gJUFS43=S=AnT2!fQa;m7E=!s z{}Z@dksvg_s^B18qk)!QyVq2Rj=K2IY1-m^+E+f})GwbbT$ON5d}1^@4B<0RSrR&) z5jCPbU?Z-<)(fSUB(7FQ&;P!3i61-j41=`ICV;wO<2&pZD_BGfqxu${`3bQMdPN2k zYmv-zL-GQ9;|`H0U16cN^ABft`)hxu#!5>s|GJ*~QWNn@`IFke=-=>DT;k;AmvSfF zXgszbGxz5(e^0j2IOa$!)|)=zWmZ(lVf3KsB?64zz>E9AQHp0SLEB5raV1V5_c;%D zJ+{TB?b-2jO@+5MVJ9@-%CTvTqkrb(wzHZE9ge)BG9qPN(Meb_3gGwu;`iwPS@*kK zw>q753XkE}4wdx$UglbE3if9Kfqw$-m~g3EXFT-IAzA`=2S}m;0q+RiaNqqn9*{j3 zIDOSI&~79uEPD7T%O!zJ)WmZiIqx0#u^W7+@a z%=yD?pjcbG_rceeo5R^zY(xLRAj9RS{ODuxYwV~(~_=FM{FiiYTz2FD&$~{w3XxB=lJGlMA?IK6+p8)1!p_h}YM~ysgXIk*<>qD>GY#;1dldQr*O(26u|BX!qAh z8Hw2^2-kni17ma~U{>I`yt$HsZT>E->}jq3;OmTA33)+vO>ScbcS1Brd2Z-#!hL{x zsyF+X$3`mHerR>iOX4|k*eH6ch@8OoV0+S!8kcj-55X4;dTx9_HSit_$(Y+oc?gD5 zsQseUlw6qPyV#X-^m8MBd{-RF7yb`=v%SD0h}QG5Zy&n_k^_$QUGWk0LH=$tl=T)H(ck~Ze23|lCZPQ|Ll*}%z#raq zXAp>t1=05FQUoWbTeY9;cVn*+Z=Lk-PmnTNk{Wh1TyL`^{A+l`Ar_n01$RHwUyq3s zE5E^iC-HAyBEY(S@zp1%jP_6?ZcAmGI5?5^`_FDi{-ow%%LVIn9r6goXS?GJYzG9i1*l zr9XN5du(orKKcvJoGH5mz7h(5^+>BqR7#o_8rRpet-=s37}D$bR2x)pBPjkosE}cZ z?rc2U)Fz1DQr$0wWjyO!+ToXveI4S8N<&3(TV;j8X`0Wv;a-*(B@;}Q)Yp*%XKc)E zI<+iiyt_~4boBkXEG0g=4_Qd=@#jrjs29xH(defP#+o&USgS(#6y)GuGH|t` zr-Yx03~kD7F_{MwX+9T+ds$Y1PcT(bQ9~+~U?-`Y$76X`qN;HWqvnrq=~}7^zX8wE z8G{ypfZCE5@>*3YnNwc#!sN*UBR9@p?{D?XMmu{7dLq1}B*;m7L{rd5DC_&Ow!ogTHzk%2@0X zC-R0+@SMdzMR>WW5)F|vCi`i%#UbjdLLPw0voa)yND~uG6ey7qeJ2Gjr_av%!8Pj6}4@F*EmvZ>T8t63Ep z?}u^k>kxC~kN5SpN6cZhQ{+$ZlEl!5ihL#zrMVfC52c-u#)|Any5VZdqx8Og%+GI2 z<@{=Fco37xJ)SirsoTk;6_#a2rbXBkx~u7cf!R={q^>)wfdG6eaKt|E{E7w7L_Bke zodUTfD?~|IDwdPf>`?mzqoNp>ZZ%{mLl(tJkHM*kZ1+$&0a0Jo1Jq*HYgM7xA&6z% zZ;UM2twBsv*cnaUua;%yrN)Pr$&L|ZBxj>WIqRS%=s)FUKvF$Msj@Ul!6~9q`oquo z%_CIg%R~fpq%U)aA?j;DRNvPE$`)XIi#%5ThC~wnB{NsAb>OW}3+z35n6njrxpqYi zg1)K`3^2(UC1s`9ih6Av%!>C^pd2-rF^434Xf4-&?bDgVg1^8A)v${o-N2AsDg%h8 zP$?%X2{5VB2}6po2>8Y~+gEn&o#lq>}WDK}05yG@yss==bNf2RM-P7JDU zoJKM&x^cT0c>d1m6bn1EERD3rklojopct5Z=P-4*G7q`O^TwUd*13ZKvkT>(%OgY7EM`QVeiY?S9EeOWdIjLJt> zG-)*O0l%*zl=8Bp1)__k`j}YH>y8Fy$T{2=)n)u4 z2yay7Uoe!&TN-jjL9`<3g6u0i5y*^607tIxvQCai($(O-Q5t}&X2cKZpCyO%~Y$ zQ6`DJ8?L&1b1l@V*Ov|PdVr*EMbQNXy`>~cRYR$8sM{0gQ$<`pY`WIbb;ZyL32C0* zTS0wrM`2Qd2GK7Q1Hgu&`L`a3FGEFzsPdhNgs()(zYT!yD>+#a2Lu=&P@FNKS}UMx z#WW3`(cJTyy=TFE(60r)dffg2@QuC$#?E2_O?8?qjpz!%Z_An492kM%;QO1iLrTKu zT+`Qx(^vtnxn5WG0*nI%oydX?4hbH8JMa8UZagDJjXTsF-2d zH;^)F<~HU2pKB|FuFYKzxVEmwbWy1Xt6{&4!_1)R458!~-b#5@je6i|6rMh=3PEYp zS2nM;O1UGD-e{Aa6PQ}8T744RIS!7__NV~E4(Jd1DcKg)tE4GzP@|ms^$gg9Wrl)( z{-$-~tBj?U>qJa-4>8l%oZ$)GRkH+D!sNfdN9;GvbKUvD>2F1@%m-l4c=ahS3bOSb zFv#RHQ*aQC{|Tn#W`0^C_r+F;*SiAWuVMTg&BbW$_OaZdQRD*(7TP1X&AXo9jzIr6PEOBfyf!Cg>3#iARor-#Y_1L3PreWU z30SE-*)y!C-#zpTwF(#4>$%%jCpOpqN7>J~5dFPxltc7TzF&8|^=uu*-WuVVw?whd;zl@OW$)p`B|#Bls3cv@Hj#0TP{&a=O;#y^CcnMmok34tCT4?D z7^}+cnHHw=q-WQ=CIdIK2#FJ)H_)AsTzZ0ul}+(qLBtZ+9&HhRpkf-YzS2VjxI0rP z@3A6{xqXz&GGK(;uS-9Z3zLZ$-$CS+U@46P@M(x7*#aJJW{V;jS2u(*_S#5kcu-c3bXc{Vp-6 z^Id%gFpuJ^vNJ6Bi9;S2Lp-3CY54u_QX1~Q12%cGm>M{BAit|H{F61(>qq2A4`n7| za-d?#zjBy%o0I-BOXqwF6jQmrv%iiDiTPh^1I1LwMSHm~R=dsbtT0v)Z~r}mz5O^-&ZXv1*L(~%)grc<+WMK6)ITYqD7dF#HrX}fET^l7ng zQC|^pe;$oxEOhSRn2CA3f>}Dl76QAjm|+z-?T8bwe1Csdx1Giw3Y)`hx+mdHW`0vB zTc^?8#bJCtT8qOb|MaKWCCf@+*XG`7L5eMwH>@wSF8U=Igd?W5T#*#=UFc&S1u>_R zukAGl_iDW$<_M~ix%QGe+xscqQMCd1>I%@Qwe-rEO7sXVMWYa7w1Z=uwLw-!jTB()sNctL3 z@2&s?u3fk1$;TlJJ$c(aOH0mblMN?%h&LN%0_8Jwi7r3AFff6Pkx<619x5_CT@-Jq z5CTICq9`meedyI$+4aO{IIZ@~DM6IOlcspF3M-y8QNy z`WP_e-HA88X_+by>{sR7;C`hC>{n`pz<$N66$ymFeeV9)o=Mf;nwf8_*FCs9vp7)= z6o_n;GmBW;OQK{f@tUuXRs~WAmy;%ghKDdtgMhEWJ!Hbv-~p*s2oo6NG%f9b=#|_E z)){e%&{X}079KRnNx7x6fQ1GLxEYm!JC>3i@pquq_?O$R0vp!1v0k5iq=29bL^#k-t+1gKa1BN|bai>XXF#I9R{-ENJ*f=jr3Fpm~ctQNB+? z=B&pvuF!vEHk33;qS{~3^@Rw676 zeO$|LtLB_Hdv_3*DKuUW7F3p6sr6|w zV`jjX_P^zfmi^^U0xGBMf6EaYBm6x%zN~p*K^3h8e|XzpY-Z9+R%TYl-(NsBFrO@M z1kLj4YJ<0zqv&%`jo{zMz`klDf=X{6TK{|n>Ys_iGf;knBmI^ZnmakteJspK5RX6d z4Y+ijA+8WxK!iE+0?A*1p`%4ho1jNCnWO=Ujo=kGjg=t>XQA8wV_lk{b!q&wu8dL? z+6{qE@Si%6OWXvLzm#kQX(!9;nO8;wqA`EJjFuz*6`J6po}-xBu$Q{!eYqNV^V)iH z8Z3({pd}DsS?3I*V49aAuPv!8{9rbg`G)5gn6`Yx1~VH%j}V%y6cr#FRAz!^D8bn6 zum{4{G}EeJ+Tzv@eKuNi!ybs8U7(69R)35K4KrQzLY`AUA%^gOQr4;zB(qT~1|#AS zU@9~>Or7j7q0ajHJv#+58@flFgF)&-I>eaQCTA79-a2_hK)?szD4{o@JaY#vL_TIu7qvAgMMA~pI@(%*X^E9AyAUu3g_l7 z;SiZ9-wXnwnTtsj5zLLZO8G%Wp*AFulI`x5V(44NDP3IfW-AW>VTb7#!Bj<79feS( z>l6v7x3H%6>XA8Jm17~BPaNE{Q`srJjDX+@)U~BrUFGL-3XHeJg;s}{fQU@nBm7kE7o^3=Tw=&$Dd`)#hy>IA;rt1IX&zO@mfMMQWP)un%6j4kn`s zwC@7BHH7Yh)p%DLiNg5rR4)cr=sTxLylOr|SMLdB4E+A?y%>F z{{h}?B~;St?E@iS7B|Gc6SaX2$_!r5xRLv5<=B zyLBKt{*5t>Aj5W&RRAQ%?WEPD0A_BeoI*?qBGO&VMC`upf0P~5!Hm;tn2M;dVJD-#eC^S5t)wPw8+aSd)HAawPgupb-Tc;-IAz_X_RX7wZ~ zTdW$9dF?9k+{2NxVPN1?ns4LFj*4cW9FLwJ2vGmXDeQkWF75Vf(+n&ta{c~x5qF`# zDFK@f#(wdn$9cq~n#tbMKjL5dvkT~;djkJG#Y3soMhHds*Rr;A1+duE68N)`@Xh+d z-m`ff`Xrw}a~xH|gp|afKQlgC`T`d~`L$Co22^b04(m_1aUM7Bi~+`%&fbH{L%%{U zkM9O<1o^(IgY(HgorgCJ;KhUp$HYA|zL+~-*oIEeLh9f2JUjlM=^4%Y14w;I*5M05 zPwzG5&8d*@$I>VMquF^cM6TV6RSb7Wy~-&ip6YJTe6H-VPn};l7uUQSfI}l~x7l8t zrxGu$XuE?dE37bd=Q)HsqDgx5@B7+&O2m@yewtCkb62oB|xZ z5z!lzP(#3k1Pzu*XxX1t*#4CP`(c}MV3PBy)O$5+5xjr?Vi-Gw>|2s?d3T0#9SVg(#u_3u@66y3g#OenVkh6Vd#i9)vh?%xdatSf;=qF z;-wH)Y0$`UaWMxisMNAMztAR!7n#A#CT9Lbloj_$u&7UTomLe)C>tW}1QaM2*2V^3veeAM?pE z*0sn_fcwx!H;H;#o?68h&4w{^lfFJBs>$Lkec=7-P12y*q)SlcVBB6)O7Gs46Ee%P zl88no9mcrekR6;eF5&yAj0jC0WvT_WWG=CT0SkV@$ilofc}~68efA8%YVba30-zom z4F#|oIw6xrrk6a*|FD0x7|DJ#}td zttH-Z7RJ}mBno3L>f;(!n{o_f*zQKq6oTB4Qjr7qMnRdLzJN8eh}o6ayM1#BnqOX2 zZY98Cpx%VA3iguv62Ujb7i7V_k&>sSDWSGh#*gyU+yvxR5o8VH#K_>3^lbfJC;?7a z7Q(972UAU(oY^;xJMlrum8cn0NcKz|RAUr{!>y$OceLS$E~=F#>0A&*WdcA{*7BGI zv4*0O(x9}YL6lIXW?1HC8;NeJLh%l_*slK}R14}+07B)@SOkKOoaVm2(-R|KwRVUF zS#Wch7AuhCd1y`p=4b~s$IZ}x=7?Ql7BrJ6kHU-z*kiHg^F)P5-t<4l-?-d(& znyuFX&A~hOP!1_5Qzjl%^IK?Sp=vLz)nc!v; zu;T(ll`u%Oq@*JU|y{d(uNl060L_hrtKH0d^!Hmx@v_FAL(H zS-@*sL(b9JQ7*E-X!l*Oq1oXfp1x(stYWi5x8Y4unoN&^(Ulscdk1SZA5^TzDQ+C3 zmba2w%vgciDV@SiW2Ub*!yUXUE&UUwrf{L-h=lARL#cgs-Lh+7^M^(KcPWH%8qPr@ zOKei81+|z%mZdvQ%Ez3JN2QW3{y(h4jMAt zYx`b2Cb}dH!v7qGpL(7=csaQm$;==}0BU%z57e-~I;f^A%Bx5uVF)%qbHa#^5@Zy* zz7kyAi5R6c;zm>mt&N{K1+0XP0yI0-8JUt5*03>lgY zg|q;COMH@?tditV0WS_k`7VGFYkn?t=&WbuJ2V-0S{$OY2As$R2$ihmz+U2=rWpcy z5bmpGnW`m)?)V7USItS61gq*yOpF{3+eTjo?TQnHC;Czg#)$`V|MS1NFN=Np`Aj{N=2ro2I$h}lzcHAbcuy^;-+-Y&KL%j zh_|)`Ok#nphaewcxx;8!BLoZK#*?KscyEQuFVs& zt7r)p(@d)zodb0Phq%_e!M2G4N_KEIxS9U!6@c6b+CaIXiG!ws;*G@4&B=+}d*fqa zWr6j7=JWq}Kp*O>1tgZmf*vfShbC5EP}3oDvQmmMYQKtU@;_ zAnMZb?$N*b+xNixzk9l!EA6$<|A-v%s&r61Dd*;REl#h+I6aaC%EBektjb!bZkFop zlcU`H|9leR;XE)I{bU+qwsO{IfU9_st|D)0ZvW5wZJz&bFfN z6qx@Ye&kk{+=Y9x{Ici}z))I&y7}*yx{|%Y#G~5y-5_M!PFf2h(EM5e0v*6*!G+af z^D}Fl6&9eRD6eWWK%wy}R*+FK+G*%aAe3_-`O#GQ8xfemTK(e1ah>?cqo@CN_qske z;_b)0ImDM5(5bzj-4$Dv{xVHx`8mI5*paioAku8-V7b>E%m)L>$~oMFXLC)J>4-pL zM`;%sEmoUNQx+8qECAS#dMn#p!~G~%2e9{S>TH*5X}1{!W7P4USSN{EGx44s`;|>Y z5CnHZ`V&&PYRV?OiDGY7Q`T~dsABjd(XCTja;8^5F>xc-=-b~P$CAV(N~z*M(!YC9 zNdGjQ#h5nht{fPckYez)shO`NRV7ZK0aN?K$XSb7#}&vBy(E~&KU%a2!c zJot?nnoJP+S-6*>RR#gS?MZ4aKy6;)!z)r-D)hpkNVw zKi{y5b%) z{*qwxA?h$KBC~eqtqohXYq6f!J+zMf8nUDl^gkVHJN|~*R-2t`{Cs9OnCoa8&@6=<@&eD7H81NGPVq3CJJN57D@Ic zbVAmqFvb$HSCnJyjeXx$!cmB z`@Qe$dtKlAdd7#42RID5<`98USIyArT*l=j%FD<6ox?Ed=j|k0s9ZeArB>GrD!>WW zwpJKHGV`ro2;Jv5w(EzLqDcE}v{dd-OB_|v5eX<<@eS}*TzZlcByl7hByp6bqA2C#y-F7zk#aQ>wT%oT1}IBSI)C%4S(J^vT z%&B@7z%_KeO$IjMqr)}boahBXV@5B=nt`hz7c!ZC=qjkDL03Ty1Y;vzRQP~FM7J>7 z`)h<$hb=LQM1x~Vb~@D`9jgWd}qL%CMmMX8|Ld7aWi^L*sbNs_IF4cim{ZP@0+hOO)W zHf%@7*v&tW2ji~Yy~4}UkPd!JV{Ts11X7bx#kZkMrAq!1dL+ahX%BS?*%2@fIBXV!!Z^v2%AbwIkxC7AwZIr zpUYw)ufAxKH@s$g(V(I&)TtkXWcn@2`GoNqVuS~@&i;& zxx5TgwU;!Sx5;x#icN|BN;yja#++2&zEW32BJ}8I29Cde`4aNsB=Wy}IElrFb8uCV zYD5dPvZu6qb@lAS7_>Y3sW70f23u6Z7TFr}+1wrqGH$19h_oVqoRR+q(VfyyQQL4o z1PD&iifVm2EuYfV{ouko=j;p!IoJ+Uihl=1ZP9&ToY!a>TVf%Y14w6eO=VBZpH;q` zLj_&``gRQbH$0-VnAytc7sDJm*b;`oek9=2zCiZK=STwC!%T02S>pPEaPzrC`Hi-` zOt)fq33Z+7t-i{A3moN>8|_K!b(owYMZ_4Qg6+x9I`Al|{20ERxP! znvCr&$B)51==)Aw%T3nt;E(9xz}cEnI{>R!@^S%0#{t^qQ46)y)UYj(7EX#A3{LRxG{((;9^<|3%Q;Z6CdD%8C{yP)m3UWm0*2f+4p09k z{{L?a=FgZbS3`O!3os(G(rJmav3Ecl;459?j1^dS@zNKTMBd&o z>=oc%6Zhq^08V7cYuj2KhhQwW0r}H zkL*e$riKjNlFR4k7*+Tw%qoSNfvJbFOXc3 ztX7h>a}};iTLi-1X$X5YvN!kQ1_`jcEBgmx+y7`TF=_;Xawwhw)vmG0ggo@SVnqf1XZ9Iv=}t z;L=*ZhHG2Mug$QuRj@xeEp9=$eC@w)rNDxbiT2*Ewb2MK$I@XkZIeR zjEby-j+ZHpZ2Ww{udD0$%zp0qS_l&zqTNH=c|Mrf1M&N_uXFgecVoXaMpF+ zQcI{^ih)s3b9(C*WmKeTU7)dl<}tyQzi z%bW95y`3SBs)~DofBoEivop33wY>gi{?kxj31(z+Eh;1AYJKq&RSquP(^6#I^0S$w zRV%5|^;j>&uvpGP(Uzc~ncrLp`Wbq^-}SEOh%Xqmo;*U;Yn&X_-eVrAcx(^$jrLi$ zvK}!tIk%>>qgd_}kp#6pxCz2pSupY@>XsCGYAceQ--HD3f_&LD8|oZ+_~%MGn~-b& z4l^_?EJT@u1N*dayJGJ1=UFli{@gp`MuFuW!Ou@wk2cVs&?$kjaTjDzEa9uYI=;2 zt5pYjM&^|V9PNJ9_;s_jLX^VdGfsqT=dEL+d?2#yM&?2O8EJc#FKAB^RK9dcR*s)z zGav6A-uYU4t>i;V?bWuDZE7P}m`l0u$EX)Wx2W4;yAK{sPVO>eh&PPBG$`znCS_`( zLhnyZ=^ncqRd;`AfPFkP`j}`?pv@2&(N-QXPF;w3dv|yG*BaVO^#_e>CpIKwi%Vl& zP|3Y>DnL{4TC)Pm^IZJWM?*sy1-HUT%pJEL;e$RsO}2ID-`!?Us%3sUei?TeO=sl0o$D|?;ye_Fp1|60ti(_ohE?vZG9MNKKwbfGsbs9S?#B^=~g^ooAG z65%g4&IpGzf-9mic>G54>r?STYg(;O?>SPp9zC4&AHRu@LQJN~D;qCeB9y$zBVjI! zGg@sHTdsgN0AJ}IZ+~7faP9m0QI$U=*zvCOqz7x?d^driYNu)9o96LzgY$*>D_gC_ z1(D1TRP}cEP`#m6vCxkmJJTzFpQEP(Y#1_w}T7 zRNZgioiZbud#>tvwGj8n5J?iz?BT<83mf@AlfX?|J0=y*f!)O=&?hlIoB!EDP_ zW~HxaoyD|tew1?ZUg^u(x19-K7M|eT;Qb?WFpCYOnk2zRB!M5Ll6=C@N=i0OKwK$B zor$ctn8oHXw1sGyB{(ca4*Ga<>QNr3%l)QyA+yr>TB@jN6((`MyaB!JWl;k!tLsr( z)R#D)-3`ByCoN5MLQRY!yDuWmGtcM9n`x3;4hc!Bl7x%k6hdwpnGTeXfXgw`k=Zy4roeddvEo$+lV2A1pcW zq8VACfqWJHzMQ7t6YK5Ri6y$V$P?ih6802oYLPz9n9Sb_eqa9a-9f%{Q^P;f5h$g- z-x=ZWll29(pJ8g>VL;aQC&8=@f=Ng|&1A2@+Q92RQXOp!BwU)fShzIhRs@eO@+8P| z>QGvgfRrSOC2;#c82ZVNK)(zmEnlgFQID>65gb0XqH%KGhAYIZWARtIfcXtWW-O|!Xx4*gFah~&e z&-3m-*u$D$6MBEwHBy8lJ%Ij$`MuCQYftv<;M|K%`2698iA~NI@i&S6H60sIBnl=D z4npfMqBO#bWGLf)z}&aGVsZ;5a{huP_cLadJ!;Kp*~5qu(G|JdYR&K#KCF%E9h@Hb zc^Z}4yEWLER6D+1mT`Y-FW6)imAAEj)mEC?yPx;__Sg3A!8<)Y*V)7n?R-4=uo z(=V2V@2=eV4X=H+Ki;jlUZ>w*y1NSezL-8gi@&d2%>JDXtB28A)4MI*=CL|o>$e*)}MHWwX0dWI9~HO%O^SYih*=_o&H|Rb~d-iocChWzI?_#*WJ#^ zpd;2~Zf1rkP6W0+Yrch6h*63ebB0~}M2gr##S5(~Pt=krywxd1k-CU{6Id-ImQAb+ z>P2#@(JV6##KrJf8@3FaH$3X%pT->>uCl{(+vf)B%`M=S?#8*L4RM96Nq)D?dZl4_ zc)Wa@w|q#ybA`Emds5wDbK}Ina(TOdbM+x$wo{{Z&##R!yn4#ZR8QOEVsB?;Fe99l zcOvUFG&@=P+akaeKn-fq@7L?0m2IcxyvchhZPi1Lo^G6UR%nSPhVGPX61(mfa;?9%v zs-gucX=x_|<82vPxS`U@Su!{A1c{*ma2wa38Ra(W6{OXD`z$`?RfPyr62;=_NCyPP z#)9meCvUpFWGo=RZ2M<%10NQ*MBg+lzP3Hzv|S&PUay|rNTxjw9+0Cr4%SN@Kd%$; zya{TyYHa!Or72+ip>T7PtDC^Z&isCcT9nQ2rjxb1r1@n8Z(d0;3Dyb0UdQ*tY`Yq@ zJ$hlN!fks!VlYZ7WiE|$=m-=B&PG(e$&qDNaT>xzI4NI7ZGtrUi9I7{fwKtsJ1VRR zuJqZfD0j?M9N5 zjH5IRLO$bHM=WW}Wdx^gzu)P?Ml2|wtDhEF_p!-(T&$QzU1HG?C*6JU|6U=gqBSgB zC_UvQwHtDh+jcuhspC37%D>w5l~=D}hHcdIH3^QK_nnkDVaVMF@#!!5HS#}U-Z)o9 z@|B`|Cv@@67toaY#Cx{+cx*m>6Z@i)O?y{K_;*+}-I{o@UD!@}hTV?_TtAy;?!~m| zyAL!aUoCdsX46I<71Ip8UA9%;Y8Ys}E*f@9@|o4h*k%3gUio+$cG2Cfq}RJAbN7lc ziKRZ>M?)iK_vc;j#o)ab=k3w;E&A1-rvtw=dFxu~*T`VU)FV&6Wu1^y#AI*f>(TAr zY>HHG?dxCL4A~icj~s;G@hi#)_iw8|d&F#g4o}>~@lpmALd=dST#k|YPdYEOwjiduo!iQPrf2F7nvn>BgaU2?&{gvVrX=WU?z~(DJ*-E;F z`=b0+;-|4jQq0w3$z;{=k#809G$(N%?28F9<4hJMH}i<`HCejM>0{J*k+C!%j%;;!$G0|AK|PKUoYQoi<){qO zXQt*TDR^U4rbCZ{$Rc+lG|K3^Q@76Rd%aQ% z{e?v?@I1_~m8|ThhDcO1HMr_4V7C2VF5BSL5vy7iK4CGc?5>YHA`Rz>qh(pi!`qsVp!I;-N2763Z9Y7Y56wysRP;MW1TH z$rs{)2K;S!kr%Xgg-c{!&4bF@Q03FVE326kr?L#CeaPxEmVdQwswg!puiok@;3=*f z_xnyzN73tAVD_5f?lyc{K5%+_>txJ)Kmu*8IN(c zL|ow#?men4Ew%04Hzv~hrd>8SL#6i#N6nXi9aeFbGh}*jpgx7|NYKrtAlE}<_2{iC z_2s8u7StM-BlU?GvEk(2%ks;DYNgnER(_5>C*$WUziu|KniAKnf4j~wTt0qudvzDL z(>r0r>J*eWyfR?RJu%l&6NoZ@kv>SKMcOzqCsyk`W2LTSiMni7mD->DnHv=$$cW_G z;kVe(-s5-r&r7f!iyy`y_c|!(vu8dyxo?+olM?HBT3wT00!!BQM1m=Dsxo_hrR}{k zQ^-thwkb?|v@BETL}Ru|d)vF??pHT*N@H9d`evCil6$f-@UR_kvSP&dWMrVW3$b79 zNXtMi=RO!`m(wv%j6?8uDCW~tQ%nzrg+(c*w0IjPONkXrP)w`nG8PLD+xg8~d)!uY zEF}samdl!5^YvJwKa9VfHIX6PSUSi?wkFfW3`4`h3d44kIdL?mr9lhIB{8pJHU4{E zUGm1vn1~4LB%;|i#)63O2yu6&rOSfG)D)<2rV^wdrb3I>Key>ClLpNM7MX%6$dU$6 z_!gPGZ&M&k8xzFT7)J8X43s1(N0lHzL+TBc#3;vo_N~+RVSyx80qL_rQ4JrDVDF|| zpWnU}JVys*Kf+@j8=mlcO|5QwHruy+Uy~c%#8l{P*0lHGP955)RYC+ zNEMAKOdip-F)@@=1VvNDS=dqEiRgQj|5SV$<|Fk1$z%%TVkQ9!{<6dRmueUauCVo1)zT9jflh5lMKJ`h*u+?+s z3BSpiVs~JRW-?+~-?q|v_cTA|i@}ucYah&FeY{V5SDYRpQU>iEDr-&D<=@-f2|hg? z?w!W)Xj`WHUiEqRW;6C>Y2MnVd*#U|o3%*HY0KRKk)_%JSAo0x@ePW@)Sjf=Pao2o zmQT9(zgALs=~xH67)e7udGQiSDY#DQ8DY@=&~q3&mS~!CQBNNv9GUzt3pp;Vu`_88 zVUe@o#jN5eZ^WY&`qJ*aKCu2goZ*iC*dT%%`dwK`2EkYV8M`!JNsPFhz;K5s49eu^ z*oRavFwoE#!oc!*Wf`wfK8$hEFKI>#Y2bQ@+%Z8VBl+H}kt_PSHflhMR*MK6GTp=* z8F#M_i^M0-qEK@#P9rn-eb|?DamDCTnChs5z&%O_hoJ-zXi<( zT3~s>Nq_9~^<9x3?W3xRif1OHrQ9*yaT@oA`PuS-7EVcmar=JkT$0kD4grCu*wY08 zM>^jx-qD5FgGQf7hMPTPKhqc(k*dRaWzS_?-ctI0)Rcayr89%!X!5cw+1aI}1J6bM!1=NWa>GEwk!bqmr7mWesx8=hCB({kW&YC>QLpXzUzkV+xZ5a^$p(#{y!12tM#M5 zKPSp6q*HZn4-0%0(OhO2BjqIZf}qk>r~LLywPjF;TD#mGr>i6p8p~-WwukY0w(pOu z{0^1#ZpLTk?0l2RQkD&4IW)yytck74HapIv$H)5bOGu+<{L+b$#L=p|=2(f6eNV6= zuj)C7;Ia z($|8mdNRu}QBOe4KPaU)$(|^}}xRuh7dR)Xur2Dg*rbZX?Lv=o!spyJ=idj6UsrFKRD4c7<|Jmfc1vcS zNo_9o9*S#ee8;gR-)71w62M99YZ@ci7qWcR{S zuQD$8X#hHjnkBcT_>8+<^T(>EIlLVsh#jj4Y}a;=Hq7n@84 zZU`LJCUvlopUr9Y)DnjA4$QjAUo}zId~fRrsq*n$I(UuwdY-L!E37#(0qtGm+THm1 z8S(52pXDHnI*AI(1o0&?Tr-{-zt+=u7`eQ!={e8igcem%xHZ`2K=R>y4&F}>@>>yg zw29E4uHnA)es5V3Qm}j*iOdXNoEv_YM`_nZ;})g$;TU=GW}*8zu6QLOtQ=M+WMqbn zc3(iH+$}bQ6h?#R93ugtG-1B{kGn$*KZnu;

N@_Z&T>-dQcs`h?hL`dOtmgX3N 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 D79<|v literal 0 HcmV?d00001 diff --git a/crates/shacraft-content/examples/catalog_report.rs b/crates/shacraft-content/examples/catalog_report.rs new file mode 100644 index 0000000..e290bfe --- /dev/null +++ b/crates/shacraft-content/examples/catalog_report.rs @@ -0,0 +1,16 @@ +use shacraft_content::Catalog; +fn main() -> anyhow::Result<()> { + let c = Catalog::load_builtin()?; + println!("{}", serde_json::to_string_pretty(&c.summary())?); + let mut approximate = std::collections::BTreeMap::::new(); + for state in &c.states { + if state.coverage.render == "authored-approximate" { + *approximate.entry(state.family.clone()).or_default() += 1; + } + } + eprintln!( + "Approximate render families: {}", + serde_json::to_string(&approximate)? + ); + Ok(()) +} diff --git a/crates/shacraft-content/src/lib.rs b/crates/shacraft-content/src/lib.rs new file mode 100644 index 0000000..cd7278f --- /dev/null +++ b/crates/shacraft-content/src/lib.rs @@ -0,0 +1,565 @@ +//! Independent factual content catalog and authored render templates. +//! +//! Minecraft IDs are provenance, never Shacraft runtime BlockIds. Collision +//! measurements use an explicitly documented world/entity context; they do not +//! claim to reproduce entity-dependent or block-entity-dependent behavior. +use anyhow::{Context, Result, bail, ensure}; +use flate2::read::GzDecoder; +use serde::{Deserialize, Serialize}; +use serde_json::{Value, json}; +use std::collections::{BTreeMap, HashMap}; +use std::io::Read; + +mod packages; +mod shapes; +pub use packages::*; + +pub const MINECRAFT_VERSION: &str = "26.2"; +pub const DATA_VERSION: i32 = 4903; + +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)] +pub struct Aabb { + pub min: [f32; 3], + pub max: [f32; 3], +} +impl Aabb { + pub const fn new(min: [f32; 3], max: [f32; 3]) -> Self { + Self { min, max } + } + pub fn volume(&self) -> f32 { + (0..3).map(|i| self.max[i] - self.min[i]).product() + } + pub fn valid(&self) -> bool { + (0..3).all(|i| { + self.min[i].is_finite() && self.max[i].is_finite() && self.max[i] > self.min[i] + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Coverage { + pub identity: String, + pub render: String, + pub collision: String, + pub behavior: String, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct StateDefinition { + pub state: String, + /// Target Java numerical state ID, unrelated to the persistent runtime registry. + pub minecraft_id: u32, + pub color: [u8; 3], + pub opacity: f32, + pub collision: Vec, + pub render: Vec, + pub coverage: Coverage, + pub family: String, + pub light: u8, + pub hardness: f32, +} +impl StateDefinition { + pub fn solid(&self) -> bool { + !self.collision.is_empty() + } +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BlockDefinition { + pub name: String, + pub default_state: String, + pub properties: BTreeMap>, + pub family: String, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BlockSample { + pub state: String, + pub position: [i32; 3], + pub family: String, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct EntityDefinition { + pub name: String, + pub width: f32, + pub height: f32, + pub color: [u8; 3], + /// Authored boxes in entity-local coordinates, relative to the feet. + pub render: Vec, + /// Default physical dimensions, registry flags, attributes, and model family. + /// Instance properties and unknown NBT belong to the entity persistence layer. + pub properties: BTreeMap, + pub coverage: Coverage, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Catalog { + pub version: String, + pub data_version: i32, + pub blocks: Vec, + pub states: Vec, + pub entities: Vec, + #[serde(skip)] + state_index: HashMap, + #[serde(skip)] + entity_index: HashMap, +} +#[derive(Deserialize)] +struct RawCatalog { + version: String, + data_version: i32, + blocks: Vec, + states: Vec, + shapes: Vec>, + entities: BTreeMap>, +} +#[derive(Deserialize)] +struct RawState { + state: String, + minecraft_id: u32, + block: usize, + shape: usize, + context: bool, + light: u8, + hardness: f32, +} + +fn decompress(bytes: &[u8]) -> Result> { + let mut out = Vec::new(); + GzDecoder::new(bytes) + .take(32 * 1024 * 1024) + .read_to_end(&mut out)?; + ensure!( + out.len() < 32 * 1024 * 1024, + "catalog exceeds maximum decompressed size" + ); + Ok(out) +} +impl Catalog { + pub fn load_builtin() -> Result { + let raw: RawCatalog = + serde_json::from_slice(&decompress(include_bytes!("../data/catalog.json.gz"))?)?; + ensure!( + raw.version == MINECRAFT_VERSION && raw.data_version == DATA_VERSION, + "unexpected built-in catalog version" + ); + let mut states = Vec::with_capacity(raw.states.len() + 1); + for s in raw.states { + let block = raw.blocks.get(s.block).context("invalid block index")?; + let collision = raw + .shapes + .get(s.shape) + .context("invalid shape index")? + .iter() + .map(|b| Aabb::new([b[0], b[1], b[2]], [b[3], b[4], b[5]])) + .collect::>(); + let (render, render_coverage) = + shapes::block_render(&s.state, &block.family, &collision); + let contextual = s.context + || matches!( + block.family.as_str(), + "powder_snow" | "shulker_box" | "moving_piston" | "big_dripleaf" + ); + states.push(StateDefinition { + color: shapes::color(&block.name), + opacity: shapes::opacity(&block.name), + state: s.state, + minecraft_id: s.minecraft_id, + collision, + render, + coverage: Coverage { + identity: "official-report-exact".into(), + render: render_coverage.into(), + collision: if contextual { + "approximate-context" + } else { + "measured-empty-context" + } + .into(), + behavior: "storage-and-physics".into(), + }, + family: block.family.clone(), + light: s.light, + hardness: s.hardness, + }); + } + let mut entities = Vec::new(); + for (name, mut properties) in raw.entities { + let width = properties + .get("width") + .and_then(Value::as_f64) + .context("entity width missing")? as f32; + let height = properties + .get("height") + .and_then(Value::as_f64) + .context("entity height missing")? as f32; + let (render, family) = shapes::entity_render(&name, width, height); + properties.insert("model_family".into(), json!(family)); + entities.push(EntityDefinition { + name: name.clone(), + width, + height, + color: shapes::entity_color(&name), + render, + properties, + coverage: Coverage { + identity: "official-report-exact".into(), + render: if family == "invisible" { + "intentionally-invisible" + } else { + "authored-procedural" + } + .into(), + collision: "measured-default-dimensions".into(), + behavior: "persistent-instance-no-vanilla-ai".into(), + }, + }); + } + let mut result = Self { + version: raw.version, + data_version: raw.data_version, + blocks: raw.blocks, + states, + entities, + state_index: HashMap::new(), + entity_index: HashMap::new(), + }; + result.add_trampoline(); + result.rebuild_indexes()?; + Ok(result) + } + pub fn rebuild_indexes(&mut self) -> Result<()> { + self.state_index.clear(); + self.entity_index.clear(); + for (i, s) in self.states.iter().enumerate() { + ensure!( + self.state_index.insert(s.state.clone(), i).is_none(), + "duplicate canonical state {}", + s.state + ); + ensure!( + s.collision.iter().chain(s.render.iter()).all(Aabb::valid), + "invalid geometry for {}", + s.state + ); + } + for (i, e) in self.entities.iter().enumerate() { + ensure!( + self.entity_index.insert(e.name.clone(), i).is_none(), + "duplicate entity {}", + e.name + ); + ensure!( + e.render.iter().all(Aabb::valid), + "invalid entity model {}", + e.name + ); + } + Ok(()) + } + pub fn state(&self, canonical: &str) -> Option<&StateDefinition> { + self.state_index + .get(canonical) + .map(|i| &self.states[*i]) + .or_else(|| { + self.blocks + .iter() + .find(|b| b.name == canonical) + .and_then(|b| self.state_index.get(&b.default_state)) + .map(|i| &self.states[*i]) + }) + } + pub fn entity(&self, name: &str) -> Option<&EntityDefinition> { + self.entity_index.get(name).map(|i| &self.entities[*i]) + } + pub fn default_state(&self, name: &str) -> Option<&str> { + self.blocks + .iter() + .find(|b| b.name == name) + .map(|b| b.default_state.as_str()) + } + pub fn palette(&self) -> BTreeMap { + [ + ("grass", "minecraft:grass_block"), + ("stone", "minecraft:stone"), + ("snow", "minecraft:snow_block"), + ("glass", "minecraft:glass"), + ("wood", "minecraft:oak_planks"), + ("stairs", "minecraft:oak_stairs"), + ("slab", "minecraft:oak_slab"), + ("fence", "minecraft:oak_fence"), + ("water", "minecraft:water"), + ("sand", "minecraft:sand"), + ("light", "minecraft:sea_lantern"), + ("trampoline", "shacraft:trampoline"), + ] + .into_iter() + .filter_map(|(key, name)| { + self.default_state(name) + .map(|s| (key.to_owned(), s.to_owned())) + }) + .collect() + } + /// One default state per block, in an original 32-column inspection garden. + /// The floor is caller-owned; every sample is one cell above it. + pub fn sampler(&self) -> Vec { + self.blocks + .iter() + .enumerate() + .map(|(i, b)| BlockSample { + state: b.default_state.clone(), + family: b.family.clone(), + position: [-48 + (i % 32) as i32 * 3, 1, -57 + (i / 32) as i32 * 3], + }) + .collect() + } + pub fn summary(&self) -> Value { + let mut render = BTreeMap::<&str, usize>::new(); + let mut collision = BTreeMap::<&str, usize>::new(); + for s in &self.states { + *render.entry(&s.coverage.render).or_default() += 1; + *collision.entry(&s.coverage.collision).or_default() += 1; + } + json!({"minecraft_version":self.version,"data_version":self.data_version, + "minecraft_blocks":self.blocks.iter().filter(|b|b.name.starts_with("minecraft:")).count(), + "minecraft_states":self.states.iter().filter(|s|s.state.starts_with("minecraft:")).count(), + "entities":self.entities.len(),"total_states":self.states.len(),"render":render,"collision":collision, + "palette":self.palette(),"collision_context":"BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "simulation":"server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented"}) + } + fn add_trampoline(&mut self) { + self.blocks.push(BlockDefinition { + name: "shacraft:trampoline".into(), + default_state: "shacraft:trampoline".into(), + properties: BTreeMap::new(), + family: "trampoline".into(), + }); + self.states.push(StateDefinition { + state: "shacraft:trampoline".into(), + minecraft_id: u32::MAX, + color: [97, 205, 151], + opacity: 1., + collision: vec![Aabb::new([0., 0., 0.], [1., 1., 1.])], + render: vec![ + Aabb::new([0., 0., 0.], [1., 0.18, 1.]), + Aabb::new([0.05, 0.18, 0.05], [0.95, 0.86, 0.95]), + Aabb::new([0., 0.86, 0.], [1., 1., 1.]), + ], + coverage: Coverage { + identity: "authored-package".into(), + render: "authored-procedural".into(), + collision: "authored-exact".into(), + behavior: "wasm-on-jump".into(), + }, + family: "trampoline".into(), + light: 0, + hardness: 1., + }); + } +} + +/// Canonicalize registry state keys without discarding unknown properties. +pub fn canonical_state(name: &str, properties: &BTreeMap) -> Result { + ensure!( + !name.is_empty() + && name.is_ascii() + && name.contains(':') + && !name + .bytes() + .any(|b| b.is_ascii_whitespace() || b"[]=,".contains(&b)), + "invalid resource name" + ); + for (k, v) in properties { + if k.is_empty() + || v.is_empty() + || !k.is_ascii() + || !v.is_ascii() + || k.bytes() + .chain(v.bytes()) + .any(|b| b.is_ascii_whitespace() || b"[]=,:".contains(&b)) + { + bail!("invalid property"); + } + } + let result = if properties.is_empty() { + name.to_owned() + } else { + format!( + "{}[{}]", + name, + properties + .iter() + .map(|(k, v)| format!("{k}={v}")) + .collect::>() + .join(",") + ) + }; + ensure!(result.len() <= 512, "canonical state too long"); + Ok(result) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::collections::HashSet; + use std::sync::OnceLock; + fn catalog() -> &'static Catalog { + static C: OnceLock = OnceLock::new(); + C.get_or_init(|| Catalog::load_builtin().unwrap()) + } + #[test] + fn complete_against_independent_official_report_projection() { + let c = catalog(); + let report: Value = serde_json::from_slice( + &decompress(include_bytes!("../data/report-identities.json.gz")).unwrap(), + ) + .unwrap(); + let blocks = report["blocks"].as_object().unwrap(); + assert_eq!(blocks.len(), 1196); + assert_eq!(c.data_version, 4903); + let mut actual = HashMap::new(); + for s in &c.states { + if s.state.starts_with("minecraft:") { + actual.insert(s.state.clone(), s.minecraft_id); + } + } + let mut expected = HashMap::new(); + for (name, b) in blocks { + let def = c.blocks.iter().find(|b| &b.name == name).unwrap(); + assert_eq!( + serde_json::to_value(&def.properties).unwrap(), + b["properties"] + ); + for state in b["states"].as_array().unwrap() { + let props = + serde_json::from_value(state.get("properties").cloned().unwrap_or(json!({}))) + .unwrap(); + let name = canonical_state(name, &props).unwrap(); + expected.insert(name.clone(), state["id"].as_u64().unwrap() as u32); + if state.get("default") == Some(&json!(true)) { + assert_eq!(def.default_state, name); + } + } + } + assert_eq!(actual.len(), 32366); + assert_eq!(actual, expected); + assert_eq!( + c.entities + .iter() + .map(|e| e.name.clone()) + .collect::>(), + report["entities"] + .as_array() + .unwrap() + .iter() + .map(|s| s.as_str().unwrap().to_owned()) + .collect() + ); + assert!(c.state("minecraft:potent_sulfur").is_some()); + assert!(c.entity("minecraft:sulfur_cube").is_some()); + } + #[test] + fn every_state_has_valid_shapes_and_explicit_coverage() { + for s in &catalog().states { + assert!(!s.coverage.render.is_empty()); + assert!(!s.coverage.collision.is_empty()); + for b in s.collision.iter().chain(&s.render) { + assert!(b.valid(), "{} {b:?}", s.state); + assert!( + b.min.iter().chain(&b.max).all(|v| (-2.0..=3.0).contains(v)), + "{} {b:?}", + s.state + ); + } + if s.family != "air" + && !matches!( + s.family.as_str(), + "light" | "structure_void" | "barrier" | "moving_piston" + ) + { + assert!(!s.render.is_empty(), "missing {}", s.state); + } + } + } + #[test] + fn official_entity_dimensions_and_authored_models_present() { + assert_eq!(catalog().entities.len(), 158); + for e in &catalog().entities { + assert!(e.width >= 0. && e.height >= 0.); + assert!(e.properties.contains_key("attributes")); + if e.properties["model_family"] != "invisible" { + assert!(!e.render.is_empty()); + } + } + assert_eq!(catalog().entity("minecraft:player").unwrap().width, 0.6); + assert_eq!( + catalog().entity("minecraft:cow").unwrap().properties["model_family"], + "quadruped" + ); + } + #[test] + fn sampler_defaults_and_palette_are_registered() { + let c = catalog(); + let samples = c.sampler(); + assert_eq!(samples.len(), 1197); + let positions = samples.iter().map(|s| s.position).collect::>(); + assert_eq!(positions.len(), samples.len()); + for sample in samples { + assert!(c.state(&sample.state).is_some()); + assert!(sample.position[0].abs() <= 64 && sample.position[2].abs() <= 64); + } + for state in c.palette().values() { + assert!(c.state(state).is_some()); + } + } + #[test] + fn key_collision_states_and_orientation() { + let c = catalog(); + let bottom = c + .state("minecraft:oak_slab[type=bottom,waterlogged=false]") + .unwrap(); + let top = c + .state("minecraft:oak_slab[type=top,waterlogged=false]") + .unwrap(); + assert_eq!(bottom.collision[0], Aabb::new([0., 0., 0.], [1., 0.5, 1.])); + assert_eq!(top.collision[0].min[1], 0.5); + for half in ["bottom", "top"] { + for facing in ["north", "south", "east", "west"] { + let s=c.state(&format!("minecraft:oak_stairs[facing={facing},half={half},shape=straight,waterlogged=false]")).unwrap(); + assert!((s.collision.iter().map(Aabb::volume).sum::() - 0.75).abs() < 0.0001); + } + } + let door = c + .state( + "minecraft:oak_door[facing=north,half=lower,hinge=left,open=false,powered=false]", + ) + .unwrap(); + let open = c + .state("minecraft:oak_door[facing=north,half=lower,hinge=left,open=true,powered=false]") + .unwrap(); + assert_ne!(door.collision, open.collision); + assert!( + c.state("minecraft:water[level=0]") + .unwrap() + .collision + .is_empty() + ); + assert!( + c.state("minecraft:oak_fence") + .unwrap() + .collision + .iter() + .any(|b| b.max[1] == 1.5) + ); + assert!( + c.state("minecraft:scaffolding") + .unwrap() + .coverage + .collision + .contains("approximate") + ); + assert!( + c.state("minecraft:powder_snow") + .unwrap() + .coverage + .collision + .contains("approximate") + ); + } +} diff --git a/crates/shacraft-content/src/packages.rs b/crates/shacraft-content/src/packages.rs new file mode 100644 index 0000000..20f06ea --- /dev/null +++ b/crates/shacraft-content/src/packages.rs @@ -0,0 +1,365 @@ +//! Unified packages: verified resources with an explicit public/server boundary. +use anyhow::{Context, Result, bail, ensure}; +use serde::{Deserialize, Serialize}; +use serde_json::{Value, json}; +use sha2::{Digest, Sha256}; +use std::collections::{BTreeMap, HashSet}; +use std::path::{Component, Path, PathBuf}; + +pub const MAX_RESOURCE_BYTES: u64 = 16 * 1024 * 1024; +pub const MAX_PACKAGE_BYTES: u64 = 64 * 1024 * 1024; +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct PackageDependency { + pub id: String, + pub version: String, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct PackageResource { + pub path: String, + pub scope: String, + pub role: String, + pub sha256: String, + pub size: u64, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct PackageManifest { + pub schema: u32, + pub id: String, + pub version: String, + pub license: String, + pub dependencies: Vec, + pub capabilities: Vec, + pub resources: Vec, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Package { + pub directory: PathBuf, + pub manifest: PackageManifest, +} +fn token(s: &str) -> bool { + !s.is_empty() + && s.len() <= 128 + && s.bytes() + .all(|b| b.is_ascii_alphanumeric() || b"._-".contains(&b)) +} +fn version(s: &str) -> bool { + let p = s.split('.').collect::>(); + p.len() == 3 + && p.iter().all(|s| { + !s.is_empty() + && s.len() <= 5 + && (s.len() == 1 || !s.starts_with('0')) + && s.bytes().all(|b| b.is_ascii_digit()) + }) +} +fn safe_path(s: &str) -> bool { + !s.is_empty() + && s.len() <= 256 + && s.is_ascii() + && !s.contains('\\') + && !s.contains(':') + && !s.contains('%') + && !s.bytes().any(|b| b.is_ascii_control()) + && !Path::new(s).is_absolute() + && Path::new(s) + .components() + .all(|c| matches!(c, Component::Normal(_))) + && s.split('/').all(|s| !s.is_empty() && s != "." && s != "..") +} +impl PackageManifest { + pub fn validate(&self) -> Result<()> { + ensure!(self.schema == 1, "unsupported package schema"); + ensure!(token(&self.id), "invalid package id"); + ensure!(version(&self.version), "invalid exact semantic version"); + ensure!( + !self.license.is_empty() + && self.license.len() <= 256 + && !self.license.chars().any(char::is_control), + "license required" + ); + ensure!( + self.resources.len() <= 128 && !self.resources.is_empty(), + "invalid package resource count" + ); + ensure!( + self.dependencies.len() <= 32 && self.capabilities.len() <= 32, + "too many dependencies or capabilities" + ); + let mut paths = HashSet::new(); + let mut total = 0u64; + for r in &self.resources { + ensure!(safe_path(&r.path), "unsafe resource path {}", r.path); + ensure!(paths.insert(&r.path), "duplicate resource path"); + ensure!( + matches!(r.scope.as_str(), "client" | "common" | "server"), + "invalid resource scope" + ); + ensure!(token(&r.role), "invalid resource role"); + ensure!( + r.sha256.len() == 64 + && r.sha256 + .bytes() + .all(|b| b.is_ascii_hexdigit() && !b.is_ascii_uppercase()), + "invalid SHA-256" + ); + ensure!(r.size <= MAX_RESOURCE_BYTES, "resource too large"); + total = total.checked_add(r.size).context("package size overflow")?; + if r.role == "wasm-on-jump" { + ensure!( + r.scope == "server" && r.path.ends_with(".wasm"), + "executable jump hook must be server-only WASM" + ); + } + } + ensure!( + total <= MAX_PACKAGE_BYTES, + "package exceeds total size limit" + ); + let mut deps = HashSet::new(); + for d in &self.dependencies { + ensure!( + token(&d.id) && version(&d.version) && d.id != self.id && deps.insert(&d.id), + "invalid or duplicate dependency" + ); + } + for c in &self.capabilities { + ensure!( + matches!( + c.as_str(), + "blocks.define" + | "entities.define" + | "client.texture" + | "client.shader" + | "client.sound" + | "client.style" + | "server.on_jump" + ), + "unsupported capability {c}" + ); + } + ensure!( + self.resources.iter().all(|r| r.role != "wasm-on-jump" + || self.capabilities.iter().any(|c| c == "server.on_jump")), + "WASM hook capability missing" + ); + Ok(()) + } + /// Clients never receive server resource names, contents, sizes, or hashes. + pub fn client_manifest(&self) -> Value { + json!({"schema":self.schema,"id":self.id,"version":self.version,"license":self.license, + "dependencies":self.dependencies,"capabilities":self.capabilities.iter().filter(|s|!s.starts_with("server.")).collect::>(), + "resources":self.resources.iter().filter(|r|r.scope!="server").collect::>()}) + } +} +impl Package { + pub fn load(directory: impl AsRef) -> Result { + let dir = directory.as_ref(); + ensure!( + !dir.symlink_metadata()?.file_type().is_symlink(), + "package directory is a symlink" + ); + let directory = dir.canonicalize()?; + let path = directory.join("manifest.json"); + ensure!( + !path.symlink_metadata()?.file_type().is_symlink(), + "package manifest is a symlink" + ); + ensure!(path.metadata()?.len() <= 256 * 1024, "manifest too large"); + let manifest: PackageManifest = serde_json::from_slice(&std::fs::read(path)?)?; + manifest.validate()?; + let package = Self { + directory, + manifest, + }; + for r in &package.manifest.resources { + package.read_resource(&r.path)?; + } + Ok(package) + } + /// Re-verifies the resource at read time to reject replacement after loading. + pub fn read_resource(&self, path: &str) -> Result> { + let resource = self + .manifest + .resources + .iter() + .find(|r| r.path == path) + .context("resource is not declared")?; + ensure!(safe_path(path), "unsafe resource path"); + let mut real = self.directory.clone(); + for part in Path::new(path).components() { + real.push(part); + ensure!( + !real.symlink_metadata()?.file_type().is_symlink(), + "resource paths may not contain symlinks" + ); + } + let file = std::fs::File::open(&real)?; + ensure!( + file.metadata()?.is_file() + && file.metadata()?.len() == resource.size + && resource.size <= MAX_RESOURCE_BYTES, + "resource size mismatch" + ); + use std::io::Read; + let mut bytes = Vec::new(); + file.take(MAX_RESOURCE_BYTES + 1).read_to_end(&mut bytes)?; + ensure!( + bytes.len() as u64 == resource.size, + "resource changed while reading" + ); + ensure!( + format!("{:x}", Sha256::digest(&bytes)) == resource.sha256, + "resource hash mismatch: {path}" + ); + Ok(bytes) + } + pub fn public_resource(&self, path: &str) -> Result> { + ensure!( + self.manifest + .resources + .iter() + .any(|r| r.path == path && r.scope != "server"), + "resource is not public" + ); + self.read_resource(path) + } +} +/// Load and verify the entire dependency graph. Missing or incompatible required +/// packages and cycles fail before the server exposes any package to clients. +pub fn load_packages(root: impl AsRef) -> Result> { + let mut dirs = std::fs::read_dir(root)? + .map(|e| e.map(|e| e.path())) + .collect::>>()?; + dirs.sort(); + ensure!(dirs.len() <= 128, "too many package entries"); + let mut out = Vec::new(); + let mut ids = BTreeMap::new(); + for path in dirs { + if path.is_dir() && path.join("manifest.json").exists() { + let p = Package::load(path)?; + ensure!( + ids.insert(p.manifest.id.clone(), out.len()).is_none(), + "duplicate package id" + ); + out.push(p); + } + } + for p in &out { + for d in &p.manifest.dependencies { + let i = *ids + .get(&d.id) + .with_context(|| format!("missing required package {}", d.id))?; + ensure!( + out[i].manifest.version == d.version, + "dependency version mismatch for {}", + d.id + ); + } + } + fn visit( + i: usize, + p: &[Package], + ids: &BTreeMap, + visiting: &mut HashSet, + done: &mut HashSet, + ) -> Result<()> { + if done.contains(&i) { + return Ok(()); + } + if !visiting.insert(i) { + bail!("package dependency cycle") + } + for d in &p[i].manifest.dependencies { + visit(ids[&d.id], p, ids, visiting, done)?; + } + visiting.remove(&i); + done.insert(i); + Ok(()) + } + let mut done = HashSet::new(); + for i in 0..out.len() { + visit(i, &out, &ids, &mut HashSet::new(), &mut done)?; + } + Ok(out) +} + +#[cfg(test)] +mod tests { + use super::*; + fn package_root() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../../packages") + } + #[test] + fn bundled_packages_hashes_dependencies_and_privacy() { + let p = load_packages(package_root()).unwrap(); + assert_eq!(p.len(), 2); + let t = p + .iter() + .find(|p| p.manifest.id == "shacraft.trampoline") + .unwrap(); + assert!( + t.read_resource("server/trampoline.wasm") + .unwrap() + .starts_with(b"\0asm") + ); + assert!(t.public_resource("server/trampoline.wasm").is_err()); + let public = t.manifest.client_manifest().to_string(); + assert!(!public.contains("server/")); + assert!(!public.contains("server.on_jump")); + } + #[test] + fn paths_sizes_and_versions_are_validated() { + let p = load_packages(package_root()).unwrap(); + for path in [ + "../secret", + "/etc/passwd", + "client/../../secret", + "client\\secret", + "client//file", + "client/./file", + "client/%2e%2e/key", + ] { + let mut m = p[0].manifest.clone(); + m.resources[0].path = path.into(); + assert!(m.validate().is_err(), "{path}"); + } + let mut m = p[0].manifest.clone(); + m.resources[0].size = MAX_RESOURCE_BYTES + 1; + assert!(m.validate().is_err()); + m = p[0].manifest.clone(); + m.version = "latest".into(); + assert!(m.validate().is_err()); + } + #[test] + fn changed_resource_rejected() { + let dir = tempfile::tempdir().unwrap(); + let bytes = b"own content"; + std::fs::write(dir.path().join("asset"), bytes).unwrap(); + let m = PackageManifest { + schema: 1, + id: "test.sample".into(), + version: "1.0.0".into(), + license: "MIT".into(), + dependencies: vec![], + capabilities: vec![], + resources: vec![PackageResource { + path: "asset".into(), + scope: "client".into(), + role: "texture".into(), + sha256: format!("{:x}", Sha256::digest(bytes)), + size: bytes.len() as u64, + }], + }; + std::fs::write( + dir.path().join("manifest.json"), + serde_json::to_vec(&m).unwrap(), + ) + .unwrap(); + let p = Package::load(dir.path()).unwrap(); + std::fs::write(dir.path().join("asset"), b"bad content").unwrap(); + assert!(p.read_resource("asset").is_err()); + } +} diff --git a/crates/shacraft-content/src/shapes.rs b/crates/shacraft-content/src/shapes.rs new file mode 100644 index 0000000..35af4ef --- /dev/null +++ b/crates/shacraft-content/src/shapes.rs @@ -0,0 +1,828 @@ +//! Shacraft's original low-poly templates; no Minecraft visual models/assets. +use crate::Aabb; +use std::collections::BTreeMap; +fn bx(a: [f32; 3], b: [f32; 3]) -> Aabb { + Aabb::new(a, b) +} +fn props(state: &str) -> BTreeMap<&str, &str> { + state + .split_once('[') + .map(|(_, tail)| { + tail.trim_end_matches(']') + .split(',') + .filter_map(|p| p.split_once('=')) + .collect() + }) + .unwrap_or_default() +} +fn get<'a>(p: &BTreeMap<&'a str, &'a str>, key: &str, default: &'a str) -> &'a str { + p.get(key).copied().unwrap_or(default) +} +fn num(p: &BTreeMap<&str, &str>, key: &str, default: f32) -> f32 { + p.get(key).and_then(|s| s.parse().ok()).unwrap_or(default) +} +fn rotate(boxes: Vec, facing: &str) -> Vec { + let steps = match facing { + "east" => 1, + "south" => 2, + "west" => 3, + _ => 0, + }; + boxes + .into_iter() + .map(|mut b| { + for _ in 0..steps { + b = bx( + [1. - b.max[2], b.min[1], b.min[0]], + [1. - b.min[2], b.max[1], b.max[0]], + ) + } + b + }) + .collect() +} +const FULL: Aabb = Aabb::new([0., 0., 0.], [1., 1., 1.]); +pub(crate) fn block_render( + state: &str, + family: &str, + collision: &[Aabb], +) -> (Vec, &'static str) { + let p = props(state); + let name = state.split('[').next().unwrap_or(state); + let facing = get(&p, "facing", "north"); + let b = match family { + "air" | "barrier" | "light" | "structure_void" | "moving_piston" => { + return (vec![], "intentionally-invisible"); + } + "liquid" | "bubble_column" => vec![bx( + [0., 0., 0.], + [ + 1., + if num(&p, "level", 0.) >= 8. { + 1. + } else { + (8. - num(&p, "level", 0.)).max(1.) / 9. + }, + 1., + ], + )], + "button" | "lever" => { + let pressed = get(&p, "powered", "false") == "true"; + let depth = if pressed { 0.0625 } else { 0.125 }; + let face = get(&p, "face", "wall"); + let mut b = vec![match face { + "floor" => bx([0.3125, 0., 0.375], [0.6875, depth, 0.625]), + "ceiling" => bx([0.3125, 1. - depth, 0.375], [0.6875, 1., 0.625]), + _ => bx([0.3125, 0.375, 1. - depth], [0.6875, 0.625, 1.]), + }]; + if family == "lever" { + b.push(match face { + "floor" => bx( + [0.46875, 0.0625, if pressed { 0.55 } else { 0.25 }], + [0.53125, 0.375, if pressed { 0.75 } else { 0.45 }], + ), + "ceiling" => bx( + [0.46875, 0.625, if pressed { 0.55 } else { 0.25 }], + [0.53125, 0.9375, if pressed { 0.75 } else { 0.45 }], + ), + _ => bx( + [0.46875, if pressed { 0.25 } else { 0.55 }, 0.625], + [0.53125, if pressed { 0.45 } else { 0.75 }, 0.9375], + ), + }); + } + rotate(b, facing) + } + "pressure_plate" | "weighted_pressure_plate" => vec![bx( + [0.0625, 0., 0.0625], + [ + 0.9375, + if get(&p, "powered", "false") == "true" || num(&p, "power", 0.) > 0. { + 0.03125 + } else { + 0.0625 + }, + 0.9375, + ], + )], + "trip_wire_hook" => rotate( + vec![ + bx([0.375, 0.25, 0.875], [0.625, 0.75, 1.]), + bx([0.46875, 0.4375, 0.5], [0.53125, 0.5, 0.9375]), + ], + facing, + ), + "snow_layer" => vec![bx([0., 0., 0.], [1., num(&p, "layers", 1.) / 8., 1.])], + "mossy_carpet" => { + let mut b = vec![bx([0., 0., 0.], [1., 0.0625, 1.])]; + for (dir, a, z) in [ + ("north", [0., 0., 0.], [1., 0., 0.0625]), + ("south", [0., 0., 0.9375], [1., 0., 1.]), + ("west", [0., 0., 0.], [0.0625, 0., 1.]), + ("east", [0.9375, 0., 0.], [1., 0., 1.]), + ] { + let v = get(&p, dir, "none"); + if v != "none" { + b.push(bx(a, [z[0], if v == "tall" { 1. } else { 0.5 }, z[2]])); + } + } + b + } + "big_dripleaf" | "big_dripleaf_stem" => { + let mut b = vec![bx([0.4375, 0., 0.4375], [0.5625, 0.875, 0.5625])]; + if family == "big_dripleaf" { + let tilt = get(&p, "tilt", "none"); + b.push(if tilt == "full" { + bx([0.0625, 0.375, 0.75], [0.9375, 0.875, 0.8125]) + } else { + bx( + [ + 0.0625, + if tilt == "partial" { 0.625 } else { 0.8125 }, + 0.0625, + ], + [0.9375, 0.875, 0.9375], + ) + }); + } + rotate(b, facing) + } + "fence" => { + let mut b = vec![bx([0.375, 0., 0.375], [0.625, 1., 0.625])]; + for (dir, a, z) in [ + ("north", [0.4375, 0., 0.], [0.5625, 0., 0.5]), + ("south", [0.4375, 0., 0.5], [0.5625, 0., 1.]), + ("west", [0., 0., 0.4375], [0.5, 0., 0.5625]), + ("east", [0.5, 0., 0.4375], [1., 0., 0.5625]), + ] { + if get(&p, dir, "false") == "true" { + for y in [0.375, 0.75] { + b.push(bx([a[0], y, a[2]], [z[0], y + 0.1875, z[2]])); + } + } + } + b + } + "wall" => { + let mut b = vec![]; + if get(&p, "up", "true") == "true" { + b.push(bx([0.25, 0., 0.25], [0.75, 1., 0.75])); + } + for (dir, a, z) in [ + ("north", [0.3125, 0., 0.], [0.6875, 0., 0.5]), + ("south", [0.3125, 0., 0.5], [0.6875, 0., 1.]), + ("west", [0., 0., 0.3125], [0.5, 0., 0.6875]), + ("east", [0.5, 0., 0.3125], [1., 0., 0.6875]), + ] { + let value = get(&p, dir, "none"); + if value != "none" { + b.push(bx( + a, + [z[0], if value == "tall" { 1. } else { 0.8125 }, z[2]], + )); + } + } + if b.is_empty() { + b.push(bx([0.25, 0., 0.25], [0.75, 1., 0.75])); + } + b + } + "fence_gate" => { + let mut b = vec![ + bx([0., 0.3125, 0.375], [0.125, 1., 0.625]), + bx([0.875, 0.3125, 0.375], [1., 1., 0.625]), + ]; + if get(&p, "open", "false") == "true" { + b.push(bx([0., 0.375, 0.5], [0.1875, 0.875, 1.])); + b.push(bx([0.8125, 0.375, 0.5], [1., 0.875, 1.])); + } else { + for y in [0.375, 0.75] { + b.push(bx([0.125, y, 0.4375], [0.875, y + 0.125, 0.5625])); + } + } + rotate(b, facing) + } + "rail" | "powered_rail" | "detector_rail" => { + let s = get(&p, "shape", "north_south"); + let mut b = vec![]; + if s.starts_with("ascending_") { + for i in 0..8 { + let z = i as f32 / 8.; + for x in [0.1875, 0.75] { + b.push(bx([x, 0.875 - z, z], [x + 0.0625, 0.9375 - z, z + 0.125])); + } + } + rotate(b, s.trim_start_matches("ascending_")) + } else { + for x in [0.1875, 0.75] { + b.push(bx([x, 0.0625, 0.], [x + 0.0625, 0.125, 1.])); + } + for z in [0.125, 0.5, 0.875] { + b.push(bx([0.125, 0., z], [0.875, 0.0625, (z + 0.0625).min(1.)])); + } + // Curved tracks use a visible orthogonal corner in this box renderer. + if s == "east_west" { + rotate(b, "east") + } else if s.contains('_') && s != "north_south" { + let mut c = vec![ + bx([0.1875, 0.06, 0.5], [1., 0.125, 0.5625]), + bx([0.1875, 0.06, 0.], [0.25, 0.125, 0.56]), + bx([0.75, 0.06, 0.], [0.8125, 0.125, 0.94]), + bx([0.75, 0.06, 0.875], [1., 0.125, 0.9375]), + ]; + c = rotate( + c, + match s { + "south_east" => "east", + "south_west" => "south", + "north_west" => "west", + _ => "north", + }, + ); + c + } else { + b + } + } + } + "ladder" => rotate( + vec![ + bx([0.125, 0., 0.9375], [0.25, 1., 1.]), + bx([0.75, 0., 0.9375], [0.875, 1., 1.]), + bx([0.125, 0.1875, 0.875], [0.875, 0.25, 1.]), + bx([0.125, 0.4375, 0.875], [0.875, 0.5, 1.]), + bx([0.125, 0.6875, 0.875], [0.875, 0.75, 1.]), + bx([0.125, 0.9375, 0.875], [0.875, 1., 1.]), + ], + facing, + ), + "standing_sign" | "banner" => rotate( + vec![ + bx([0.46875, 0., 0.46875], [0.53125, 0.5, 0.53125]), + bx([0.0625, 0.5, 0.46875], [0.9375, 0.9375, 0.53125]), + ], + rotation_facing(num(&p, "rotation", 0.)), + ), + "wall_sign" | "wall_banner" => rotate( + vec![bx([0.0625, 0.25, 0.9375], [0.9375, 0.8125, 1.])], + facing, + ), + "ceiling_hanging_sign" | "wall_hanging_sign" => rotate( + vec![ + bx([0.0625, 0.125, 0.4375], [0.9375, 0.6875, 0.5625]), + bx([0.1875, 0.6875, 0.46875], [0.25, 1., 0.53125]), + bx([0.75, 0.6875, 0.46875], [0.8125, 1., 0.53125]), + ], + facing, + ), + "torch" | "redstone_torch" => vec![ + bx([0.4375, 0., 0.4375], [0.5625, 0.625, 0.5625]), + bx([0.375, 0.5, 0.375], [0.625, 0.75, 0.625]), + ], + "wall_torch" | "redstone_wall_torch" => rotate( + vec![ + bx([0.4375, 0.125, 0.6875], [0.5625, 0.5, 0.875]), + bx([0.375, 0.4375, 0.625], [0.625, 0.6875, 0.875]), + ], + facing, + ), + "redstone_wire" | "tripwire" => { + let mut b = vec![bx([0.3125, 0.01, 0.3125], [0.6875, 0.04, 0.6875])]; + for (dir, a, z) in [ + ("north", [0.4375, 0.01, 0.], [0.5625, 0.04, 0.5]), + ("south", [0.4375, 0.01, 0.5], [0.5625, 0.04, 1.]), + ("west", [0., 0.01, 0.4375], [0.5, 0.04, 0.5625]), + ("east", [0.5, 0.01, 0.4375], [1., 0.04, 0.5625]), + ] { + let v = get(&p, dir, "none"); + if v != "none" && v != "false" { + b.push(bx(a, z)); + } + } + b + } + "nether_portal" => { + if get(&p, "axis", "x") == "x" { + vec![bx([0., 0., 0.4375], [1., 1., 0.5625])] + } else { + vec![bx([0.4375, 0., 0.], [0.5625, 1., 1.])] + } + } + "end_portal" | "end_gateway" => vec![bx([0., 0.125, 0.], [1., 0.1875, 1.])], + "fire" | "soul_fire" => vec![ + bx([0.125, 0., 0.46875], [0.875, 0.875, 0.53125]), + bx([0.46875, 0., 0.125], [0.53125, 0.75, 0.875]), + ], + "vine" | "glow_lichen" | "sculk_vein" | "multiface" => { + let mut b = vec![]; + for (dir, a, z) in [ + ("north", [0., 0., 0.], [1., 1., 0.03125]), + ("south", [0., 0., 0.96875], [1., 1., 1.]), + ("west", [0., 0., 0.], [0.03125, 1., 1.]), + ("east", [0.96875, 0., 0.], [1., 1., 1.]), + ("up", [0., 0.96875, 0.], [1., 1., 1.]), + ("down", [0., 0., 0.], [1., 0.03125, 1.]), + ] { + if get(&p, dir, "false") == "true" { + b.push(bx(a, z)); + } + } + if b.is_empty() { + b.push(bx([0., 0., 0.], [1., 1., 0.03125])); + } + b + } + "flower_pot" => { + let mut b = vec![bx([0.3125, 0., 0.3125], [0.6875, 0.375, 0.6875])]; + if name != "minecraft:flower_pot" { + b.extend(plant(0.8)); + } + b + } + "crop" | "beetroot" | "potato" | "carrot" | "torchflower_crop" | "pitcher_crop" + | "nether_wart" => plant(0.2 + num(&p, "age", 0.).min(7.) / 10.), + "flower" + | "wither_rose" + | "eyeblossom" + | "tall_flower" + | "double_plant" + | "sapling" + | "bush" + | "tall_grass" + | "short_dry_grass" + | "tall_dry_grass" + | "dry_vegetation" + | "sugar_cane" + | "mushroom" + | "nether_fungus" + | "nether_roots" + | "nether_sprouts" + | "hanging_roots" + | "hanging_moss" + | "firefly_bush" + | "sweet_berry_bush" + | "mangrove_propagule" + | "bamboo_sapling" + | "stem" + | "attached_stem" + | "seagrass" + | "tall_seagrass" + | "kelp" + | "kelp_plant" + | "twisting_vines" + | "twisting_vines_plant" + | "weeping_vines" + | "weeping_vines_plant" + | "cave_vines" + | "cave_vines_plant" + | "small_dripleaf" + | "spore_blossom" + | "cactus_flower" => plant(if family == "mushroom" { 0.45 } else { 0.85 }), + "leaf_litter" | "flower_bed" | "frogspawn" => { + vec![bx([0.0625, 0.015, 0.0625], [0.9375, 0.0625, 0.9375])] + } + "coral" + | "coral_plant" + | "base_coral_plant" + | "coral_fan" + | "base_coral_fan" + | "coral_wall_fan" + | "base_coral_wall_fan" => plant(0.625), + "web" => vec![ + bx([0., 0., 0.46875], [1., 1., 0.53125]), + bx([0.46875, 0., 0.], [0.53125, 1., 1.]), + ], + "powder_snow" => vec![FULL], + _ => { + if !collision.is_empty() { + collision.to_vec() + } else { + // Noncollidable interaction geometry authored from the family, no + // silent air substitution. Rare unsupported visual details remain + // explicitly approximate in the coverage field. + return ( + vec![bx([0.125, 0., 0.125], [0.875, 0.5, 0.875])], + "authored-approximate", + ); + } + } + }; + (b, "authored-procedural") +} +fn rotation_facing(v: f32) -> &'static str { + match ((v + 2.) as i32 / 4).rem_euclid(4) { + 0 => "south", + 1 => "west", + 2 => "north", + _ => "east", + } +} +fn plant(height: f32) -> Vec { + vec![ + bx([0.46875, 0., 0.46875], [0.53125, height, 0.53125]), + bx( + [0.1875, height * 0.35, 0.46875], + [0.8125, height * 0.75, 0.53125], + ), + bx( + [0.46875, height * 0.25, 0.1875], + [0.53125, height * 0.65, 0.8125], + ), + ] +} + +pub(crate) fn color(name: &str) -> [u8; 3] { + let name = name.strip_prefix("minecraft:").unwrap_or(name); + let colors = [ + ("light_blue", [108, 169, 193]), + ("light_gray", [170, 173, 163]), + ("magenta", [175, 97, 153]), + ("orange", [207, 136, 66]), + ("yellow", [220, 191, 80]), + ("purple", [130, 96, 164]), + ("cyan", [61, 155, 156]), + ("blue", [74, 111, 181]), + ("brown", [119, 88, 65]), + ("green", [91, 132, 75]), + ("lime", [148, 185, 87]), + ("pink", [216, 153, 165]), + ("red", [179, 78, 64]), + ("black", [54, 59, 62]), + ("gray", [104, 113, 112]), + ("white", [215, 219, 207]), + ]; + for (prefix, c) in colors { + if name.starts_with(&format!("{prefix}_")) { + return c; + } + } + if name.contains("sulfur") { + return [220, 210, 78]; + } + if name.contains("cinnabar") { + return [185, 78, 63]; + } + if name.contains("snow") || name.contains("quartz") || name.contains("calcite") { + return [217, 229, 228]; + } + if name.contains("water") { + return [69, 133, 182]; + } + if name.contains("lava") { + return [226, 123, 49]; + } + if name.contains("glass") || name.contains("ice") { + return [139, 190, 203]; + } + if name.contains("grass") || name.contains("leaves") || name.contains("moss") { + return [109, 148, 82]; + } + if name.contains("cherry") { + return [191, 141, 142]; + } + if name.contains("pale_oak") { + return [194, 192, 169]; + } + if name.contains("crimson") { + return [132, 63, 82]; + } + if name.contains("warped") { + return [58, 139, 135]; + } + if name.contains("dark_oak") || name.contains("spruce") { + return [106, 85, 60]; + } + if name.contains("birch") || name.contains("bamboo") { + return [190, 179, 121]; + } + if name.contains("acacia") || name.contains("mangrove") { + return [159, 102, 71]; + } + if name.contains("oak") + || name.contains("jungle") + || name.contains("wood") + || name.contains("chest") + { + return [163, 134, 91]; + } + if name.contains("copper") { + return if name.contains("oxidized") { + [79, 155, 131] + } else { + [179, 115, 83] + }; + } + if name.contains("gold") { + return [210, 181, 81]; + } + if name.contains("diamond") { + return [91, 189, 191]; + } + if name.contains("emerald") { + return [67, 161, 112]; + } + if name.contains("redstone") { + return [162, 70, 57]; + } + if name.contains("sand") || name.contains("end_stone") { + return [195, 184, 144]; + } + if name.contains("dirt") || name.contains("mud") { + return [131, 108, 83]; + } + if name.contains("deepslate") || name.contains("blackstone") || name.contains("obsidian") { + return [69, 72, 80]; + } + if name.contains("stone") || name.contains("andesite") || name.contains("cobble") { + return [141, 150, 146]; + } + let hash = name + .bytes() + .fold(2166136261u32, |h, b| (h ^ b as u32).wrapping_mul(16777619)); + [ + 100 + (hash % 82) as u8, + 100 + ((hash >> 8) % 82) as u8, + 100 + ((hash >> 16) % 82) as u8, + ] +} +pub(crate) fn opacity(name: &str) -> f32 { + if name.contains("glass") { + 0.42 + } else if name.contains("water") || name.contains("ice") { + 0.68 + } else { + 1. + } +} +pub(crate) fn entity_color(name: &str) -> [u8; 3] { + match name.strip_prefix("minecraft:").unwrap_or(name) { + "player" | "mannequin" => [78, 154, 169], + "cow" | "mooshroom" => [132, 108, 90], + "pig" => [209, 150, 155], + "sheep" => [219, 216, 196], + "creeper" | "zombie" | "zombie_villager" => [110, 152, 98], + "skeleton" | "stray" | "parched" => [201, 202, 179], + "enderman" | "ender_dragon" => [66, 60, 83], + "sulfur_cube" => [213, 209, 75], + "slime" => [129, 188, 103], + "magma_cube" => [149, 76, 44], + "allay" => [96, 199, 212], + "bee" => [213, 182, 72], + "fox" => [191, 123, 71], + "wolf" => [169, 177, 166], + _ => color(name), + } +} + +pub(crate) fn entity_render(name: &str, width: f32, height: f32) -> (Vec, &'static str) { + let n = name.strip_prefix("minecraft:").unwrap_or(name); + let family = if n.ends_with("_boat") || n.ends_with("_raft") { + "boat" + } else if n.ends_with("minecart") { + "cart" + } else { + match n { + "marker" | "interaction" | "area_effect_cloud" | "lightning_bolt" => "invisible", + "cow" | "mooshroom" | "pig" | "sheep" | "wolf" | "cat" | "ocelot" | "fox" | "panda" + | "polar_bear" | "goat" | "horse" | "skeleton_horse" | "zombie_horse" | "donkey" + | "mule" | "llama" | "trader_llama" | "camel" | "camel_husk" | "hoglin" | "zoglin" + | "ravager" | "sniffer" | "armadillo" => "quadruped", + "creeper" => "creeper", + "spider" | "cave_spider" | "silverfish" | "endermite" => "arthropod", + "cod" | "salmon" | "tropical_fish" | "pufferfish" | "dolphin" | "tadpole" + | "axolotl" | "guardian" | "elder_guardian" | "nautilus" | "zombie_nautilus" => { + "aquatic" + } + "squid" | "glow_squid" => "squid", + "ghast" | "happy_ghast" => "ghast", + "slime" | "magma_cube" | "sulfur_cube" | "shulker" => "cube-creature", + "bat" | "bee" | "allay" | "vex" | "parrot" | "phantom" => "winged", + "chicken" => "bird", + "rabbit" => "rabbit", + "frog" | "turtle" => "low-quadruped", + "ender_dragon" => "dragon", + "wither" => "wither", + "snow_golem" => "snow-golem", + "blaze" | "breeze" => "elemental", + "player" | "mannequin" | "zombie" | "zombie_villager" | "drowned" | "husk" + | "skeleton" | "stray" | "parched" | "bogged" | "wither_skeleton" + | "zombified_piglin" | "piglin" | "piglin_brute" | "villager" | "wandering_trader" + | "pillager" | "vindicator" | "evoker" | "illusioner" | "witch" | "enderman" + | "iron_golem" | "copper_golem" | "creaking" | "warden" | "giant" | "armor_stand" + | "strider" => "biped", + "painting" | "item_frame" | "glow_item_frame" => "frame", + "block_display" | "item_display" | "text_display" => "property-dependent-display", + "arrow" | "spectral_arrow" | "trident" | "firework_rocket" => "bolt", + "falling_block" | "tnt" => "block", + "end_crystal" | "ominous_item_spawner" => "crystal", + "evoker_fangs" => "fangs", + "item" | "leash_knot" | "fishing_bobber" | "egg" | "ender_pearl" + | "experience_bottle" | "experience_orb" | "eye_of_ender" | "fireball" + | "small_fireball" | "dragon_fireball" | "snowball" | "splash_potion" + | "lingering_potion" | "llama_spit" | "shulker_bullet" | "wind_charge" + | "breeze_wind_charge" | "wither_skull" => "small-object", + _ => "small-object", + } + }; + if family == "invisible" { + return (vec![], family); + } + let mut b = match family { + "biped" => vec![ + bx([-0.3, 0.38, -0.18], [0.3, 0.77, 0.18]), + bx([-0.23, 0.77, -0.23], [0.23, 1., 0.23]), + bx([-0.27, 0., -0.16], [-0.04, 0.4, 0.16]), + bx([0.04, 0., -0.16], [0.27, 0.4, 0.16]), + bx([-0.5, 0.4, -0.14], [-0.31, 0.75, 0.14]), + bx([0.31, 0.4, -0.14], [0.5, 0.75, 0.14]), + ], + "quadruped" | "low-quadruped" => { + let mut b = vec![ + bx([-0.4, 0.3, -0.35], [0.4, 0.8, 0.35]), + bx([-0.3, 0.58, -0.5], [0.3, 0.98, -0.2]), + ]; + for x in [-0.35, 0.15] { + for z in [-0.3, 0.18] { + b.push(bx([x, 0., z], [x + 0.2, 0.4, z + 0.15])); + } + } + b + } + "creeper" => vec![ + bx([-0.27, 0.22, -0.2], [0.27, 0.73, 0.2]), + bx([-0.38, 0.7, -0.38], [0.38, 1., 0.38]), + bx([-0.38, 0., -0.38], [-0.02, 0.25, -0.06]), + bx([0.02, 0., -0.38], [0.38, 0.25, -0.06]), + bx([-0.38, 0., 0.06], [-0.02, 0.25, 0.38]), + bx([0.02, 0., 0.06], [0.38, 0.25, 0.38]), + ], + "arthropod" => { + let mut b = vec![ + bx([-0.27, 0.3, -0.35], [0.27, 0.7, 0.35]), + bx([-0.2, 0.32, -0.5], [0.2, 0.62, -0.25]), + ]; + for z in [-0.32, -0.12, 0.12, 0.32] { + b.push(bx([-0.5, 0.1, z], [-0.2, 0.35, z + 0.07])); + b.push(bx([0.2, 0.1, z], [0.5, 0.35, z + 0.07])); + } + b + } + "aquatic" => vec![ + bx([-0.24, 0.25, -0.45], [0.24, 0.7, 0.25]), + bx([-0.4, 0.3, 0.2], [0.4, 0.62, 0.5]), + bx([-0.03, 0.7, -0.15], [0.03, 1., 0.1]), + bx([-0.45, 0.25, -0.2], [0.45, 0.35, 0.1]), + ], + "squid" | "ghast" => { + let mut b = vec![bx([-0.4, 0.4, -0.4], [0.4, 1., 0.4])]; + for x in [-0.3, 0., 0.3] { + for z in [-0.3, 0., 0.3] { + b.push(bx([x - 0.04, 0., z - 0.04], [x + 0.04, 0.45, z + 0.04])); + } + } + b + } + "cube-creature" => vec![ + bx([-0.5, 0., -0.5], [0.5, 1., 0.5]), + bx([-0.3, 0.55, -0.52], [-0.12, 0.72, -0.49]), + bx([0.12, 0.55, -0.52], [0.3, 0.72, -0.49]), + ], + "winged" => vec![ + bx([-0.19, 0.2, -0.3], [0.19, 0.8, 0.3]), + bx([-0.23, 0.65, -0.4], [0.23, 1., -0.05]), + bx([-0.5, 0.45, -0.1], [-0.15, 0.6, 0.3]), + bx([0.15, 0.45, -0.1], [0.5, 0.6, 0.3]), + ], + "bird" => vec![ + bx([-0.34, 0.25, -0.25], [0.34, 0.7, 0.25]), + bx([-0.23, 0.65, -0.35], [0.23, 1., -0.02]), + bx([-0.12, 0.73, -0.5], [0.12, 0.82, -0.3]), + bx([-0.22, 0., -0.03], [-0.08, 0.3, 0.06]), + bx([0.08, 0., -0.03], [0.22, 0.3, 0.06]), + ], + "rabbit" => vec![ + bx([-0.3, 0.12, -0.25], [0.3, 0.6, 0.3]), + bx([-0.22, 0.5, -0.4], [0.22, 0.78, -0.05]), + bx([-0.2, 0.7, -0.25], [-0.08, 1., -0.1]), + bx([0.08, 0.7, -0.25], [0.2, 1., -0.1]), + bx([-0.4, 0., 0.05], [-0.1, 0.2, 0.4]), + bx([0.1, 0., 0.05], [0.4, 0.2, 0.4]), + ], + "dragon" => vec![ + bx([-0.15, 0.3, -0.3], [0.15, 0.7, 0.3]), + bx([-0.1, 0.4, -0.5], [0.1, 0.65, -0.2]), + bx([-0.5, 0.48, -0.1], [-0.12, 0.56, 0.3]), + bx([0.12, 0.48, -0.1], [0.5, 0.56, 0.3]), + bx([-0.055, 0.35, 0.25], [0.055, 0.45, 0.5]), + ], + "wither" => vec![ + bx([-0.1, 0.05, -0.15], [0.1, 0.75, 0.15]), + bx([-0.4, 0.65, -0.12], [0.4, 0.75, 0.12]), + bx([-0.17, 0.75, -0.2], [0.17, 1., 0.2]), + bx([-0.5, 0.65, -0.18], [-0.25, 0.9, 0.18]), + bx([0.25, 0.65, -0.18], [0.5, 0.9, 0.18]), + ], + "snow-golem" => vec![ + bx([-0.45, 0., -0.45], [0.45, 0.4, 0.45]), + bx([-0.35, 0.4, -0.35], [0.35, 0.75, 0.35]), + bx([-0.25, 0.75, -0.25], [0.25, 1., 0.25]), + bx([-0.5, 0.5, -0.04], [0.5, 0.6, 0.04]), + ], + "elemental" => { + let mut b = vec![bx([-0.3, 0.7, -0.3], [0.3, 1., 0.3])]; + for (x, z) in [(-0.4, -0.3), (0.3, -0.3), (-0.4, 0.3), (0.3, 0.3)] { + b.push(bx([x, 0.15, z], [x + 0.1, 0.65, z + 0.1])); + } + b + } + "boat" => vec![ + bx([-0.5, 0., -0.5], [0.5, 0.2, 0.5]), + bx([-0.5, 0.2, -0.5], [-0.36, 0.7, 0.5]), + bx([0.36, 0.2, -0.5], [0.5, 0.7, 0.5]), + bx([-0.36, 0.2, -0.5], [0.36, 0.7, -0.38]), + bx([-0.36, 0.2, 0.38], [0.36, 0.7, 0.5]), + bx([-0.36, 0.32, -0.08], [0.36, 0.42, 0.08]), + ], + "cart" => vec![ + bx([-0.5, 0.1, -0.5], [0.5, 0.3, 0.5]), + bx([-0.5, 0.3, -0.5], [-0.38, 0.85, 0.5]), + bx([0.38, 0.3, -0.5], [0.5, 0.85, 0.5]), + bx([-0.38, 0.3, -0.5], [0.38, 0.85, -0.38]), + bx([-0.38, 0.3, 0.38], [0.38, 0.85, 0.5]), + ], + "frame" | "property-dependent-display" => vec![bx([-0.5, 0., -0.05], [0.5, 1., 0.05])], + "bolt" => vec![ + bx([-0.04, 0.45, -0.5], [0.04, 0.55, 0.5]), + bx([-0.18, 0.43, -0.5], [0.18, 0.57, -0.3]), + ], + "block" => vec![bx([-0.5, 0., -0.5], [0.5, 1., 0.5])], + "crystal" => vec![ + bx([-0.3, 0.25, -0.3], [0.3, 0.75, 0.3]), + bx([-0.15, 0.1, -0.15], [0.15, 0.9, 0.15]), + bx([-0.45, 0., -0.45], [0.45, 0.08, 0.45]), + ], + "fangs" => vec![ + bx([-0.35, 0., -0.3], [-0.1, 1., 0.3]), + bx([0.1, 0., -0.3], [0.35, 1., 0.3]), + ], + _ => vec![ + bx([-0.3, 0.2, -0.4], [0.3, 0.8, 0.4]), + bx([-0.4, 0.3, -0.25], [0.4, 0.7, 0.25]), + ], + }; + if family == "boat" && n.contains("chest") { + b.push(bx([-0.25, 0.4, 0.08], [0.25, 0.95, 0.42])); + } + if family == "cart" && n != "minecart" { + b.push(bx([-0.3, 0.3, -0.3], [0.3, 1., 0.3])); + } + let w = width.max(0.25); + let h = height.max(0.25); + for v in &mut b { + for i in 0..3 { + v.min[i] *= if i == 1 { h } else { w }; + v.max[i] *= if i == 1 { h } else { w }; + } + } + (b, family) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn four_quarter_rotations_restore_box() { + let initial = vec![bx([0.125, 0.25, 0.375], [0.25, 0.5, 0.75])]; + let mut b = initial.clone(); + for _ in 0..4 { + b = rotate(b, "east"); + } + assert_eq!(b, initial); + } + #[test] + fn connected_fence_has_two_added_rails() { + let (a, _) = block_render( + "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "fence", + &[], + ); + let (b, _) = block_render( + "minecraft:oak_fence[east=true,north=false,south=false,waterlogged=false,west=false]", + "fence", + &[], + ); + assert_eq!(b.len(), a.len() + 2); + assert!(b.iter().all(|b| b.max[1] <= 1.)); + } + #[test] + fn rail_ascent_reaches_next_block() { + let (b, _) = block_render( + "minecraft:rail[shape=ascending_north,waterlogged=false]", + "rail", + &[], + ); + assert_eq!(b.len(), 16); + assert!(b.iter().any(|b| b.max[1] > 0.9)); + assert!(b.iter().all(Aabb::valid)); + } +} diff --git a/crates/shacraft-core/src/store.rs b/crates/shacraft-core/src/store.rs index 93ccae7..2893dd5 100644 --- a/crates/shacraft-core/src/store.rs +++ b/crates/shacraft-core/src/store.rs @@ -509,6 +509,45 @@ impl WorldStore { Ok(result) } + /// Page effective stored section coordinates in lexicographic x/y/z order. + /// Coordinates here identify 16³ sections, not individual blocks. Air + /// overrides are included, which matters when exporting deletions. The + /// caller holding this single writer must not mutate between pages when + /// it needs one consistent snapshot. + pub fn section_positions( + &self, + name: &str, + after: Option, + limit: usize, + ) -> Result> { + validate_world_name(name)?; + ensure!( + (1..=4096).contains(&limit), + "input_limit: section page must be 1..4096" + ); + let world = lookup_world(&self.conn, name)?; + let mut query = self.conn.prepare( + "WITH section_keys AS ( + SELECT x,y,z FROM world_sections WHERE world_id=?1 + UNION SELECT x,y,z FROM snapshot_sections WHERE snapshot_id=?2 + ) SELECT x,y,z FROM section_keys + WHERE (?3 IS NULL OR (x,y,z) > (?3,?4,?5)) + ORDER BY x,y,z LIMIT ?6", + )?; + let rows = query.query_map( + params![ + world.id, + world.base, + after.map(|p| p[0]), + after.map(|p| p[1]), + after.map(|p| p[2]), + limit as i64 + ], + |row| Ok([row.get(0)?, row.get(1)?, row.get(2)?]), + )?; + Ok(rows.collect::>>()?) + } + /// Durably committed operations need no flush to survive process restart. /// This also checkpoints WAL, reporting busy/error instead of hiding it. pub fn flush(&mut self) -> Result<()> { diff --git a/crates/shacraft-core/tests/section_pages.rs b/crates/shacraft-core/tests/section_pages.rs new file mode 100644 index 0000000..3dceb47 --- /dev/null +++ b/crates/shacraft-core/tests/section_pages.rs @@ -0,0 +1,74 @@ +use shacraft_core::{BlockChange, WorldStore}; + +#[test] +fn section_pages_are_sorted_bounded_and_include_inherited_air_overrides() { + let dir = tempfile::tempdir().unwrap(); + let mut store = WorldStore::open(dir.path(), 2).unwrap(); + let stone = store.register_block("minecraft:stone").unwrap(); + store.create_world("source", None).unwrap(); + store + .edit( + "source", + 0, + "seed", + vec![ + BlockChange { + pos: [-17, 0, 0], + block: stone, + }, + BlockChange { + pos: [-1, 0, 0], + block: stone, + }, + BlockChange { + pos: [0, 16, 0], + block: stone, + }, + BlockChange { + pos: [32, 0, 0], + block: stone, + }, + ], + ) + .unwrap(); + store.create_world("child", Some("source")).unwrap(); + store + .edit( + "child", + 0, + "override", + vec![ + BlockChange { + pos: [-1, 0, 0], + block: 0, + }, + BlockChange { + pos: [16, 0, 0], + block: stone, + }, + ], + ) + .unwrap(); + let expected = vec![[-2, 0, 0], [-1, 0, 0], [0, 1, 0], [1, 0, 0], [2, 0, 0]]; + let mut all = Vec::new(); + loop { + let page = store + .section_positions("child", all.last().copied(), 2) + .unwrap(); + if page.is_empty() { + break; + } + assert!(page.len() <= 2); + all.extend(page); + } + assert_eq!(all, expected); + assert_eq!(store.get_block("child", [-1, 0, 0]).unwrap(), 0); + assert!(store.section_positions("child", None, 0).is_err()); + assert!(store.section_positions("child", None, 4097).is_err()); + drop(store); + let store = WorldStore::open(dir.path(), 2).unwrap(); + assert_eq!( + store.section_positions("child", None, 100).unwrap(), + expected + ); +} diff --git a/crates/shacraft-mcp/Cargo.toml b/crates/shacraft-mcp/Cargo.toml new file mode 100644 index 0000000..940a73c --- /dev/null +++ b/crates/shacraft-mcp/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "shacraft-mcp" +version.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +clap.workspace = true +serde_json.workspace = true +reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] } diff --git a/crates/shacraft-mcp/src/main.rs b/crates/shacraft-mcp/src/main.rs new file mode 100644 index 0000000..f5c7576 --- /dev/null +++ b/crates/shacraft-mcp/src/main.rs @@ -0,0 +1,749 @@ +//! Bounded newline-delimited JSON-RPC MCP transport, independent of world storage. +use anyhow::{Context, Result, bail}; +use clap::Parser; +use serde_json::{Value, json}; +use std::{ + io::{self, BufRead, Read, Write}, + path::PathBuf, + time::Duration, +}; + +const MAX_FRAME: usize = 8 * 1024 * 1024; +const VERSIONS: &[&str] = &["2025-11-25", "2025-06-18", "2025-03-26", "2024-11-05"]; + +#[derive(Parser)] +#[command(about = "Shacraft MCP server over stdio (JSON-RPC; diagnostics only on stderr)")] +struct Args { + #[arg(long, default_value = "http://127.0.0.1:4000")] + server: String, + #[arg(long, default_value = "data")] + data: PathBuf, + #[arg(long)] + token_file: Option, +} + +struct Backend { + url: String, + token_file: PathBuf, + client: reqwest::blocking::Client, +} +impl Backend { + fn new(args: Args) -> Result { + let parsed = reqwest::Url::parse(&args.server).context("Invalid --server URL")?; + if !matches!(parsed.scheme(), "http" | "https") + || parsed.host_str().is_none() + || !parsed.username().is_empty() + || parsed.password().is_some() + || parsed.query().is_some() + || parsed.fragment().is_some() + { + bail!("--server must be an HTTP(S) URL without credentials, query, or fragment"); + } + Ok(Self { + url: args.server.trim_end_matches('/').to_owned(), + token_file: args + .token_file + .unwrap_or_else(|| args.data.join("control.token")), + client: reqwest::blocking::Client::builder() + .connect_timeout(Duration::from_secs(3)) + .timeout(Duration::from_secs(20)) + .redirect(reqwest::redirect::Policy::none()) + .build()?, + }) + } + fn read_response(&self, mut response: reqwest::blocking::Response) -> Result { + let status = response.status(); + let mut bytes = Vec::new(); + Read::by_ref(&mut response) + .take((MAX_FRAME + 1) as u64) + .read_to_end(&mut bytes)?; + if bytes.len() > MAX_FRAME { + bail!("Server response exceeds 8 MiB; request a smaller region"); + } + let body: Value = serde_json::from_slice(&bytes).context("Server returned invalid JSON")?; + if let Some(error) = body.get("error") { + bail!("{}", error.as_str().unwrap_or("Control operation failed")); + } + if !status.is_success() { + bail!("Server returned HTTP {}", status.as_u16()); + } + Ok(body) + } + fn control(&self, method: &str, params: &Value) -> Result { + let file = std::fs::File::open(&self.token_file) + .context("Cannot read control token; start shacraft-server or set --token-file")?; + let mut token = String::new(); + file.take(4097).read_to_string(&mut token)?; + if token.len() > 4096 { + bail!("Control token file is too large"); + } + let token = token.trim(); + if token.is_empty() || token.chars().any(char::is_control) { + bail!("Control token is empty or invalid"); + } + let response = self + .client + .post(format!("{}/api/control", self.url)) + .bearer_auth(token) + .json(&json!({"method":method,"params":params})) + .send() + .context("Shacraft server is unavailable")?; + self.read_response(response)? + .get("result") + .cloned() + .context("Control response is missing result") + } + fn public(&self, path: &str) -> Result { + self.read_response( + self.client + .get(format!("{}{}", self.url, path)) + .send() + .context("Shacraft server is unavailable")?, + ) + } +} + +fn object(properties: Value, required: &[&str]) -> Value { + json!({"type":"object","properties":properties,"required":required,"additionalProperties":false}) +} +fn pos(integer: bool) -> Value { + json!({"type":"array","items":{"type":if integer{"integer"}else{"number"}},"minItems":3,"maxItems":3}) +} +fn world() -> Value { + json!({"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"}) +} +fn operation() -> Value { + json!({"type":"string","minLength":1,"maxLength":128,"description":"Caller-generated idempotency key, retained per world. Reuse only for an identical retry."}) +} +fn revision() -> Value { + json!({"type":"integer","minimum":0,"description":"Observed world revision; a mismatch refuses the write without mutation."}) +} +fn metadata_revision() -> Value { + json!({"type":"integer","minimum":0,"description":"Optional global metadata revision from entity_list or metrics; detects concurrent entity/rule changes."}) +} +fn arena_position() -> Value { + json!({"type":"array","items":{"type":"number","minimum":-32700,"maximum":32700},"minItems":3,"maxItems":3,"description":"Feet position. Y must be greater than elimination_y + 0.5."}) +} +fn block() -> Value { + json!({"oneOf":[{"type":"integer","minimum":0},{"type":"string","minLength":1,"maxLength":512}],"description":"Runtime BlockId or canonical state, e.g. minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]. Use catalog_search to discover states."}) +} +fn tool(name: &str, description: &str, input: Value, read_only: bool, idempotent: bool) -> Value { + json!({"name":name,"description":description,"inputSchema":input,"annotations":{"readOnlyHint":read_only,"destructiveHint":!read_only,"idempotentHint":idempotent,"openWorldHint":false}}) +} +fn tools() -> Vec { + vec![ + tool( + "world_list", + "List all persistent worlds, their revisions and pinned source templates. Start here before reading or editing a world.", + object(json!({}), &[]), + true, + true, + ), + tool( + "world_create", + "Create an empty independent world or a copy-on-write snapshot of an existing template. Later source edits never change the copy.", + object(json!({"world":world(),"template":world()}), &["world"]), + false, + false, + ), + tool( + "world_read", + "Read a bounded inclusive region. Returns non-air cells plus world revision and registry information. Maximum region volume 262144 cells.", + object( + json!({"world":world(),"min":pos(true),"max":pos(true)}), + &["world", "min", "max"], + ), + true, + true, + ), + tool( + "world_edit", + "Atomically edit at most 32768 unique cells. Requires current revision and idempotency key. Use air (BlockId 0) to remove a block. The server commits durably before replying.", + object( + json!({"world":world(),"expected_revision":revision(),"operation_id":operation(),"changes":{"type":"array","minItems":1,"maxItems":32768,"items":object(json!({"pos":pos(true),"block":{"type":"integer","minimum":0,"description":"Runtime BlockId from catalog_search"}}),&["pos","block"])}}), + &["world", "expected_revision", "operation_id", "changes"], + ), + false, + true, + ), + tool( + "world_undo", + "Undo the latest edit atomically. Refuses when any later revision or reset could be overwritten. target_operation is the original edit's operation_id.", + object( + json!({"world":world(),"expected_revision":revision(),"operation_id":operation(),"target_operation":operation()}), + &[ + "world", + "expected_revision", + "operation_id", + "target_operation", + ], + ), + false, + true, + ), + tool( + "world_reset", + "Reset a world to its pinned base snapshot, or air if created without a template. All instance edits are removed; revision increases. Reset is an undo barrier.", + object( + json!({"world":world(),"expected_revision":revision(),"operation_id":operation()}), + &["world", "expected_revision", "operation_id"], + ), + false, + true, + ), + tool( + "catalog_search", + "Search the Minecraft Java 26.2 and installed-package state catalog. Reports exact identifiers, runtime IDs, shapes, and coverage; registered content does not imply all vanilla behaviors are simulated.", + object( + json!({"query":{"type":"string","maxLength":256},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":256}}), + &[], + ), + true, + true, + ), + tool( + "entity_list", + "List persisted entities of one world, including IDs, positions, and properties. Entity kinds are defined in the public entity catalog.", + object(json!({"world":world()}), &["world"]), + true, + true, + ), + tool( + "entity_spawn", + "Spawn one entity from a registered kind at a feet position. Its persisted properties are distinct from implemented behavior. Discover kinds in the entity catalog resource.", + object( + json!({"world":world(),"kind":{"type":"string","maxLength":128},"position":pos(false),"properties":{"type":"object"},"yaw":{"type":"number"}}), + &["world", "kind", "position"], + ), + false, + false, + ), + tool( + "entity_update", + "Update a persisted entity's position, yaw, or properties. Fields omitted from the request are preserved.", + object( + json!({"id":{"type":"string"},"expected_revision":metadata_revision(),"position":pos(false),"properties":{"type":"object"},"yaw":{"type":"number"}}), + &["id"], + ), + false, + true, + ), + tool( + "entity_delete", + "Remove a single persisted entity by ID from its world.", + object( + json!({"id":{"type":"string"},"expected_revision":metadata_revision()}), + &["id"], + ), + false, + true, + ), + tool( + "arena_start", + "Start the configured Spleef match in the specified arena. Requires enough joined players and resets the arena floor according to its rules.", + object(json!({"world":world()}), &["world"]), + false, + false, + ), + tool( + "arena_configure", + "Persist creative/Spleef mode, spawn positions and match rules. Configuration is refused during a started round. Nonempty spawn_points must cover min_players and all joining participants; points must be at least 0.8 apart. floor_block defines the breakable material and does not rebuild the map.", + object( + json!({"world":world(),"expected_revision":metadata_revision(),"mode":{"type":"string","enum":["creative","spleef"]},"spawn":arena_position(),"countdown_seconds":{"type":"integer","minimum":1,"maximum":30},"round_seconds":{"type":"integer","minimum":1,"maximum":3600},"min_players":{"type":"integer","minimum":2,"maximum":32},"elimination_y":{"type":"number","minimum":-32700,"maximum":32700},"spawn_points":{"type":"array","maxItems":32,"items":arena_position(),"description":"Empty uses a radius-7 circle. Otherwise positions must cover all participants."},"spectator_spawn":arena_position(),"floor_block":{"type":"string","minLength":1,"maxLength":512,"description":"Known solid canonical state that players may break during Spleef."}}), + &["world"], + ), + false, + true, + ), + tool( + "metrics", + "Read live process RSS, storage/cache estimates, connected players, tick and queue diagnostics. Payload estimates must not be reported as total process RAM.", + object(json!({}), &[]), + true, + true, + ), + tool( + "build_plan", + "Plan bounded construction without changing world blocks. Expands box, line and cylinder operations, checks limits and returns a plan_id, summary and expected revision. Review the plan before build_commit.", + object( + json!({"world":world(),"expected_revision":revision(),"operations":{"type":"array","minItems":1,"maxItems":128,"items":{"oneOf":[object(json!({"type":{"const":"box"},"min":pos(true),"max":pos(true),"block":block(),"hollow":{"type":"boolean"}}),&["type","min","max","block"]),object(json!({"type":{"const":"line"},"from":pos(true),"to":pos(true),"block":block()}),&["type","from","to","block"]),object(json!({"type":{"const":"cylinder"},"center":pos(true),"radius":{"type":"integer","minimum":1,"maximum":64},"height":{"type":"integer","minimum":1,"maximum":128},"block":block(),"hollow":{"type":"boolean"}}),&["type","center","radius","height","block"])]}}}), + &["world", "expected_revision", "operations"], + ), + false, + false, + ), + tool( + "build_commit", + "Commit a previously reviewed build_plan atomically using plan_id and an idempotency key. A stale revision is refused; create a new plan after inspecting intervening changes.", + object( + json!({"plan_id":{"type":"string","minLength":1,"maxLength":128},"operation_id":operation()}), + &["plan_id", "operation_id"], + ), + false, + true, + ), + tool( + "camera_capture", + "Capture a server-rendered isometric PNG of a bounded world region. Returns an MCP image with world/revision metadata; this is an inspection projection, not the browser's first-person camera.", + object( + json!({"world":world(),"min":pos(true),"max":pos(true)}), + &["world"], + ), + true, + true, + ), + ] +} + +fn validate(schema: &Value, value: &Value, path: &str) -> std::result::Result<(), String> { + if let Some(variants) = schema.get("oneOf").and_then(Value::as_array) + && variants + .iter() + .filter(|s| validate(s, value, path).is_ok()) + .count() + != 1 + { + return Err(format!("{path}: does not match exactly one accepted form")); + } + if let Some(choices) = schema.get("enum").and_then(Value::as_array) + && !choices.contains(value) + { + return Err(format!("{path}: value is not in allowed enum")); + } + if let Some(constant) = schema.get("const") + && value != constant + { + return Err(format!("{path}: expected {constant}")); + } + if let Some(t) = schema.get("type").and_then(Value::as_str) { + let matches = match t { + "object" => value.is_object(), + "array" => value.is_array(), + "string" => value.is_string(), + "integer" => value.is_i64() || value.is_u64(), + "number" => value.is_number(), + "boolean" => value.is_boolean(), + _ => true, + }; + if !matches { + return Err(format!("{path}: expected {t}")); + } + } + if let Some(obj) = value.as_object() { + if let Some(required) = schema.get("required").and_then(Value::as_array) { + for key in required { + let key = key.as_str().unwrap_or(""); + if !obj.contains_key(key) { + return Err(format!("{path}.{key}: required")); + } + } + } + if let Some(properties) = schema.get("properties").and_then(Value::as_object) { + for (key, value) in obj { + if let Some(subschema) = properties.get(key) { + validate(subschema, value, &format!("{path}.{key}"))?; + } else if schema.get("additionalProperties") == Some(&json!(false)) { + return Err(format!("{path}.{key}: unknown field")); + } + } + } + } + if let Some(values) = value.as_array() { + if let Some(n) = schema.get("minItems").and_then(Value::as_u64) + && values.len() < (n as usize) + { + return Err(format!("{path}: too few items")); + } + if let Some(n) = schema.get("maxItems").and_then(Value::as_u64) + && values.len() > (n as usize) + { + return Err(format!("{path}: too many items")); + } + if let Some(item) = schema.get("items") { + for (i, value) in values.iter().enumerate() { + validate(item, value, &format!("{path}[{i}]"))?; + } + } + } + if let Some(s) = value.as_str() { + let len = s.chars().count(); + if schema + .get("minLength") + .and_then(Value::as_u64) + .is_some_and(|n| len < n as usize) + || schema + .get("maxLength") + .and_then(Value::as_u64) + .is_some_and(|n| len > n as usize) + { + return Err(format!("{path}: string length out of range")); + } + if schema.get("pattern") == Some(&json!("^[A-Za-z0-9_-]{1,64}$")) + && (s.is_empty() + || s.len() > 64 + || !s + .bytes() + .all(|c| c.is_ascii_alphanumeric() || c == b'_' || c == b'-')) + { + return Err(format!("{path}: invalid world name")); + } + } + if let Some(n) = value.as_f64() + && (schema + .get("minimum") + .and_then(Value::as_f64) + .is_some_and(|min| n < min) + || schema + .get("maximum") + .and_then(Value::as_f64) + .is_some_and(|max| n > max)) + { + return Err(format!("{path}: number out of range")); + } + Ok(()) +} + +fn resources() -> Value { + json!({"resources":[ + {"uri":"shacraft://server/status","name":"Server status","description":"Live server health and storage metrics","mimeType":"application/json"}, + {"uri":"shacraft://catalog/blocks","name":"Block catalog","description":"Initial page and search endpoint for registered block states","mimeType":"application/json"}, + {"uri":"shacraft://catalog/entities","name":"Entity catalog","description":"All registered entity kinds, shapes and coverage","mimeType":"application/json"}, + {"uri":"shacraft://packages","name":"Required packages","description":"Client-visible manifest and resource integrity hashes; contains no admin credentials","mimeType":"application/json"} + ]}) +} +fn rpc_error(id: Value, code: i32, message: impl Into) -> Value { + json!({"jsonrpc":"2.0","id":id,"error":{"code":code,"message":message.into()}}) +} +fn rpc_result(id: Value, result: Value) -> Value { + json!({"jsonrpc":"2.0","id":id,"result":result}) +} +fn tool_error(message: impl Into) -> Value { + json!({"isError":true,"content":[{"type":"text","text":message.into()}]}) +} +#[derive(Default)] +struct Session { + initialized: bool, + ready: bool, +} +impl Session { + fn dispatch(&mut self, request: Value, backend: &Backend) -> Option { + let id = request.get("id").cloned().unwrap_or(Value::Null); + if !request.is_object() + || request.get("jsonrpc") != Some(&json!("2.0")) + || request.get("method").and_then(Value::as_str).is_none() + || request + .get("id") + .is_some_and(|id| !id.is_string() && !id.is_i64() && !id.is_u64()) + { + return Some(rpc_error(id, -32600, "Invalid JSON-RPC request")); + } + let method = request["method"].as_str().unwrap(); + if request.get("id").is_none() { + if method == "notifications/initialized" && self.initialized { + self.ready = true; + } + return None; + } + let params = request.get("params").cloned().unwrap_or_else(|| json!({})); + if !params.is_object() { + return Some(rpc_error(id, -32602, "params must be an object")); + } + if method == "initialize" { + if self.initialized { + return Some(rpc_error(id, -32600, "Session already initialized")); + } + let Some(version) = params.get("protocolVersion").and_then(Value::as_str) else { + return Some(rpc_error(id, -32602, "protocolVersion is required")); + }; + if !params.get("capabilities").is_some_and(Value::is_object) + || !params + .get("clientInfo") + .is_some_and(|v| v["name"].is_string() && v["version"].is_string()) + { + return Some(rpc_error( + id, + -32602, + "capabilities and clientInfo.name/version are required", + )); + } + self.initialized = true; + return Some(rpc_result( + id, + json!({"protocolVersion":if VERSIONS.contains(&version){version}else{VERSIONS[0]},"capabilities":{"tools":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"prompts":{"listChanged":false}},"serverInfo":{"name":"shacraft-mcp","version":env!("CARGO_PKG_VERSION")},"instructions":"Inspect world revisions and catalog before editing. Plan bounded construction with build_plan; commit with a unique operation_id. Preserve expected_revision on retries. camera_capture is an isometric inspection image. This MCP controls only the configured Shacraft server."}), + )); + } + if method == "ping" { + return Some(rpc_result(id, json!({}))); + } + if !self.ready { + return Some(rpc_error( + id, + -32002, + "Initialize and send notifications/initialized first", + )); + } + let result = match method { + "tools/list" => { + if params.get("cursor").is_some() { + return Some(rpc_error(id, -32602, "This tool list has no further pages")); + } + json!({"tools":tools()}) + } + "tools/call" => { + let Some(name) = params.get("name").and_then(Value::as_str) else { + return Some(rpc_error(id, -32602, "Tool name is required")); + }; + let list = tools(); + let Some(tool) = list.iter().find(|t| t["name"] == name) else { + return Some(rpc_error(id, -32602, "Unknown tool")); + }; + let args = params + .get("arguments") + .cloned() + .unwrap_or_else(|| json!({})); + if let Err(error) = validate(&tool["inputSchema"], &args, "arguments") { + tool_error(error) + } else { + let control = name.replacen('_', ".", 1); + match backend.control(&control, &args) { + Ok(mut output) => { + let mut content = Vec::new(); + if name == "camera_capture" + && let Some(png) = output.get("png_base64").and_then(Value::as_str) + { + content.push( + json!({"type":"image","data":png,"mimeType":"image/png"}), + ); + if let Some(obj) = output.as_object_mut() { + obj.remove("png_base64"); + } + } + content.push(json!({"type":"text","text":serde_json::to_string(&output).unwrap_or_default()})); + let structured = if output.is_object() { + output + } else { + json!({"result":output}) + }; + json!({"content":content,"structuredContent":structured,"isError":false}) + } + Err(error) => tool_error(format!("{error:#}")), + } + } + } + "resources/list" => resources(), + "resources/templates/list" => json!({"resourceTemplates":[]}), + "resources/read" => { + let Some(uri) = params.get("uri").and_then(Value::as_str) else { + return Some(rpc_error(id, -32602, "Resource URI is required")); + }; + let path = match uri { + "shacraft://server/status" => "/api/metrics", + "shacraft://catalog/blocks" => "/api/catalog?offset=0&limit=64", + "shacraft://catalog/entities" => "/api/entities", + "shacraft://packages" => "/api/manifest", + _ => return Some(rpc_error(id, -32002, "Unknown resource URI")), + }; + match backend.public(path) { + Ok(data) => { + json!({"contents":[{"uri":uri,"mimeType":"application/json","text":serde_json::to_string(&data).unwrap_or_default()}]}) + } + Err(error) => return Some(rpc_error(id, -32000, format!("{error:#}"))), + } + } + "prompts/list" => { + json!({"prompts":[{"name":"construct","description":"Inspect, plan, commit and visually verify a bounded Shacraft build","arguments":[{"name":"world","description":"Target world name","required":true},{"name":"request","description":"What to build and any constraints","required":true}]}]}) + } + "prompts/get" => { + if params["name"] != "construct" { + return Some(rpc_error(id, -32602, "Unknown prompt")); + } + let a = ¶ms["arguments"]; + let (Some(world), Some(request)) = (a["world"].as_str(), a["request"].as_str()) + else { + return Some(rpc_error( + id, + -32602, + "world and request string arguments are required", + )); + }; + json!({"description":"Revision-safe construction workflow","messages":[{"role":"user","content":{"type":"text","text":format!("Build in world {world}: {request}\nUse world_list and world_read to inspect the site and current revision, then catalog_search for exact block states. Use build_plan for bounded box/line/cylinder operations. Review the resulting bounds and change count against the requested construction; then call build_commit with a unique operation_id if the request authorizes the build. Capture camera_capture afterward and inspect the result. If the revision conflicts, read the world and make a new plan rather than forcing a stale write. Undo uses the original operation_id and is safe only before later edits. Explain content coverage and any limitations relevant to the build.")}}]}) + } + _ => return Some(rpc_error(id, -32601, "Method not found")), + }; + Some(rpc_result(id, result)) + } +} + +/// Discards an oversized frame through its newline without accumulating its tail. +fn read_frame(reader: &mut impl BufRead) -> io::Result, ()>>> { + let mut frame = Vec::new(); + let mut oversized = false; + loop { + let buffer = reader.fill_buf()?; + if buffer.is_empty() { + return Ok(if frame.is_empty() && !oversized { + None + } else { + Some(if oversized { Err(()) } else { Ok(frame) }) + }); + } + let end = buffer.iter().position(|&b| b == b'\n').map(|i| i + 1); + let take = end.unwrap_or(buffer.len()); + if !oversized { + if frame.len() + take > MAX_FRAME { + oversized = true; + frame.clear(); + } else { + frame.extend_from_slice(&buffer[..take]); + } + } + reader.consume(take); + if end.is_some() { + return Ok(Some(if oversized { Err(()) } else { Ok(frame) })); + } + } +} +fn main() -> Result<()> { + let backend = Backend::new(Args::parse())?; + let mut session = Session::default(); + let stdin = io::stdin(); + let mut input = stdin.lock(); + let stdout = io::stdout(); + let mut output = stdout.lock(); + while let Some(frame) = read_frame(&mut input)? { + let reply = match frame { + Err(()) => Some(rpc_error(Value::Null, -32600, "Request exceeds 8 MiB")), + Ok(bytes) => match serde_json::from_slice::(&bytes) { + Ok(request) => session.dispatch(request, &backend), + Err(_) => Some(rpc_error(Value::Null, -32700, "Parse error")), + }, + }; + if let Some(reply) = reply { + serde_json::to_writer(&mut output, &reply)?; + output.write_all(b"\n")?; + output.flush()?; + } + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + fn backend() -> Backend { + Backend::new(Args { + server: "http://127.0.0.1:1".into(), + data: PathBuf::from("/nonexistent-shacraft-test-data"), + token_file: None, + }) + .unwrap() + } + fn request(id: i32, method: &str, params: Value) -> Value { + json!({"jsonrpc":"2.0","id":id,"method":method,"params":params}) + } + fn initialize(s: &mut Session, b: &Backend, version: &str) -> Value { + let result=s.dispatch(request(1,"initialize",json!({"protocolVersion":version,"capabilities":{},"clientInfo":{"name":"test","version":"1"}})),b).unwrap(); + assert!( + s.dispatch( + json!({"jsonrpc":"2.0","method":"notifications/initialized"}), + b + ) + .is_none() + ); + result + } + #[test] + fn lifecycle_negotiates_and_rejects_before_initialization() { + let b = backend(); + let mut s = Session::default(); + assert_eq!( + s.dispatch(request(1, "tools/list", json!({})), &b).unwrap()["error"]["code"], + -32002 + ); + assert_eq!( + initialize(&mut s, &b, "unknown")["result"]["protocolVersion"], + VERSIONS[0] + ); + let list = s.dispatch(request(2, "tools/list", json!({})), &b).unwrap(); + assert_eq!(list["result"]["tools"].as_array().unwrap().len(), 17); + assert_eq!( + s.dispatch(request(3, "initialize", json!({})), &b).unwrap()["error"]["code"], + -32600 + ); + } + #[test] + fn supported_version_is_preserved() { + let b = backend(); + let mut s = Session::default(); + assert_eq!( + initialize(&mut s, &b, "2024-11-05")["result"]["protocolVersion"], + "2024-11-05" + ); + } + #[test] + fn notifications_never_generate_responses() { + let b = backend(); + let mut s = Session::default(); + assert!( + s.dispatch(json!({"jsonrpc":"2.0","method":"unknown/notification"}), &b) + .is_none() + ); + assert!(s.dispatch(json!({"jsonrpc":"2.0","method":"notifications/cancelled","params":{"requestId":3}}),&b).is_none()); + } + #[test] + fn invalid_tool_arguments_are_mcp_content_errors() { + let b = backend(); + let mut s = Session::default(); + initialize(&mut s, &b, VERSIONS[0]); + let reply=s.dispatch(request(2,"tools/call",json!({"name":"world_edit","arguments":{"world":"lobby","expected_revision":0,"operation_id":"x","changes":[{"pos":[0,0],"block":1}]}})),&b).unwrap(); + assert_eq!(reply["result"]["isError"], true); + assert!( + reply["result"]["content"][0]["text"] + .as_str() + .unwrap() + .contains("too few items") + ); + } + #[test] + fn unavailable_token_is_a_tool_error_not_transport_error() { + let b = backend(); + let mut s = Session::default(); + initialize(&mut s, &b, VERSIONS[0]); + let reply = s + .dispatch(request(2, "tools/call", json!({"name":"world_list"})), &b) + .unwrap(); + assert_eq!(reply["result"]["isError"], true); + assert!(reply.get("error").is_none()); + } + #[test] + fn malformed_ids_and_requests_do_not_execute() { + let b = backend(); + let mut s = Session::default(); + for req in [ + json!([]), + json!({"jsonrpc":"2.0","id":null,"method":"ping"}), + json!({"id":1,"method":"ping"}), + ] { + assert_eq!(s.dispatch(req, &b).unwrap()["error"]["code"], -32600); + } + } + #[test] + fn bounded_reader_recovers_after_oversized_line() { + let mut input = vec![b'x'; MAX_FRAME + 100]; + input.extend_from_slice(b"\n{\"ok\":true}\n"); + let mut input = io::BufReader::new(io::Cursor::new(input)); + assert!(read_frame(&mut input).unwrap().unwrap().is_err()); + assert_eq!( + read_frame(&mut input).unwrap().unwrap().unwrap(), + b"{\"ok\":true}\n" + ); + assert!(read_frame(&mut input).unwrap().is_none()); + } + #[test] + fn build_shapes_validate_without_allowing_invented_parameters() { + let list = tools(); + let schema = &list.iter().find(|t| t["name"] == "build_plan").unwrap()["inputSchema"]; + assert!(validate(schema,&json!({"world":"lobby","expected_revision":0,"operations":[{"type":"box","min":[0,0,0],"max":[3,3,3],"block":"minecraft:stone"}]}),"args").is_ok()); + assert!(validate(schema,&json!({"world":"lobby","expected_revision":0,"operations":[{"type":"box","min":[0,0,0],"max":[3,3,3],"block":1,"erase_everything":true}]}),"args").is_err()); + } +} diff --git a/crates/shacraft-mcp/tests/sdk-smoke.mjs b/crates/shacraft-mcp/tests/sdk-smoke.mjs new file mode 100644 index 0000000..35ce304 --- /dev/null +++ b/crates/shacraft-mcp/tests/sdk-smoke.mjs @@ -0,0 +1,214 @@ +// Real MCP SDK end-to-end smoke. Requires a running disposable Shacraft server. +// node sdk-smoke.mjs --binary /abs/shacraft-mcp --data /abs/test-data [--server URL] +// SHACRAFT_MCP_SDK may point at an installed @modelcontextprotocol/sdk directory. +import assert from "node:assert/strict"; +import path from "node:path"; +import { pathToFileURL, fileURLToPath } from "node:url"; +import { existsSync } from "node:fs"; +const args = {}; +for (let i = 2; i < process.argv.length; i += 2) + args[process.argv[i].replace(/^--/, "")] = process.argv[i + 1]; +const root = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "../../..", +); +const sdk = + process.env.SHACRAFT_MCP_SDK || + args.sdk || + path.resolve( + root, + "../minecraft-builder-mcp/bridge/node_modules/@modelcontextprotocol/sdk", + ); +if (!existsSync(sdk)) + throw Error( + "Set SHACRAFT_MCP_SDK to an installed @modelcontextprotocol/sdk directory.", + ); +const { Client } = await import( + pathToFileURL(path.join(sdk, "dist/esm/client/index.js")) +); +const { StdioClientTransport } = await import( + pathToFileURL(path.join(sdk, "dist/esm/client/stdio.js")) +); +const binary = args.binary || path.join(root, "target/debug/shacraft-mcp"); +assert.ok(args.data, "--data is required: use disposable server data"); +const client = new Client( + { name: "shacraft-sdk-smoke", version: "1.0.0" }, + { capabilities: {} }, +); +const transport = new StdioClientTransport({ + command: binary, + args: [ + "--server", + args.server || "http://127.0.0.1:4000", + "--data", + path.resolve(args.data), + ], + stderr: "pipe", +}); +let stderr = ""; +transport.stderr?.on("data", (chunk) => (stderr += chunk)); +async function call(name, arguments_ = {}) { + const r = await client.callTool({ name, arguments: arguments_ }); + assert.notEqual(r.isError, true, `${name}: ${JSON.stringify(r.content)}`); + return ( + r.structuredContent || + JSON.parse(r.content.find((c) => c.type === "text").text) + ); +} +const report = { sdk: true, checks: [], world: `mcp_sdk_${Date.now()}` }; +try { + await client.connect(transport); + assert.equal(client.getServerVersion()?.name, "shacraft-mcp"); + await client.ping(); + report.checks.push( + "SDK initialize, version negotiation, notification and ping", + ); + const listed = await client.listTools(); + assert.equal(listed.tools.length, 17); + report.checks.push("17 discoverable tool schemas accepted by SDK"); + const resources = await client.listResources(); + assert.equal(resources.resources.length, 4); + for (const resource of resources.resources) { + const r = await client.readResource({ uri: resource.uri }); + assert.equal(r.contents[0].mimeType, "application/json"); + JSON.parse(r.contents[0].text); + } + report.checks.push("4 resources read through SDK"); + const prompts = await client.listPrompts(); + assert.equal(prompts.prompts[0].name, "construct"); + const prompt = await client.getPrompt({ + name: "construct", + arguments: { + world: report.world, + request: "Create a small test structure", + }, + }); + assert.ok(prompt.messages.length); + report.checks.push("Construction prompt and arguments"); + const found = await call("catalog_search", { + query: "minecraft:stone", + limit: 32, + }); + const stone = found.items.find((x) => x.state === "minecraft:stone"); + assert.ok(stone); + await call("world_create", { world: report.world }); + const edit = { + world: report.world, + expected_revision: 0, + operation_id: "sdk-edit", + changes: [{ pos: [0, 0, 0], block: stone.id }], + }; + const first = await call("world_edit", edit); + assert.equal(first.revision, 1); + assert.equal((await call("world_edit", edit)).replayed, true); + const read = await call("world_read", { + world: report.world, + min: [0, 0, 0], + max: [1, 1, 1], + }); + assert.equal(read.blocks.length, 1); + const conflict = await client.callTool({ + name: "world_edit", + arguments: { ...edit, operation_id: "sdk-conflict" }, + }); + assert.equal(conflict.isError, true); + await call("world_undo", { + world: report.world, + expected_revision: 1, + operation_id: "sdk-undo", + target_operation: "sdk-edit", + }); + report.checks.push( + "Durable write, read, idempotent retry, conflict content and undo", + ); + const plan = await call("build_plan", { + world: report.world, + expected_revision: 2, + operations: [ + { type: "box", min: [0, 0, 0], max: [2, 1, 2], block: stone.id }, + ], + }); + assert.equal(plan.cells, 18); + const committed = await call("build_commit", { + plan_id: plan.plan_id, + operation_id: "sdk-build", + }); + assert.equal(committed.changed, 18); + assert.equal( + ( + await call("build_commit", { + plan_id: plan.plan_id, + operation_id: "sdk-build", + }) + ).replayed, + true, + ); + report.checks.push("Plan and atomic idempotent commit"); + const image = await client.callTool({ + name: "camera_capture", + arguments: { world: report.world, min: [-2, -2, -2], max: [4, 4, 4] }, + }); + assert.notEqual(image.isError, true); + const png = image.content.find((c) => c.type === "image"); + assert.ok(png); + assert.equal(png.mimeType, "image/png"); + assert.deepEqual( + [...Buffer.from(png.data, "base64").subarray(0, 8)], + [137, 80, 78, 71, 13, 10, 26, 10], + ); + report.checks.push("MCP PNG image content"); + const entity = await call("entity_spawn", { + world: report.world, + kind: "minecraft:pig", + position: [1, 2, 1], + properties: { name: "SDK test" }, + }); + const id = entity.entity.id; + assert.ok(id); + const updated = await call("entity_update", { + id, + position: [2, 2, 1], + properties: { name: "SDK updated" }, + }); + assert.deepEqual(updated.entity.position, [2, 2, 1]); + const entities = await call("entity_list", { world: report.world }); + assert.ok(entities.items.some((e) => e.id === id)); + await call("entity_delete", { id }); + assert.equal( + (await call("entity_list", { world: report.world })).items.length, + 0, + ); + report.checks.push("Entity spawn/update/list/delete"); + const rules = await call("arena_configure", { + world: report.world, + mode: "creative", + spawn: [0, 3, 0], + countdown_seconds: 2, + round_seconds: 120, + min_players: 2, + elimination_y: -5, + spawn_points: [], + spectator_spawn: [13, 3, 0], + floor_block: "minecraft:snow_block", + }); + assert.equal(rules.countdown_seconds ?? rules.rules?.countdown_seconds, 2); + const metrics = await call("metrics"); + assert.ok(metrics.storage); + report.checks.push("Persisted world configuration and measured metrics"); + await call("world_reset", { + world: report.world, + expected_revision: committed.revision, + operation_id: "sdk-reset", + }); + const empty = await call("world_read", { + world: report.world, + min: [0, 0, 0], + max: [2, 1, 2], + }); + assert.equal(empty.blocks.length, 0); + report.checks.push("World reset"); + assert.equal(stderr, "", "MCP server should not emit routine diagnostics"); + console.log(JSON.stringify(report, null, 2)); +} finally { + await client.close(); +} diff --git a/crates/shacraft-server/Cargo.toml b/crates/shacraft-server/Cargo.toml new file mode 100644 index 0000000..6b0af34 --- /dev/null +++ b/crates/shacraft-server/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "shacraft-server" +version.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +clap.workspace = true +serde.workspace = true +serde_json.workspace = true +shacraft-core.workspace = true +shacraft-content = { path = "../shacraft-content" } +axum = { version = "0.8.9", features = ["ws"] } +tokio = { version = "1", features = ["full"] } +tower-http = { version = "0.6", features = ["fs", "limit", "trace"] } +tower = { version = "0.5", features = ["limit", "load-shed"] } +futures-util = "0.3" +sha2 = "0.10" +base64 = "0.22" +png = "0.17" +wasmi = "2" +uuid = { version = "1", features = ["v4", "serde"] } +rusqlite = { version = "=0.40.2", features = ["bundled"] } + +[dev-dependencies] +tempfile = "3" diff --git a/crates/shacraft-server/src/control.rs b/crates/shacraft-server/src/control.rs new file mode 100644 index 0000000..834c040 --- /dev/null +++ b/crates/shacraft-server/src/control.rs @@ -0,0 +1,499 @@ +impl Game { + pub fn query(&mut self, method: &str, p: Value) -> Result { + match method { + "health" => Ok(json!({"status":"ok","protocol":1,"minecraft":"26.2","tick":self.tick})), + "manifest" => Ok(self.manifest.clone()), + "world.list" => Ok(json!( + self.store + .list_worlds()? + .into_iter() + .filter(|w| self.config(&w.name).mode != "template") + .map(|w| { + let mut v = json!(w); + v["mode"] = json!(self.config(&w.name).mode); + v + }) + .collect::>() + )), + "catalog.search" => { + let query = p["query"].as_str().unwrap_or("").to_lowercase(); + ensure!(query.len() <= 256, "query too long"); + let offset = p["offset"].as_u64().unwrap_or(0) as usize; + let limit = p["limit"].as_u64().unwrap_or(64).clamp(1, 256) as usize; + let selected = p["ids"] + .as_str() + .map(|s| { + s.split(',') + .take(128) + .filter_map(|s| s.parse::().ok()) + .collect::>() + }) + .or_else(|| { + p["states"].as_str().map(|s| { + split_states(s) + .into_iter() + .take(128) + .filter_map(|s| self.id(s).ok()) + .collect::>() + }) + }); + let ids: Vec<_> = self + .store + .registry() + .iter() + .enumerate() + .filter(|(id, s)| { + if let Some(ref selected) = selected { + selected.contains(&(*id as u32)) + } else { + s.to_lowercase().contains(&query) + } + }) + .map(|(i, _)| i as u32) + .collect(); + Ok( + json!({"items":ids.iter().skip(offset).take(limit).filter_map(|id|self.material(*id)).collect::>(),"total":ids.len(),"summary":self.catalog.summary()}), + ) + } + "entity.catalog" => Ok(json!({"items":self.catalog.entities})), + "metrics" => { + let rss = std::fs::read_to_string("/proc/self/status") + .ok() + .and_then(|s| { + s.lines() + .find(|l| l.starts_with("VmRSS:")) + .and_then(|l| l.split_whitespace().nth(1)) + .and_then(|s| s.parse::().ok()) + .map(|n| n * 1024) + }); + Ok( + json!({"tick":self.tick,"tick_ms":self.last_tick_ms,"max_tick_ms":self.max_tick_ms,"uptime_seconds":self.started.elapsed().as_secs(),"players":self.players.len(),"active_worlds":self.players.values().map(|p|&p.world).collect::>().len(),"world_count":self.store.list_worlds()?.len(),"plans":self.plans.len(),"entities":self.meta.entities.len(),"entity_revision":self.meta.revision,"rss_bytes":rss,"slow_clients_disconnected":self.slow_clients,"queued_client_bytes":self.players.values().map(|p|p.out.bytes.load(Ordering::Relaxed)).sum::(),"limits":{"players":32,"command_queue":64,"messages_per_client":16,"bytes_per_client":8388608,"build_plans":16,"plan_cells":32768},"storage":self.store.stats(),"catalog":self.catalog.summary(),"wasm":self.jump.metrics()}), + ) + } + "world.create" => { + let world = string(&p, "world")?; + self.store.create_world(world, p["template"].as_str())?; + let conf = if let Some(template) = p["template"].as_str() { + let mut c = self.config(template); + if c.mode == "template" { + c.mode = "spleef".into(); + } + c + } else { + WorldConfig::default() + }; + self.meta.worlds.insert(world.into(), conf); + self.save_meta()?; + Ok(json!({"world":world,"revision":0})) + } + "world.read" => { + let world = string(&p, "world")?; + let min: Pos = serde_json::from_value(p["min"].clone())?; + let max: Pos = serde_json::from_value(p["max"].clone())?; + let blocks = self.store.read_region(world, min, max)?; + let response = json!({"world":world,"revision":self.store.revision(world)?,"blocks":blocks,"materials":self.materials(&blocks)}); + ensure!( + response.to_string().len() <= 6 * 1024 * 1024, + "read response exceeds 6 MiB; request a smaller region" + ); + Ok(response) + } + "world.edit" => { + let world = string(&p, "world")?; + let rev = p["expected_revision"] + .as_u64() + .context("expected_revision required")?; + let op = string(&p, "operation_id")?; + let changes: Vec = serde_json::from_value(p["changes"].clone())?; + let result = self.store.edit(world, rev, op, changes.clone())?; + if !result.replayed { + self.broadcast(world,json!({"type":"blocks","revision":result.revision,"changes":changes,"materials":self.materials(&changes)})); + } + Ok(json!(result)) + } + "world.undo" | "world.reset" => { + let world = string(&p, "world")?; + let rev = p["expected_revision"] + .as_u64() + .context("expected_revision required")?; + let op = string(&p, "operation_id")?; + let result = if method == "world.undo" { + self.store + .undo(world, rev, op, string(&p, "target_operation")?)? + } else { + self.store.reset_world(world, rev, op)? + }; + if !result.replayed { + self.resnapshot(world); + } + Ok(json!(result)) + } + "entity.list" => { + let world = string(&p, "world")?; + self.store.revision(world)?; + Ok( + json!({"items":self.meta.entities.values().filter(|e|e["world"]==world).skip(p["offset"].as_u64().unwrap_or(0)as usize).take(p["limit"].as_u64().unwrap_or(64).clamp(1,128)as usize).cloned().collect::>(),"total":self.meta.entities.values().filter(|e|e["world"]==world).count(),"revision":self.meta.revision}), + ) + } + "entity.spawn" => { + ensure!(self.meta.entities.len() < 4096, "entity limit reached"); + let world = string(&p, "world")?; + self.store.revision(world)?; + let kind = p["kind"] + .as_str() + .or_else(|| p["entity_type"].as_str()) + .context("kind required")?; + ensure!(self.catalog.entity(kind).is_some(), "unknown entity type"); + let pos = entity_position(&p["position"])?; + let id = Uuid::new_v4().to_string(); + let properties = p.get("properties").cloned().unwrap_or(json!({})); + ensure!( + properties.to_string().len() <= 16384, + "entity properties too large" + ); + let entity = json!({"id":id,"world":world,"kind":kind,"type":kind,"position":pos,"yaw":p["yaw"].as_f64().unwrap_or(0.),"properties":properties}); + self.meta.entities.insert(id, entity.clone()); + self.save_meta()?; + self.broadcast( + world, + json!({"type":"entities","entities":self.entity_list(world)}), + ); + Ok(json!({"entity":entity,"revision":self.meta.revision})) + } + "entity.update" | "entity.delete" => { + let id = string(&p, "id")?; + let mut entity = self + .meta + .entities + .get(id) + .cloned() + .context("unknown entity")?; + let world = entity["world"].as_str().unwrap().to_owned(); + if let Some(r) = p["expected_revision"].as_u64() { + ensure!(r == self.meta.revision, "entity revision conflict"); + } + if method == "entity.delete" { + self.meta.entities.remove(id); + } else { + if p.get("position").is_some() { + entity["position"] = json!(entity_position(&p["position"])?); + } + if let Some(prop) = p.get("properties") { + ensure!( + prop.to_string().len() <= 16384, + "entity properties too large" + ); + entity["properties"] = prop.clone(); + } + if p.get("yaw").is_some() { + entity["yaw"] = json!(number(&p, "yaw")?); + } + self.meta.entities.insert(id.into(), entity.clone()); + } + self.save_meta()?; + self.broadcast( + &world, + json!({"type":"entities","entities":self.entity_list(&world)}), + ); + Ok(json!({"entity":entity,"revision":self.meta.revision})) + } + "arena.configure" => { + let world = string(&p, "world")?; + self.store.revision(world)?; + ensure!( + !self.matches.contains_key(world), + "cannot change rules during a match" + ); + if let Some(revision) = p["expected_revision"].as_u64() { + ensure!( + revision == self.meta.revision, + "arena configuration revision conflict" + ); + } + let mut conf = self.config(world); + if let Some(mode) = p.get("mode") { + let mode = mode.as_str().context("mode must be a string")?; + ensure!( + ["creative", "spleef"].contains(&mode), + "unsupported world mode" + ); + conf.mode = mode.into(); + } + if let Some(value) = p.get("spawn") { + conf.spawn = entity_position(value)?; + } + if let Some(value) = p.get("spectator_spawn") { + conf.spectator_spawn = entity_position(value)?; + } + if let Some(value) = p.get("spawn_points") { + conf.spawn_points = serde_json::from_value(value.clone()) + .context("spawn_points must be arrays of three coordinates")?; + } + if let Some(value) = p.get("countdown_seconds") { + conf.countdown_seconds = u32::try_from( + value + .as_u64() + .context("countdown_seconds must be an integer")?, + ) + .context("countdown_seconds too large")?; + } + if let Some(value) = p.get("round_seconds") { + conf.round_seconds = + u32::try_from(value.as_u64().context("round_seconds must be an integer")?) + .context("round_seconds too large")?; + } + if let Some(value) = p.get("min_players") { + conf.min_players = + usize::try_from(value.as_u64().context("min_players must be an integer")?) + .context("min_players too large")?; + } + if p.get("elimination_y").is_some() { + conf.elimination_y = number(&p, "elimination_y")?; + } + if let Some(value) = p.get("floor_block") { + let name = value + .as_str() + .context("floor_block must be a canonical state")?; + conf.floor_block = self + .catalog + .state(name) + .context("unknown floor_block")? + .state + .clone(); + } + conf.validate(&self.catalog)?; + self.meta.worlds.insert(world.into(), conf.clone()); + self.save_meta()?; + Ok(json!(conf)) + } + "arena.start" => self.start_match(string(&p, "world")?), + "build.plan" => self.build_plan(p), + "build.commit" => { + let id = string(&p, "plan_id")?; + let plan = self.plans.get(id).context("plan missing or expired")?; + ensure!(plan.expires > Instant::now(), "plan expired"); + let world = plan.world.clone(); + let changes = plan.changes.clone(); + let result = self.store.edit( + &world, + plan.revision, + string(&p, "operation_id")?, + changes.clone(), + )?; + if !result.replayed { + self.broadcast(&world,json!({"type":"blocks","revision":result.revision,"changes":changes,"materials":self.materials(&changes)})); + } + Ok(json!(result)) + } + "camera.capture" => { + let world = string(&p, "world")?; + let min: Pos = + serde_json::from_value(p.get("min").cloned().unwrap_or(json!([-24, -4, -24])))?; + let max: Pos = + serde_json::from_value(p.get("max").cloned().unwrap_or(json!([24, 24, 24])))?; + let blocks = self.store.read_region(world, min, max)?; + let colors = blocks + .iter() + .map(|b| { + ( + b.pos, + self.definition(b.block) + .map(|s| s.color) + .unwrap_or([190, 60, 185]), + ) + }) + .collect(); + let png = crate::render::capture(min, max, colors)?; + use base64::Engine; + Ok( + json!({"png_base64":base64::engine::general_purpose::STANDARD.encode(png),"mimeType":"image/png","world":world,"revision":self.store.revision(world)?,"kind":"server-software-isometric","min":min,"max":max}), + ) + } + _ => bail!("unknown control method {method}"), + } + } + fn build_plan(&mut self, p: Value) -> Result { + self.plans.retain(|_, p| p.expires > Instant::now()); + ensure!(self.plans.len() < 16, "build plan limit reached"); + let world = string(&p, "world")?.to_owned(); + let revision = p["expected_revision"] + .as_u64() + .context("expected_revision required")?; + ensure!( + self.store.revision(&world)? == revision, + "revision conflict" + ); + let ops = p["operations"].as_array().context("operations required")?; + ensure!( + !ops.is_empty() && ops.len() <= 128, + "expected 1..128 operations" + ); + let mut cells = BTreeMap::new(); + for op in ops { + let state = op["state"].as_str().or_else(|| op["block"].as_str()); + let block = if let Some(s) = state { + self.id(s)? + } else { + op["block"] + .as_u64() + .filter(|n| *n < self.store.registry().len() as u64) + .context("block ID or state required")? as u32 + }; + let kind = op["type"] + .as_str() + .or_else(|| op["kind"].as_str()) + .context("operation type required")?; + let mut put = |pos: Pos| -> Result<()> { + ensure!( + pos.iter().all(|n| n.unsigned_abs() <= 30_000_000), + "position outside world limits" + ); + cells.insert(pos, block); + ensure!(cells.len() <= 32768, "plan exceeds 32768 cells"); + Ok(()) + }; + match kind { + "box" | "replace" => { + let min: Pos = serde_json::from_value(op["min"].clone())?; + let max: Pos = serde_json::from_value(op["max"].clone())?; + let mut volume = 1i64; + for i in 0..3 { + ensure!(max[i] >= min[i], "invalid box bounds"); + volume = volume + .checked_mul(i64::from(max[i]) - i64::from(min[i]) + 1) + .context("box too large")?; + } + ensure!(volume <= 32768, "box exceeds 32768 cells"); + let replace = if kind == "replace" { + Some(if let Some(s) = op["from"].as_str() { + self.id(s)? + } else { + op["from"].as_u64().context("replace from required")? as u32 + }) + } else { + None + }; + for x in min[0]..=max[0] { + for y in min[1]..=max[1] { + for z in min[2]..=max[2] { + let pos = [x, y, z]; + if op["hollow"] == true + && x != min[0] + && x != max[0] + && y != min[1] + && y != max[1] + && z != min[2] + && z != max[2] + { + continue; + } + if replace.is_none() + || Some(self.store.get_block(&world, pos)?) == replace + { + put(pos)?; + } + } + } + } + } + "line" => { + let from: Pos = serde_json::from_value(op["from"].clone())?; + let to: Pos = serde_json::from_value(op["to"].clone())?; + let steps = (0..3) + .map(|i| (i64::from(to[i]) - i64::from(from[i])).abs()) + .max() + .unwrap(); + ensure!(steps <= 32767, "line too long"); + for n in 0..=steps { + put(std::array::from_fn(|i| { + (f64::from(from[i]) + + (f64::from(to[i]) - f64::from(from[i])) * n as f64 + / steps.max(1) as f64) + .round() as i32 + }))?; + } + } + "cylinder" => { + let center: Pos = serde_json::from_value(op["center"].clone())?; + let radius = op["radius"].as_i64().context("integer radius required")?; + let height = op["height"].as_i64().context("integer height required")?; + ensure!( + (1..=64).contains(&radius) && (1..=128).contains(&height), + "cylinder dimensions out of range" + ); + for x in -radius..=radius { + for z in -radius..=radius { + if x * x + z * z > radius * radius { + continue; + } + if op["hollow"] == true && x * x + z * z < (radius - 1) * (radius - 1) { + continue; + } + for y in 0..height { + put([ + center[0] + .checked_add(x as i32) + .context("coordinate overflow")?, + center[1] + .checked_add(y as i32) + .context("coordinate overflow")?, + center[2] + .checked_add(z as i32) + .context("coordinate overflow")?, + ])?; + } + } + } + } + _ => bail!("unsupported build primitive {kind}"), + } + } + let changes: Vec<_> = cells + .into_iter() + .map(|(pos, block)| BlockChange { pos, block }) + .collect(); + let id = Uuid::new_v4().to_string(); + let count = changes.len(); + let min: Pos = std::array::from_fn(|i| changes.iter().map(|c| c.pos[i]).min().unwrap_or(0)); + let max: Pos = std::array::from_fn(|i| changes.iter().map(|c| c.pos[i]).max().unwrap_or(0)); + self.plans.insert( + id.clone(), + Plan { + world: world.clone(), + revision, + changes, + expires: Instant::now() + Duration::from_secs(300), + }, + ); + Ok( + json!({"plan_id":id,"world":world,"expected_revision":revision,"cells":count,"min":min,"max":max,"expires_in_seconds":300}), + ) + } +} +fn entity_position(v: &Value) -> Result<[f32; 3]> { + let p: [f32; 3] = serde_json::from_value(v.clone())?; + ensure!( + p.iter().all(|n| n.is_finite() && n.abs() <= 32700.), + "position outside playable limits +/-32700" + ); + Ok(p) +} + +fn split_states(s: &str) -> Vec<&str> { + let mut depth = 0; + let mut start = 0; + let mut out = Vec::new(); + for (i, c) in s.char_indices() { + match c { + '[' => depth += 1, + ']' => depth -= 1, + ',' if depth == 0 => { + out.push(&s[start..i]); + start = i + 1; + } + _ => {} + } + } + out.push(&s[start..]); + out +} diff --git a/crates/shacraft-server/src/game.rs b/crates/shacraft-server/src/game.rs new file mode 100644 index 0000000..3e89609 --- /dev/null +++ b/crates/shacraft-server/src/game.rs @@ -0,0 +1,1159 @@ +use anyhow::{Context, Result, bail, ensure}; +use serde::{Deserialize, Serialize}; +use serde_json::{Value, json}; +use shacraft_content::{Catalog, StateDefinition}; +use shacraft_core::{BlockChange, Pos, WorldStore}; +use std::{ + collections::{BTreeMap, HashMap, HashSet}, + path::Path, + sync::{ + Arc, + atomic::{AtomicUsize, Ordering}, + mpsc, + }, + time::{Duration, Instant}, +}; +use tokio::sync::{mpsc as tmpsc, oneshot}; +use uuid::Uuid; + +pub enum Command { + Query(String, Value, oneshot::Sender>), + Join(Value, Outbox, oneshot::Sender>), + Client(String, Value), + Leave(String), +} +#[derive(Clone)] +pub struct Outbox { + pub tx: tmpsc::Sender>, + pub bytes: Arc, +} +impl Outbox { + pub fn send(&self, value: Value) -> bool { + self.send_shared(Arc::new(value.to_string())) + } + pub fn send_shared(&self, value: Arc) -> bool { + let n = value.len(); + if self.bytes.fetch_add(n, Ordering::Relaxed) + n > 8 * 1024 * 1024 { + self.bytes.fetch_sub(n, Ordering::Relaxed); + return false; + } + if self.tx.try_send(value).is_err() { + self.bytes.fetch_sub(n, Ordering::Relaxed); + return false; + } + true + } +} +#[derive(Clone, Serialize, Deserialize)] +#[serde(default)] +pub struct WorldConfig { + pub spawn: [f32; 3], + pub mode: String, + pub countdown_seconds: u32, + pub round_seconds: u32, + pub min_players: usize, + pub elimination_y: f32, + pub spawn_points: Vec<[f32; 3]>, + pub spectator_spawn: [f32; 3], + pub floor_block: String, +} +impl Default for WorldConfig { + fn default() -> Self { + Self { + spawn: [0., 2., 8.], + mode: "creative".into(), + countdown_seconds: 3, + round_seconds: 180, + min_players: 2, + elimination_y: -6., + spawn_points: Vec::new(), + spectator_spawn: [13., 2., 0.], + floor_block: "minecraft:snow_block".into(), + } + } +} +impl WorldConfig { + fn validate(&self, catalog: &Catalog) -> Result<()> { + ensure!( + ["creative", "spleef", "template"].contains(&self.mode.as_str()), + "unsupported world mode" + ); + ensure!( + (1..=30).contains(&self.countdown_seconds), + "countdown_seconds must be 1..30" + ); + ensure!( + (1..=3600).contains(&self.round_seconds), + "round_seconds must be 1..3600" + ); + ensure!( + (2..=32).contains(&self.min_players), + "min_players must be 2..32" + ); + ensure!( + self.elimination_y.is_finite() && self.elimination_y.abs() <= 32700., + "elimination_y outside playable limits" + ); + ensure!( + self.spawn_points.len() <= 32, + "at most 32 spawn_points are allowed" + ); + ensure!( + self.spawn_points.is_empty() || self.spawn_points.len() >= self.min_players, + "spawn_points must accommodate min_players" + ); + for point in std::iter::once(&self.spawn) + .chain(std::iter::once(&self.spectator_spawn)) + .chain(&self.spawn_points) + { + ensure!( + point.iter().all(|n| n.is_finite() && n.abs() <= 32700.), + "spawn position outside playable limits +/-32700" + ); + ensure!( + point[1] > self.elimination_y + 0.5, + "spawn positions must be above elimination_y" + ); + } + for (i, a) in self.spawn_points.iter().enumerate() { + for b in self.spawn_points.iter().skip(i + 1) { + ensure!( + (0..3).map(|axis| (a[axis] - b[axis]).powi(2)).sum::() >= 0.64, + "spawn_points are too close together" + ); + } + } + let floor = catalog + .state(&self.floor_block) + .context("unknown floor_block")?; + ensure!( + !floor.collision.is_empty(), + "floor_block must have a solid collision shape" + ); + Ok(()) + } +} +#[derive(Clone, Default, Serialize, Deserialize)] +struct Metadata { + worlds: BTreeMap, + entities: BTreeMap, + revision: u64, + #[serde(default)] + active_matches: HashSet, +} +#[derive(Clone, Default)] +struct Input { + seq: u64, + yaw: f32, + pitch: f32, + forward: f32, + strafe: f32, + jump: bool, +} +struct Player { + id: String, + name: String, + world: String, + position: [f32; 3], + velocity: f32, + grounded: bool, + input: Input, + out: Outbox, + last_input: Instant, + last_action: Instant, + last_chat: Instant, + last_snapshot: Instant, + view: [i32; 3], + alive: bool, +} +#[derive(Clone)] +struct Match { + phase: String, + deadline: u64, + participants: HashSet, + winner: Option, +} +struct Plan { + world: String, + revision: u64, + changes: Vec, + expires: Instant, +} +pub struct Game { + pub store: WorldStore, + pub catalog: Catalog, + ids: HashMap, + pub manifest: Value, + meta: Metadata, + db: rusqlite::Connection, + players: HashMap, + matches: HashMap, + plans: HashMap, + tick: u64, + started: Instant, + max_tick_ms: f64, + last_tick_ms: f64, + slow_clients: u64, + pub jump: crate::packages::JumpModule, +} +impl Game { + pub fn open( + data: &Path, + cache: usize, + manifest: Value, + jump: crate::packages::JumpModule, + ) -> Result { + let mut store = WorldStore::open(data, cache)?; + let mut catalog = Catalog::load_builtin()?; + jump.extend_catalog(&mut catalog)?; + for s in &catalog.states { + store.register_block(&s.state)?; + } + let ids = store + .registry() + .iter() + .enumerate() + .map(|(i, s)| (s.clone(), i as u32)) + .collect(); + let db = rusqlite::Connection::open(data.join("server.sqlite3"))?; + db.execute_batch("PRAGMA journal_mode=WAL; PRAGMA synchronous=FULL; PRAGMA cache_size=-1024; CREATE TABLE IF NOT EXISTS metadata(id INTEGER PRIMARY KEY CHECK(id=1),json TEXT NOT NULL);")?; + let meta = match db.query_row("SELECT json FROM metadata WHERE id=1", [], |r| { + r.get::<_, String>(0) + }) { + Ok(s) => serde_json::from_str(&s)?, + Err(rusqlite::Error::QueryReturnedNoRows) => Metadata::default(), + Err(e) => return Err(e.into()), + }; + let mut game = Self { + store, + catalog, + ids, + manifest, + meta, + db, + players: HashMap::new(), + matches: HashMap::new(), + plans: HashMap::new(), + tick: 0, + started: Instant::now(), + max_tick_ms: 0., + last_tick_ms: 0., + slow_clients: 0, + jump, + }; + for conf in game.meta.worlds.values() { + conf.validate(&game.catalog)?; + } + game.seed()?; + for world in game.meta.active_matches.clone() { + let revision = game.store.revision(&world)?; + game.store.reset_world( + &world, + revision, + &format!("restart-reset-{}", Uuid::new_v4()), + )?; + } + if !game.meta.active_matches.is_empty() { + game.meta.active_matches.clear(); + game.save_meta()?; + } + Ok(game) + } + fn save_meta(&mut self) -> Result<()> { + let result = (|| -> Result<()> { + self.meta.revision = self + .meta + .revision + .checked_add(1) + .context("metadata revision exhausted")?; + let encoded = serde_json::to_string(&self.meta)?; + ensure!( + encoded.len() <= 8 * 1024 * 1024, + "metadata exceeds 8 MiB budget" + ); + self.db.execute("INSERT INTO metadata(id,json) VALUES(1,?1) ON CONFLICT(id) DO UPDATE SET json=excluded.json",[encoded])?; + Ok(()) + })(); + if result.is_err() { + self.meta = match self + .db + .query_row("SELECT json FROM metadata WHERE id=1", [], |r| { + r.get::<_, String>(0) + }) { + Ok(s) => serde_json::from_str(&s)?, + Err(rusqlite::Error::QueryReturnedNoRows) => Metadata::default(), + Err(e) => return Err(e.into()), + }; + } + result + } + fn id(&self, s: &str) -> Result { + let canonical = self.catalog.state(s).map(|s| s.state.as_str()).unwrap_or(s); + self.ids + .get(canonical) + .copied() + .context("unknown block state") + } + fn seed(&mut self) -> Result<()> { + let worlds = self.store.list_worlds()?; + let names: HashSet<_> = worlds.iter().map(|w| w.name.as_str()).collect(); + if !names.contains("lobby") + || self + .store + .revision("lobby") + .is_ok_and(|revision| revision == 0) + { + if !names.contains("lobby") { + self.store.create_world("lobby", None)?; + } + let mut cells = Vec::new(); + for x in -24i32..=24 { + for z in -24i32..=24 { + let state = if x.abs() < 3 || z.abs() < 3 { + "minecraft:polished_andesite" + } else if x.abs() == 24 || z.abs() == 24 { + "minecraft:stone_bricks" + } else { + "minecraft:grass_block" + }; + cells.push(BlockChange { + pos: [x, 0, z], + block: self.id(state)?, + }); + if (x.abs() == 16 && z % 8 == 0) || (z.abs() == 16 && x % 8 == 0) { + for y in 1..=4 { + cells.push(BlockChange { + pos: [x, y, z], + block: self.id(if y == 4 { + "minecraft:sea_lantern" + } else { + "minecraft:oak_log" + })?, + }); + } + } + } + } + for x in -7..=-4 { + for z in -6..=-3 { + cells.push(BlockChange { + pos: [x, 1, z], + block: self.id("shacraft:trampoline")?, + }); + } + } + for x in 5..=10 { + for z in -10..=-5 { + cells.push(BlockChange { + pos: [x, 1, z], + block: self.id("minecraft:water")?, + }); + } + } + for x in -3i32..=3 { + for y in 1..=6 { + if x.abs() == 3 || y >= 5 { + cells.push(BlockChange { + pos: [x, y, -12], + block: self.id(if y == 6 { + "minecraft:sea_lantern" + } else { + "minecraft:oxidized_copper" + })?, + }); + } + } + } + self.store.edit("lobby", 0, "seed-lobby-v1", cells)?; + } + if !names.contains("spleef_template") + || self + .store + .revision("spleef_template") + .is_ok_and(|revision| revision == 0) + { + if !names.contains("spleef_template") { + self.store.create_world("spleef_template", None)?; + } + let mut cells = Vec::new(); + for x in -14i32..=14 { + for z in -14i32..=14 { + let edge = x.abs() >= 12 || z.abs() >= 12; + cells.push(BlockChange { + pos: [x, 0, z], + block: self.id(if edge { + "minecraft:deepslate_tiles" + } else { + "minecraft:snow_block" + })?, + }); + if x.abs() == 14 || z.abs() == 14 { + for y in 1..=3 { + cells.push(BlockChange { + pos: [x, y, z], + block: self.id(if y == 3 { + "minecraft:sea_lantern" + } else { + "minecraft:glass" + })?, + }); + } + } + } + } + self.store + .edit("spleef_template", 0, "seed-spleef-v1", cells)?; + } + for name in ["arena_1", "arena_2"] { + if !names.contains(name) { + self.store.create_world(name, Some("spleef_template"))?; + } + self.meta.worlds.entry(name.into()).or_insert(WorldConfig { + spawn: [0., 2., 8.], + mode: "spleef".into(), + ..WorldConfig::default() + }); + } + self.meta + .worlds + .entry("spleef_template".into()) + .or_insert(WorldConfig { + spawn: [0., 2., 8.], + mode: "template".into(), + ..WorldConfig::default() + }); + self.meta.worlds.entry("lobby".into()).or_default(); + if !names.contains("gallery") + || self + .store + .revision("gallery") + .is_ok_and(|revision| revision == 0) + { + if !names.contains("gallery") { + self.store.create_world("gallery", None)?; + } + let floor = self.id("minecraft:polished_andesite")?; + let path = self.id("minecraft:deepslate_tiles")?; + let mut cells = Vec::with_capacity(18000); + for x in -64i32..64 { + for z in -64i32..64 { + let marker = (x + 48).rem_euclid(3) == 0 && (z + 57).rem_euclid(3) == 0; + cells.push(BlockChange { + pos: [x, 0, z], + block: if marker { floor } else { path }, + }); + } + } + for sample in self.catalog.sampler() { + cells.push(BlockChange { + pos: sample.position, + block: self.id(&sample.state)?, + }); + } + self.store.edit("gallery", 0, "seed-gallery-v1", cells)?; + } + self.meta + .worlds + .entry("gallery".into()) + .or_insert(WorldConfig { + spawn: [-50., 2., 58.], + ..WorldConfig::default() + }); + self.save_meta()?; + Ok(()) + } + pub fn run(mut self, rx: mpsc::Receiver) { + let mut next = Instant::now() + Duration::from_millis(50); + loop { + match rx.recv_timeout(next.saturating_duration_since(Instant::now())) { + Ok(Command::Query(method, p, reply)) => { + let result = self.query(&method, p); + let _ = reply.send(result); + } + Ok(Command::Join(p, out, reply)) => { + let result = self.join(p, out); + let _ = reply.send(result); + } + Ok(Command::Client(id, p)) => { + if let Err(e) = self.client(&id, p) { + self.send(&id, json!({"type":"error","message":e.to_string()})); + } + } + Ok(Command::Leave(id)) => { + self.players.remove(&id); + } + Err(mpsc::RecvTimeoutError::Disconnected) => break, + Err(mpsc::RecvTimeoutError::Timeout) => {} + } + if Instant::now() >= next { + let start = Instant::now(); + self.step(); + self.last_tick_ms = start.elapsed().as_secs_f64() * 1000.; + self.max_tick_ms = self.max_tick_ms.max(self.last_tick_ms); + next += Duration::from_millis(50); + if next < Instant::now() { + next = Instant::now() + Duration::from_millis(50); + } + } + } + } + fn send(&mut self, id: &str, value: Value) { + if self.players.get(id).is_some_and(|p| !p.out.send(value)) { + self.players.remove(id); + self.slow_clients += 1; + } + } + fn broadcast(&mut self, world: &str, value: Value) { + let value = Arc::new(value.to_string()); + let dead: Vec<_> = self + .players + .iter() + .filter(|(_, p)| p.world == world && !p.out.send_shared(value.clone())) + .map(|(id, _)| id.clone()) + .collect(); + for id in dead { + self.players.remove(&id); + self.slow_clients += 1; + } + } + fn config(&self, world: &str) -> WorldConfig { + self.meta.worlds.get(world).cloned().unwrap_or_default() + } + fn players_json(&self, world: &str) -> Value { + json!(self.players.values().filter(|p|p.world==world).map(|p|json!({"id":p.id,"name":p.name,"position":p.position,"yaw":p.input.yaw,"pitch":p.input.pitch,"alive":p.alive})).collect::>()) + } + fn materials(&self, blocks: &[BlockChange]) -> Vec { + let ids: HashSet<_> = blocks.iter().map(|b| b.block).collect(); + let mut budget = 0; + ids.into_iter() + .filter_map(|id| self.material(id)) + .take(256) + .take_while(|material| { + budget += material.to_string().len(); + budget <= 128 * 1024 + }) + .collect() + } + fn material(&self, id: u32) -> Option { + let state = self.store.registry().get(id as usize)?; + let mut v = if let Some(s) = self.catalog.state(state) { + json!(s) + } else { + json!({"state":state,"color":[190,60,185],"collision":[{"min":[0,0,0],"max":[1,1,1]}],"render":[{"min":[0,0,0],"max":[1,1,1]}],"coverage":{"render":"unknown-placeholder","collision":"unknown-full-cube"}}) + }; + v["id"] = json!(id); + Some(v) + } + fn snapshot(&mut self, id: &str, welcome: bool) -> Result<()> { + let p = self.players.get(id).context("not joined")?; + let world = p.world.clone(); + let center = p.position.map(|v| (v.floor() as i32).div_euclid(16) * 16); + let blocks = self.store.read_region( + &world, + [center[0] - 32, center[1] - 8, center[2] - 32], + [center[0] + 31, center[1] + 31, center[2] + 31], + )?; + let value = json!({"type":if welcome{"welcome"}else{"snapshot"},"id":id,"world":world,"revision":self.store.revision(&world)?,"spawn":p.position,"blocks":blocks,"materials":self.materials(&blocks),"players":self.players_json(&world),"entities":self.entity_list(&world),"manifest_hash":self.manifest["hash"],"view_center":center}); + if let Some(p) = self.players.get_mut(id) { + p.view = center; + p.last_snapshot = Instant::now(); + } + self.send(id, value); + Ok(()) + } + fn join(&mut self, p: Value, out: Outbox) -> Result { + ensure!(self.players.len() < 32, "server full (32 clients)"); + ensure!(p["protocol"] == 1, "unsupported protocol"); + ensure!( + p["manifest_hash"] == self.manifest["hash"], + "package manifest mismatch; refresh resources" + ); + let world = p["world"].as_str().unwrap_or("lobby"); + self.store.revision(world)?; + ensure!( + self.config(world).mode != "template", + "template is not a playable world" + ); + let name = p["name"].as_str().unwrap_or("Игрок").trim(); + ensure!( + !name.is_empty() && name.chars().count() <= 32 && !name.chars().any(char::is_control), + "invalid player name" + ); + let id = Uuid::new_v4().to_string(); + let now = Instant::now(); + self.players.insert( + id.clone(), + Player { + id: id.clone(), + name: name.into(), + world: world.into(), + position: if self.matches.contains_key(world) { + self.config(world).spectator_spawn + } else { + self.config(world).spawn + }, + velocity: 0., + grounded: false, + input: Input::default(), + out, + last_input: now, + last_action: now - Duration::from_secs(1), + last_chat: now - Duration::from_secs(1), + last_snapshot: now, + view: [0; 3], + alive: !self.matches.contains_key(world), + }, + ); + self.snapshot(&id, true)?; + Ok(id) + } + fn client(&mut self, id: &str, p: Value) -> Result<()> { + let typ = p["type"].as_str().context("message type required")?; + let player = self.players.get(id).context("not joined")?; + let world = player.world.clone(); + match typ { + "input" => { + let seq = p["seq"].as_u64().context("input sequence required")?; + let yaw = number(&p, "yaw")?; + let pitch = number(&p, "pitch")?; + let forward = number(&p, "forward")?; + let strafe = number(&p, "strafe")?; + ensure!( + forward.abs() <= 1. + && strafe.abs() <= 1. + && pitch.abs() <= 1.6 + && yaw.abs() < 1e7, + "invalid movement input" + ); + let player = self.players.get_mut(id).unwrap(); + if seq > player.input.seq { + player.input = Input { + seq, + yaw, + pitch, + forward, + strafe, + jump: p["jump"].as_bool().unwrap_or(false), + }; + player.last_input = Instant::now(); + } + } + "break" | "place" => { + ensure!( + player.last_action.elapsed() >= Duration::from_millis(110), + "edit rate limited" + ); + ensure!(player.alive, "spectators cannot edit"); + let pos: Pos = serde_json::from_value(p["pos"].clone())?; + let hit = self.raycast(id)?; + let Some((hit, normal)) = hit else { + bail!("no reachable block") + }; + if typ == "break" { + ensure!(pos == hit, "block outside line of sight"); + } else { + ensure!( + pos == std::array::from_fn::<_, 3, _>(|i| hit[i] + normal[i]), + "placement outside line of sight" + ); + } + let conf = self.config(&world); + if conf.mode == "spleef" { + ensure!(typ=="break"&&self.matches.get(&world).is_some_and(|m|m.phase=="active"&&m.participants.contains(id)),"Spleef allows breaking the configured floor only during a match"); + ensure!( + self.store.get_block(&world, pos)? == self.id(&conf.floor_block)?, + "arena boundary is protected" + ); + } + let block = if typ == "break" { + 0 + } else if let Some(s) = p["state"].as_str() { + self.id(s)? + } else { + p["block"] + .as_u64() + .filter(|v| *v < self.store.registry().len() as u64) + .context("invalid block id")? as u32 + }; + if block != 0 { + ensure!( + self.store.get_block(&world, pos)? == 0, + "placement cell occupied" + ); + ensure!( + !self + .players + .values() + .filter(|q| q.world == world) + .any(|q| intersects( + q.position, + [pos[0] as f32, pos[1] as f32, pos[2] as f32], + [pos[0] as f32 + 1., pos[1] as f32 + 1., pos[2] as f32 + 1.] + )), + "placement intersects a player" + ); + } + let changes = vec![BlockChange { pos, block }]; + let rev = self.store.revision(&world)?; + let result = self.store.edit( + &world, + rev, + &format!("play-{}", Uuid::new_v4()), + changes.clone(), + )?; + self.players.get_mut(id).unwrap().last_action = Instant::now(); + self.broadcast(&world,json!({"type":"blocks","revision":result.revision,"changes":changes,"materials":self.materials(&changes)})); + } + "switch_world" => { + ensure!( + player.last_snapshot.elapsed() >= Duration::from_secs(1), + "world switch rate limited" + ); + let target = p["world"].as_str().context("world required")?; + self.store.revision(target)?; + let conf = self.config(target); + ensure!(conf.mode != "template", "template is not playable"); + if let Some(m) = self.matches.get_mut(&world) { + m.participants.remove(id); + } + let spectator = self.matches.contains_key(target); + let q = self.players.get_mut(id).unwrap(); + q.world = target.into(); + q.position = if spectator { + conf.spectator_spawn + } else { + conf.spawn + }; + q.velocity = 0.; + q.input = Input::default(); + q.alive = !spectator; + self.snapshot(id, false)?; + } + "resync" => { + ensure!( + player.last_snapshot.elapsed() >= Duration::from_millis(500), + "snapshot rate limited" + ); + self.snapshot(id, false)?; + } + "respawn" => { + ensure!( + !self + .matches + .get(&world) + .is_some_and(|m| m.phase == "active" || m.phase == "countdown"), + "respawn is disabled during a match" + ); + let spawn = self.config(&world).spawn; + let q = self.players.get_mut(id).unwrap(); + q.position = spawn; + q.velocity = 0.; + q.alive = true; + } + "start_match" => { + self.start_match(&world)?; + } + "chat" => { + ensure!( + player.last_chat.elapsed() >= Duration::from_millis(700), + "chat rate limited" + ); + let text = p["text"].as_str().context("text required")?.trim(); + ensure!( + !text.is_empty() + && text.chars().count() <= 240 + && !text.chars().any(char::is_control), + "invalid chat text" + ); + let name = player.name.clone(); + self.players.get_mut(id).unwrap().last_chat = Instant::now(); + self.broadcast(&world, json!({"type":"chat","name":name,"text":text})); + } + "ping" => self.send(id, json!({"type":"pong","client_time":p["client_time"]})), + _ => bail!("unknown client message"), + } + Ok(()) + } + fn collision_boxes( + &mut self, + world: &str, + min: Pos, + max: Pos, + ) -> Result> { + let mut boxes = Vec::new(); + for cell in self.store.read_region(world, min, max)? { + let local = self + .definition(cell.block) + .map(|s| s.collision.clone()) + .unwrap_or_else(|| vec![shacraft_content::Aabb::new([0.; 3], [1.; 3])]); + for b in local { + boxes.push(shacraft_content::Aabb::new( + std::array::from_fn(|i| cell.pos[i] as f32 + b.min[i]), + std::array::from_fn(|i| cell.pos[i] as f32 + b.max[i]), + )); + } + } + Ok(boxes) + } + #[cfg(test)] + fn collision(&mut self, world: &str, p: [f32; 3]) -> bool { + let center = p.map(|v| v.floor() as i32); + self.collision_boxes( + world, + [center[0] - 3, center[1] - 3, center[2] - 3], + [center[0] + 3, center[1] + 4, center[2] + 3], + ) + .map(|boxes| boxes.iter().any(|b| intersects(p, b.min, b.max))) + .unwrap_or(true) + } + fn definition(&self, id: u32) -> Option<&StateDefinition> { + self.store + .registry() + .get(id as usize) + .and_then(|s| self.catalog.state(s)) + } + fn step(&mut self) { + self.tick += 1; + let ids: Vec<_> = self.players.keys().cloned().collect(); + for id in ids { + let Some(mut p) = self.players.remove(&id) else { + continue; + }; + if p.last_input.elapsed() > Duration::from_secs(1) { + p.input.forward = 0.; + p.input.strafe = 0.; + p.input.jump = false; + } + let conf = self.config(&p.world); + let frozen = self + .matches + .get(&p.world) + .is_some_and(|m| m.phase == "countdown"); + let speed = if frozen { 0. } else { 5. }; + let len = (p.input.forward * p.input.forward + p.input.strafe * p.input.strafe) + .sqrt() + .max(1.); + let dx = (p.input.yaw.sin() * p.input.forward + p.input.yaw.cos() * p.input.strafe) + * speed + * 0.05 + / len; + let dz = (-p.input.yaw.cos() * p.input.forward + p.input.yaw.sin() * p.input.strafe) + * speed + * 0.05 + / len; + if p.input.jump && p.grounded && !frozen { + let under = [ + p.position[0].floor() as i32, + (p.position[1] - 0.2).floor() as i32, + p.position[2].floor() as i32, + ]; + let trampoline = self + .store + .get_block(&p.world, under) + .ok() + .and_then(|id| self.store.registry().get(id as usize)) + .is_some_and(|state| self.jump.handles(state)); + p.velocity = if trampoline { + self.jump.call().unwrap_or(7.) + } else { + 7. + }; + p.grounded = false; + } + p.velocity = (p.velocity - 20. * 0.05).max(-30.); + let movement = [dx, p.velocity * 0.05, dz]; + p.grounded = false; + let center = p.position.map(|v| v.floor() as i32); + let boxes = match self.collision_boxes( + &p.world, + [center[0] - 3, center[1] - 5, center[2] - 3], + [center[0] + 3, center[1] + 5, center[2] + 3], + ) { + Ok(boxes) => boxes, + Err(e) => { + p.out + .send(json!({"type":"error","message":format!("world read failed: {e}")})); + self.players.insert(id, p); + continue; + } + }; + for axis in [0, 2, 1] { + if movement[axis].abs() < 1e-6 { + continue; + } + let steps = (movement[axis].abs() / 0.15).ceil().max(1.) as usize; + for _ in 0..steps { + let mut candidate = p.position; + candidate[axis] += movement[axis] / steps as f32; + if boxes.iter().any(|b| intersects(candidate, b.min, b.max)) { + let mut low = 0.; + let mut high = 1.; + for _ in 0..10 { + let t = (low + high) * 0.5; + let mut at = p.position; + at[axis] += (candidate[axis] - p.position[axis]) * t; + if boxes.iter().any(|b| intersects(at, b.min, b.max)) { + high = t; + } else { + low = t; + } + } + p.position[axis] += (candidate[axis] - p.position[axis]) * low; + if axis == 1 { + p.grounded = movement[1] < 0.; + p.velocity = 0.; + } + break; + } + p.position = candidate; + } + } + if p.position[1] < conf.elimination_y || p.position.iter().any(|v| v.abs() > 32700.) { + let active = self + .matches + .get(&p.world) + .is_some_and(|m| m.phase == "active"); + if active { + p.alive = false; + p.position = conf.spectator_spawn; + } else { + p.position = conf.spawn; + } + p.velocity = 0.; + } + self.players.insert(id.clone(), p); + let p = &self.players[&id]; + let center = p.position.map(|v| (v.floor() as i32).div_euclid(16) * 16); + if center != p.view && p.last_snapshot.elapsed() > Duration::from_secs(2) { + let _ = self.snapshot(&id, false); + } + } + self.advance_matches(); + let worlds: HashSet<_> = self.players.values().map(|p| p.world.clone()).collect(); + for world in worlds { + let players = self.players_json(&world); + let m = self.match_json(&world); + let ids: Vec<_> = self + .players + .values() + .filter(|p| p.world == world) + .map(|p| (p.id.clone(), p.input.seq)) + .collect(); + for (id, ack) in ids { + self.send( + &id, + json!({"type":"state","tick":self.tick,"ack":ack,"players":players,"match":m}), + ); + } + } + self.plans.retain(|_, p| p.expires > Instant::now()); + } + fn raycast(&mut self, id: &str) -> Result> { + let p = self.players.get(id).context("not joined")?; + let world = p.world.clone(); + let eye = [p.position[0], p.position[1] + 1.62, p.position[2]]; + let dir = [ + p.input.yaw.sin() * p.input.pitch.cos(), + p.input.pitch.sin(), + -p.input.yaw.cos() * p.input.pitch.cos(), + ]; + let end = std::array::from_fn::<_, 3, _>(|i| eye[i] + dir[i] * 6.); + let min = std::array::from_fn(|i| eye[i].min(end[i]).floor() as i32 - 3); + let max = std::array::from_fn(|i| eye[i].max(end[i]).ceil() as i32 + 3); + let mut nearest: Option<(f32, Pos, Pos)> = None; + for change in self.store.read_region(&world, min, max)? { + let cell = change.pos; + let boxes = self + .definition(change.block) + .map(|s| s.render.clone()) + .unwrap_or_else(|| vec![shacraft_content::Aabb::new([0.; 3], [1.; 3])]); + for b in boxes { + if let Some((t, normal)) = ray_box( + eye, + dir, + std::array::from_fn(|i| cell[i] as f32 + b.min[i]), + std::array::from_fn(|i| cell[i] as f32 + b.max[i]), + ) && nearest.is_none_or(|old| t < old.0) + { + nearest = Some((t, cell, normal)); + } + } + } + Ok(nearest.map(|(_, cell, normal)| (cell, normal))) + } + + fn start_match(&mut self, world: &str) -> Result { + let conf = self.config(world); + conf.validate(&self.catalog)?; + ensure!(conf.mode == "spleef", "world is not a Spleef arena"); + ensure!( + self.matches.get(world).is_none_or(|m| m.phase == "waiting"), + "match already in progress" + ); + let ids: Vec<_> = self + .players + .values() + .filter(|p| p.world == world) + .map(|p| p.id.clone()) + .collect(); + ensure!( + ids.len() >= conf.min_players, + "Spleef needs at least {} players", + conf.min_players + ); + ensure!( + conf.spawn_points.is_empty() || conf.spawn_points.len() >= ids.len(), + "configured spawn_points cannot accommodate all joined players" + ); + self.meta.active_matches.insert(world.into()); + self.save_meta()?; + let rev = self.store.revision(world)?; + self.store + .reset_world(world, rev, &format!("match-reset-{}", Uuid::new_v4()))?; + for (i, id) in ids.iter().enumerate() { + let angle = i as f32 / ids.len() as f32 * std::f32::consts::TAU; + let p = self.players.get_mut(id).unwrap(); + p.position = conf.spawn_points.get(i).copied().unwrap_or([ + angle.sin() * 7., + conf.spawn[1], + angle.cos() * 7., + ]); + p.alive = true; + p.velocity = 0.; + } + self.matches.insert( + world.into(), + Match { + phase: "countdown".into(), + deadline: self.tick + u64::from(conf.countdown_seconds) * 20, + participants: ids.iter().cloned().collect(), + winner: None, + }, + ); + self.resnapshot(world); + Ok(self.match_json(world)) + } + fn advance_matches(&mut self) { + let worlds: Vec<_> = self.matches.keys().cloned().collect(); + for world in worlds { + let conf = self.config(&world); + let m = self.matches[&world].clone(); + if m.phase == "countdown" && self.tick >= m.deadline { + let m = self.matches.get_mut(&world).unwrap(); + m.phase = "active".into(); + m.deadline = self.tick + 20 * u64::from(conf.round_seconds); + } else if m.phase == "active" { + let alive: Vec<_> = m + .participants + .iter() + .filter_map(|id| self.players.get(id)) + .filter(|p| p.world == world && p.alive) + .map(|p| p.name.clone()) + .collect(); + if alive.len() <= 1 || self.tick >= m.deadline { + let m = self.matches.get_mut(&world).unwrap(); + m.phase = "finished".into(); + m.deadline = self.tick + 100; + m.winner = if alive.len() == 1 { + Some(alive[0].clone()) + } else { + None + }; + } + } else if m.phase == "finished" && self.tick >= m.deadline { + let rev = self.store.revision(&world).unwrap_or(0); + if self + .store + .reset_world(&world, rev, &format!("round-end-{}", Uuid::new_v4())) + .is_ok() + { + for p in self.players.values_mut().filter(|p| p.world == world) { + p.position = conf.spawn; + p.velocity = 0.; + p.alive = true; + } + self.meta.active_matches.remove(&world); + let _ = self.save_meta(); + self.matches.remove(&world); + self.resnapshot(&world); + } + } + } + } + fn match_json(&self, world: &str) -> Value { + if let Some(m) = self.matches.get(world) { + json!({"phase":m.phase,"remaining":m.deadline.saturating_sub(self.tick)as f32/20.,"winner":m.winner,"rules":self.config(world)}) + } else { + json!({"phase":"waiting","remaining":0,"rules":self.config(world)}) + } + } + pub(super) fn resnapshot(&mut self, world: &str) { + let ids: Vec<_> = self + .players + .values() + .filter(|p| p.world == world) + .map(|p| p.id.clone()) + .collect(); + for id in ids { + let _ = self.snapshot(&id, false); + } + } + fn entity_list(&self, world: &str) -> Vec { + self.meta + .entities + .values() + .filter(|e| e["world"] == world) + .map(|e| json!({"id":e["id"],"kind":e["kind"],"position":e["position"],"yaw":e["yaw"]})) + .collect() + } +} +fn intersects(p: [f32; 3], min: [f32; 3], max: [f32; 3]) -> bool { + let a = [p[0] - 0.3, p[1] + 0.001, p[2] - 0.3]; + let b = [p[0] + 0.3, p[1] + 1.799, p[2] + 0.3]; + (0..3).all(|i| a[i] < max[i] - 0.0001 && b[i] > min[i] + 0.0001) +} +fn number(p: &Value, key: &str) -> Result { + let n = p[key] + .as_f64() + .context(format!("{key} must be a finite number"))?; + ensure!(n.is_finite() && n.abs() < 1e8, "number out of range"); + Ok(n as f32) +} +fn string<'a>(p: &'a Value, key: &str) -> Result<&'a str> { + p[key].as_str().context(format!("{key} string required")) +} +include!("control.rs"); + +fn ray_box(eye: [f32; 3], dir: [f32; 3], min: [f32; 3], max: [f32; 3]) -> Option<(f32, Pos)> { + let mut near = 0f32; + let mut far = 6f32; + let mut normal = [0; 3]; + for i in 0..3 { + if dir[i].abs() < 1e-7 { + if eye[i] < min[i] || eye[i] > max[i] { + return None; + } + continue; + } + let a = (min[i] - eye[i]) / dir[i]; + let b = (max[i] - eye[i]) / dir[i]; + let entry = a.min(b); + if entry > near { + near = entry; + normal = [0; 3]; + normal[i] = if dir[i] > 0. { -1 } else { 1 }; + } + far = far.min(a.max(b)); + if near > far { + return None; + } + } + if normal == [0; 3] { + None + } else { + Some((near, normal)) + } +} +#[cfg(test)] +#[path = "tests.rs"] +mod tests; diff --git a/crates/shacraft-server/src/main.rs b/crates/shacraft-server/src/main.rs new file mode 100644 index 0000000..6392d84 --- /dev/null +++ b/crates/shacraft-server/src/main.rs @@ -0,0 +1,342 @@ +mod game; +mod packages; +mod render; +use anyhow::{Context, Result}; +use axum::{ + Json, Router, + extract::{ + DefaultBodyLimit, Path as AxPath, Query, State, WebSocketUpgrade, + ws::{Message, WebSocket}, + }, + http::{HeaderMap, StatusCode, header}, + response::{IntoResponse, Response}, + routing::{get, post}, +}; +use clap::Parser; +use futures_util::{SinkExt, StreamExt}; +use serde_json::{Value, json}; +use std::{ + path::PathBuf, + sync::{ + Arc, + atomic::{AtomicUsize, Ordering}, + mpsc, + }, + time::{Duration, Instant}, +}; +use tokio::sync::{mpsc as tmpsc, oneshot}; +use tower_http::services::ServeDir; +#[derive(Parser)] +#[command(about = "Shacraft authoritative voxel server + browser client")] +struct Args { + #[arg(long, default_value = "127.0.0.1:4000")] + listen: String, + #[arg(long, default_value = "data")] + data: PathBuf, + #[arg(long, default_value_t = 64)] + cache_sections: usize, + #[arg(long,default_value=concat!(env!("CARGO_MANIFEST_DIR"),"/../../client"))] + client: PathBuf, + #[arg(long,default_value=concat!(env!("CARGO_MANIFEST_DIR"),"/../../packages"))] + packages: PathBuf, +} +#[derive(Clone)] +struct App { + tx: mpsc::SyncSender, + token: Arc, + packages: Arc>, + sockets: Arc, +} +impl App { + async fn query(&self, method: &str, p: Value) -> Result { + let (tx, rx) = oneshot::channel(); + self.tx + .try_send(game::Command::Query(method.into(), p, tx)) + .map_err(|_| anyhow::anyhow!("server command queue busy"))?; + tokio::time::timeout(Duration::from_secs(25), rx) + .await + .context("server query timeout")? + .context("server stopped")? + } +} +#[tokio::main] +async fn main() -> Result<()> { + let args = Args::parse(); + anyhow::ensure!( + (1..=4096).contains(&args.cache_sections), + "cache_sections must be 1..4096" + ); + std::fs::create_dir_all(&args.data)?; + let token_path = args.data.join("control.token"); + let token = if token_path.exists() { + std::fs::read_to_string(&token_path)?.trim().to_owned() + } else { + let token = format!( + "{}{}", + uuid::Uuid::new_v4().simple(), + uuid::Uuid::new_v4().simple() + ); + use std::io::Write; + let mut options = std::fs::OpenOptions::new(); + options.write(true).create_new(true); + #[cfg(unix)] + { + use std::os::unix::fs::OpenOptionsExt; + options.mode(0o600); + } + options.open(&token_path)?.write_all(token.as_bytes())?; + token + }; + anyhow::ensure!( + token.len() >= 32, + "control token must have at least 32 characters" + ); + let loaded = shacraft_content::load_packages(&args.packages)?; + let package_manifest = packages::manifest(&loaded); + let jump = packages::JumpModule::load(&loaded)?; + eprintln!("Loading durable worlds and complete Java 26.2 catalog…"); + let game = game::Game::open(&args.data, args.cache_sections, package_manifest, jump)?; + let (tx, rx) = mpsc::sync_channel(64); + std::thread::Builder::new() + .name("shacraft-world".into()) + .spawn(move || game.run(rx))?; + let app = App { + tx, + token: Arc::new(token), + packages: Arc::new(loaded), + sockets: Arc::new(tokio::sync::Semaphore::new(32)), + }; + let router = Router::new() + .route("/api/health", get(health)) + .route("/api/manifest", get(manifest)) + .route("/api/worlds", get(worlds)) + .route("/api/catalog", get(catalog)) + .route("/api/entities", get(entities)) + .route("/api/metrics", get(metrics)) + .route("/api/control", post(control)) + .route("/packages/{id}/{version}/{*path}", get(resource)) + .route("/ws", get(websocket)) + .fallback_service(ServeDir::new(&args.client)) + .layer(DefaultBodyLimit::max(2 * 1024 * 1024)) + .layer(tower::limit::ConcurrencyLimitLayer::new(16)) + .with_state(app); + let listener = tokio::net::TcpListener::bind(&args.listen).await?; + eprintln!( + "Shacraft ready: http://{} · data {} · 20 ticks/s", + listener.local_addr()?, + args.data.display() + ); + axum::serve(listener, router) + .with_graceful_shutdown(async { + let _ = tokio::signal::ctrl_c().await; + }) + .await?; + Ok(()) +} +fn response(result: Result) -> Response { + match result { + Ok(v) => Json(v).into_response(), + Err(e) => ( + StatusCode::BAD_REQUEST, + Json(json!({"error":e.to_string()})), + ) + .into_response(), + } +} +async fn health(State(app): State) -> Response { + response(app.query("health", json!({})).await) +} +async fn manifest(State(app): State) -> Response { + response(app.query("manifest", json!({})).await) +} +async fn worlds(State(app): State) -> Response { + response(app.query("world.list", json!({})).await) +} +async fn metrics(State(app): State) -> Response { + response(app.query("metrics", json!({})).await) +} +async fn entities(State(app): State) -> Response { + response(app.query("entity.catalog", json!({})).await) +} +async fn catalog( + State(app): State, + Query(q): Query>, +) -> Response { + let p = json!({"query":q.get("query"),"ids":q.get("ids"),"states":q.get("states"),"offset":q.get("offset").and_then(|s|s.parse::().ok()).unwrap_or(0),"limit":q.get("limit").and_then(|s|s.parse::().ok()).unwrap_or(64)}); + response(app.query("catalog.search", p).await) +} +async fn control(State(app): State, headers: HeaderMap, Json(body): Json) -> Response { + if headers + .get(header::AUTHORIZATION) + .and_then(|v| v.to_str().ok()) + != Some(format!("Bearer {}", app.token).as_str()) + { + return ( + StatusCode::UNAUTHORIZED, + Json(json!({"error":"control token required"})), + ) + .into_response(); + } + if let Some(origin) = headers.get(header::ORIGIN).and_then(|v| v.to_str().ok()) + && !same_origin(&headers, origin) + { + return StatusCode::FORBIDDEN.into_response(); + } + let Some(method) = body["method"].as_str() else { + return response(Err(anyhow::anyhow!("method required"))); + }; + match app + .query(method, body.get("params").cloned().unwrap_or(json!({}))) + .await + { + Ok(v) => Json(json!({"result":v})).into_response(), + Err(e) => ( + StatusCode::BAD_REQUEST, + Json(json!({"error":e.to_string()})), + ) + .into_response(), + } +} +async fn resource( + State(app): State, + AxPath((id, version, path)): AxPath<(String, String, String)>, +) -> Response { + let Some(p) = app + .packages + .iter() + .find(|p| p.manifest.id == id && p.manifest.version == version) + else { + return StatusCode::NOT_FOUND.into_response(); + }; + match p.public_resource(&path) { + Ok(bytes) => { + let mime = if path.ends_with(".png") { + "image/png" + } else if path.ends_with(".wav") { + "audio/wav" + } else if path.ends_with(".json") { + "application/json" + } else { + "text/plain; charset=utf-8" + }; + ( + [ + (header::CONTENT_TYPE, mime), + (header::CACHE_CONTROL, "public, max-age=0, must-revalidate"), + (header::X_CONTENT_TYPE_OPTIONS, "nosniff"), + ], + bytes, + ) + .into_response() + } + Err(_) => StatusCode::NOT_FOUND.into_response(), + } +} +fn same_origin(headers: &HeaderMap, origin: &str) -> bool { + headers + .get(header::HOST) + .and_then(|v| v.to_str().ok()) + .is_some_and(|host| { + origin == format!("http://{host}") || origin == format!("https://{host}") + }) +} +async fn websocket(State(app): State, headers: HeaderMap, ws: WebSocketUpgrade) -> Response { + if headers + .get(header::ORIGIN) + .and_then(|v| v.to_str().ok()) + .is_some_and(|o| !same_origin(&headers, o)) + { + return StatusCode::FORBIDDEN.into_response(); + } + let Ok(permit) = app.sockets.clone().try_acquire_owned() else { + return StatusCode::SERVICE_UNAVAILABLE.into_response(); + }; + ws.max_message_size(65536) + .max_frame_size(65536) + .on_upgrade(move |socket| session(socket, app, permit)) +} +async fn session(mut socket: WebSocket, app: App, _permit: tokio::sync::OwnedSemaphorePermit) { + let join = match tokio::time::timeout(Duration::from_secs(10), socket.recv()).await { + Ok(Some(Ok(Message::Text(text)))) => serde_json::from_str::(&text).ok(), + _ => None, + }; + let Some(join) = join else { return }; + if join["type"] != "join" { + return; + } + let (tx, mut rx) = tmpsc::channel(16); + let bytes = Arc::new(AtomicUsize::new(0)); + let out = game::Outbox { + tx, + bytes: bytes.clone(), + }; + let (reply, answer) = oneshot::channel(); + if app + .tx + .try_send(game::Command::Join(join, out, reply)) + .is_err() + { + return; + } + let id = match tokio::time::timeout(Duration::from_secs(25), answer).await { + Ok(Ok(Ok(id))) => id, + Ok(Ok(Err(e))) => { + let _ = socket + .send(Message::Text( + json!({"type":"error","message":e.to_string()}) + .to_string() + .into(), + )) + .await; + return; + } + _ => return, + }; + let (mut writer, mut reader) = socket.split(); + let sending = async { + while let Some(text) = rx.recv().await { + let n = text.len(); + let sent = tokio::time::timeout( + Duration::from_secs(5), + writer.send(Message::Text((*text).clone().into())), + ) + .await; + bytes.fetch_sub(n, Ordering::Relaxed); + if !matches!(sent, Ok(Ok(()))) { + break; + } + } + }; + let receiving = async { + let mut start = Instant::now(); + let mut count = 0; + while let Some(Ok(message)) = reader.next().await { + if start.elapsed() >= Duration::from_secs(1) { + start = Instant::now(); + count = 0; + } + count += 1; + if count > 80 { + break; + } + match message { + Message::Text(text) => { + let Ok(value) = serde_json::from_str(&text) else { + break; + }; + if app + .tx + .try_send(game::Command::Client(id.clone(), value)) + .is_err() + { + break; + } + } + Message::Close(_) => break, + _ => {} + } + } + }; + tokio::select! {_=sending=>{},_=receiving=>{}} + let _ = app.tx.try_send(game::Command::Leave(id)); +} diff --git a/crates/shacraft-server/src/packages.rs b/crates/shacraft-server/src/packages.rs new file mode 100644 index 0000000..cd01a14 --- /dev/null +++ b/crates/shacraft-server/src/packages.rs @@ -0,0 +1,413 @@ +use anyhow::{Context, Result, ensure}; +use serde_json::{Value, json}; +use sha2::{Digest, Sha256}; +use shacraft_content::Package; +use wasmi::{Config, Engine, Linker, Module, Store, StoreLimits, StoreLimitsBuilder, TypedFunc}; +pub fn manifest(packages: &[Package]) -> Value { + let public: Vec<_> = packages + .iter() + .map(|p| { + let mut m = p.manifest.client_manifest(); + let files: Vec<_> = p + .manifest + .resources + .iter() + .filter(|r| r.scope != "server") + .map(|r| { + let mut v = json!(r); + v["url"] = json!(format!( + "/packages/{}/{}/{}", + p.manifest.id, p.manifest.version, r.path + )); + v["kind"] = json!(r.role); + v + }) + .collect(); + m["files"] = json!(files); + m.as_object_mut().unwrap().remove("resources"); + m + }) + .collect(); + let hash = format!("{:x}", Sha256::digest(serde_json::to_vec(&public).unwrap())); + json!({"protocol":1,"hash":hash,"packages":public,"minecraft_version":"26.2","client_integrity":"manifest compatibility only; executable integrity is not proven"}) +} +pub struct JumpModule { + store: Store, + function: TypedFunc<(), f32>, + calls: u64, + traps: u64, + definitions: Vec, + hook_states: std::collections::HashSet, +} +impl JumpModule { + pub fn load(packages: &[Package]) -> Result { + let mut source = None; + for p in packages { + for r in &p.manifest.resources { + if r.role == "wasm-on-jump" { + ensure!(source.is_none(), "only one on_jump provider may be active"); + source = Some(p.read_resource(&r.path)?); + } + } + } + let mut module = Self::from_bytes(&source.context("on_jump module missing")?)?; + module.hook_states.clear(); + for package in packages { + for resource in &package.manifest.resources { + if resource.role == "definitions" { + let data: Value = + serde_json::from_slice(&package.read_resource(&resource.path)?)?; + ensure!( + data["schema"] == 1, + "unsupported content definitions schema" + ); + if let Some(value) = data.get("blocks") { + let blocks = value + .as_array() + .context("content blocks must be an array")?; + ensure!( + package + .manifest + .capabilities + .iter() + .any(|c| c == "blocks.define"), + "blocks.define capability required" + ); + ensure!( + module.definitions.len() + blocks.len() <= 4096, + "package block limit exceeded" + ); + for block in blocks { + if block["behavior"]["server_hook"] == "on_jump" { + module.hook_states.insert( + block["state"].as_str().context("state required")?.into(), + ); + } else { + ensure!( + block.get("behavior").is_none(), + "unsupported block behavior" + ); + } + module.definitions.push(block.clone()); + } + } + } + } + } + Ok(module) + } + fn from_bytes(bytes: &[u8]) -> Result { + ensure!(bytes.len() <= 65536, "WASM module exceeds 64 KiB"); + let mut config = Config::default(); + config.consume_fuel(true); + let engine = Engine::new(&config); + let module = Module::new(&engine, bytes)?; + ensure!( + module.imports().next().is_none(), + "WASM imports are not permitted" + ); + let limits = StoreLimitsBuilder::new() + .memory_size(65536) + .table_elements(128) + .instances(1) + .tables(1) + .memories(1) + .trap_on_grow_failure(true) + .build(); + let mut store = Store::new(&engine, limits); + store.limiter(|s| s); + store.set_fuel(10000)?; + let linker = Linker::new(&engine); + let instance = linker.instantiate_and_start(&mut store, &module)?; + let function = instance.get_typed_func::<(), f32>(&store, "on_jump")?; + Ok(Self { + store, + function, + calls: 0, + traps: 0, + definitions: Vec::new(), + hook_states: ["shacraft:trampoline".into()].into_iter().collect(), + }) + } + pub fn handles(&self, state: &str) -> bool { + self.hook_states.contains(state) + } + pub fn extend_catalog(&self, catalog: &mut shacraft_content::Catalog) -> Result<()> { + use shacraft_content::{Aabb, BlockDefinition, Coverage, StateDefinition}; + let mut seen = std::collections::HashSet::new(); + for definition in &self.definitions { + let state = definition["state"] + .as_str() + .context("package state required")?; + let (namespace, path) = state + .split_once(':') + .context("package namespace required")?; + let valid_part = |part: &str, slash: bool| { + !part.is_empty() + && part.bytes().all(|b| { + b.is_ascii_lowercase() + || b.is_ascii_digit() + || b"_.-".contains(&b) + || (slash && b == b'/') + }) + }; + ensure!( + state.len() <= 512 + && namespace != "minecraft" + && valid_part(namespace, false) + && valid_part(path, true), + "package state must be a new lowercase namespaced identifier" + ); + ensure!(seen.insert(state), "duplicate package block definition"); + let color: [u8; 3] = serde_json::from_value(definition["color"].clone())?; + let collision: Vec = serde_json::from_value(definition["collision"].clone())?; + let render: Vec = if let Some(value) = definition.get("render") { + serde_json::from_value(value.clone())? + } else { + catalog + .state(state) + .map(|s| s.render.clone()) + .unwrap_or_else(|| collision.clone()) + }; + ensure!( + collision.len() <= 64 + && render.len() <= 64 + && collision.iter().chain(&render).all(|b| b.valid() + && b.min.iter().chain(&b.max).all(|v| (-2.0..=3.0).contains(v))), + "invalid package geometry" + ); + let opacity = if let Some(value) = definition.get("opacity") { + value.as_f64().context("opacity must be a number")? + } else { + 1. + }; + ensure!( + opacity.is_finite() && (0.0..=1.0).contains(&opacity), + "opacity must be in 0..1" + ); + let item = StateDefinition { + state: state.into(), + minecraft_id: u32::MAX, + color, + opacity: opacity as f32, + collision, + render, + coverage: Coverage { + identity: "authored-package".into(), + render: "authored-package".into(), + collision: "authored-exact".into(), + behavior: if self.handles(state) { + "wasm-on-jump" + } else { + "storage-and-physics" + } + .into(), + }, + family: state.split(':').nth(1).unwrap().into(), + light: 0, + hardness: 1., + }; + if let Some(existing) = catalog.states.iter_mut().find(|s| s.state == state) { + *existing = item; + } else { + catalog.states.push(item); + catalog.blocks.push(BlockDefinition { + name: state.into(), + default_state: state.into(), + properties: Default::default(), + family: "package".into(), + }); + } + } + catalog.rebuild_indexes()?; + Ok(()) + } + pub fn call(&mut self) -> Result { + self.calls += 1; + self.store.set_fuel(10000)?; + match self.function.call(&mut self.store, ()) { + Ok(v) if v.is_finite() && (0.0..=20.0).contains(&v) => Ok(v), + _ => { + self.traps += 1; + anyhow::bail!("on_jump trapped or returned an invalid impulse") + } + } + } + pub fn metrics(&self) -> Value { + json!({"runtime":"wasmi","calls":self.calls,"traps":self.traps,"fuel_per_call":10000,"memory_limit":65536,"imports":0}) + } +} +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn sandbox_executes_and_bounds_fuel_memory_and_results() { + let mut m = JumpModule::from_bytes( + b"(module (func (export \"on_jump\") (result f32) f32.const 10))", + ) + .unwrap(); + assert_eq!(m.call().unwrap(), 10.); + let mut looped = JumpModule::from_bytes( + b"(module (func (export \"on_jump\") (result f32) (loop br 0) f32.const 10))", + ) + .unwrap(); + assert!(looped.call().is_err()); + assert_eq!(looped.metrics()["traps"], 1); + assert!( + JumpModule::from_bytes( + b"(module (memory 2) (func (export \"on_jump\") (result f32) f32.const 10))" + ) + .is_err() + ); + assert!(JumpModule::from_bytes(b"(module (import \"host\" \"secret\" (func)) (func (export \"on_jump\") (result f32) f32.const 10))").is_err()); + let mut invalid = JumpModule::from_bytes( + b"(module (func (export \"on_jump\") (result f32) f32.const nan))", + ) + .unwrap(); + assert!(invalid.call().is_err()); + } + fn custom_block(state: &str) -> Value { + json!({"state":state,"color":[81,153,187],"collision":[{"min":[0,0,0],"max":[1,0.75,1]}],"render":[{"min":[0.1,0,0.1],"max":[0.9,0.75,0.9]}],"opacity":0.9,"behavior":{"server_hook":"on_jump"}}) + } + fn package_fixture(blocks: Vec) -> (tempfile::TempDir, Vec) { + use shacraft_content::{PackageManifest, PackageResource}; + let root = tempfile::tempdir().unwrap(); + let dir = root.path().join("custom"); + std::fs::create_dir_all(dir.join("common")).unwrap(); + std::fs::create_dir_all(dir.join("server")).unwrap(); + std::fs::write( + dir.join("common/definitions.json"), + serde_json::to_vec(&json!({"schema":1,"blocks":blocks})).unwrap(), + ) + .unwrap(); + let mut wasm = + include_bytes!("../../../packages/trampoline/server/trampoline.wasm").to_vec(); + let end = wasm.len(); + wasm[end - 5..end - 1].copy_from_slice(&12f32.to_le_bytes()); + std::fs::write(dir.join("server/spring.wasm"), &wasm).unwrap(); + let resources = [ + ("common/definitions.json", "common", "definitions"), + ("server/spring.wasm", "server", "wasm-on-jump"), + ] + .into_iter() + .map(|(path, scope, role)| { + let data = std::fs::read(dir.join(path)).unwrap(); + PackageResource { + path: path.into(), + scope: scope.into(), + role: role.into(), + size: data.len() as u64, + sha256: format!("{:x}", Sha256::digest(&data)), + } + }) + .collect(); + let manifest = PackageManifest { + schema: 1, + id: "example.custom".into(), + version: "1.0.0".into(), + license: "MIT".into(), + dependencies: vec![], + capabilities: vec!["blocks.define".into(), "server.on_jump".into()], + resources, + }; + std::fs::write( + dir.join("manifest.json"), + serde_json::to_vec(&manifest).unwrap(), + ) + .unwrap(); + let packages = shacraft_content::load_packages(root.path()).unwrap(); + (root, packages) + } + #[test] + fn verified_custom_package_registers_content_and_binds_real_wasm() { + use shacraft_core::{BlockChange, WorldStore}; + let mut ordinary = custom_block("example:plain_tile"); + ordinary.as_object_mut().unwrap().remove("behavior"); + let (root, packages) = package_fixture(vec![custom_block("example:spring"), ordinary]); + let mut module = JumpModule::load(&packages).unwrap(); + let mut catalog = shacraft_content::Catalog::load_builtin().unwrap(); + module.extend_catalog(&mut catalog).unwrap(); + let spring = catalog.state("example:spring").unwrap(); + assert_eq!(spring.color, [81, 153, 187]); + assert_eq!(spring.collision[0].max[1], 0.75); + assert_eq!(spring.render[0].min[0], 0.1); + assert_eq!(spring.coverage.behavior, "wasm-on-jump"); + assert!(module.handles("example:spring")); + assert!(!module.handles("example:plain_tile")); + assert!(!module.handles("shacraft:trampoline")); + let world_path = root.path().join("world"); + let mut store = WorldStore::open(&world_path, 2).unwrap(); + store.register_block("minecraft:dirt").unwrap(); + let id = store.register_block(&spring.state).unwrap(); + assert_ne!(id, spring.minecraft_id); + store.create_world("module", None).unwrap(); + store + .edit( + "module", + 0, + "package-placement", + vec![BlockChange { + pos: [0, 0, 0], + block: id, + }], + ) + .unwrap(); + let under = store.get_block("module", [0, 0, 0]).unwrap(); + assert!(module.handles(&store.registry()[under as usize])); + assert_eq!(module.call().unwrap(), 12.); + assert_eq!(module.metrics()["calls"], 1); + drop(store); + let mut reopened = WorldStore::open(&world_path, 2).unwrap(); + assert_eq!(reopened.get_block("module", [0, 0, 0]).unwrap(), id); + assert_eq!(reopened.registry()[id as usize], "example:spring"); + let public = manifest(&packages).to_string(); + assert!(public.contains("common/definitions.json")); + assert!(!public.contains("server/spring.wasm")); + } + #[test] + fn duplicate_vanilla_and_invalid_geometry_definitions_are_rejected() { + let mut bad_box = custom_block("example:bad_box"); + bad_box["collision"][0]["max"] = json!([4, 1, 1]); + let mut reversed = custom_block("example:reversed"); + reversed["render"][0]["max"] = json!([0, 0, 0]); + let mut oversized = custom_block("example:many_boxes"); + oversized["render"] = json!(vec![json!({"min":[0,0,0],"max":[1,1,1]}); 65]); + let mut opacity = custom_block("example:bad_opacity"); + opacity["opacity"] = json!(2); + let invalid_sets = vec![ + vec![ + custom_block("example:duplicate"), + custom_block("example:duplicate"), + ], + vec![custom_block("minecraft:stone")], + vec![bad_box], + vec![reversed], + vec![oversized], + vec![opacity], + vec![custom_block("example:bad,state")], + vec![custom_block(":empty")], + ]; + let catalog = shacraft_content::Catalog::load_builtin().unwrap(); + for blocks in invalid_sets { + let (_root, packages) = package_fixture(blocks); + let module = JumpModule::load(&packages).unwrap(); + assert!(module.extend_catalog(&mut catalog.clone()).is_err()); + } + } + #[test] + fn changed_definition_or_module_fails_hash_verification_before_loading() { + for path in ["common/definitions.json", "server/spring.wasm"] { + let (root, packages) = package_fixture(vec![custom_block("example:spring")]); + let file = root.path().join("custom").join(path); + let mut bytes = std::fs::read(&file).unwrap(); + let last = bytes.len() - 1; + bytes[last] ^= 1; + std::fs::write(&file, bytes).unwrap(); + assert!( + JumpModule::load(&packages).is_err(), + "changed {path} accepted after verified package load" + ); + assert!(shacraft_content::load_packages(root.path()).is_err()); + } + } +} diff --git a/crates/shacraft-server/src/render.rs b/crates/shacraft-server/src/render.rs new file mode 100644 index 0000000..98899e7 --- /dev/null +++ b/crates/shacraft-server/src/render.rs @@ -0,0 +1,100 @@ +use anyhow::{Result, ensure}; +use shacraft_core::Pos; +pub fn capture(min: Pos, max: Pos, mut cells: Vec<(Pos, [u8; 3])>) -> Result> { + ensure!((0..3).all(|i| max[i] >= min[i]), "invalid capture bounds"); + let size = 512usize; + let mut image = vec![0u8; size * size * 3]; + for pixel in image.chunks_exact_mut(3) { + pixel.copy_from_slice(&[24, 36, 48]); + } + let span = (max[0] - min[0] + max[2] - min[2] + 2) as f32; + let vertical = ((max[1] - min[1] + 1) as f32 + span * 0.25).max(1.); + let scale = (460. / span.max(1.)).min(440. / vertical).clamp(0.1, 24.); + cells.sort_by_key(|(p, _)| (p[0] + p[2], p[1])); + for (p, c) in cells { + let x = (p[0] - min[0]) as f32; + let y = (p[1] - min[1]) as f32; + let z = (p[2] - min[2]) as f32; + let cx = 256. + (x - z - (max[0] - min[0] - max[2] + min[2]) as f32 * 0.5) * scale; + let cy = 470. - (y + 1.) * scale - (span * 0.5 - x - z) * scale * 0.5; + let top = [ + [cx, cy - scale * 0.5], + [cx + scale, cy], + [cx, cy + scale * 0.5], + [cx - scale, cy], + ]; + polygon(&mut image, size, top, c); + polygon( + &mut image, + size, + [ + [cx - scale, cy], + [cx, cy + scale * 0.5], + [cx, cy + scale * 1.5], + [cx - scale, cy + scale], + ], + c.map(|v| (v as f32 * 0.64) as u8), + ); + polygon( + &mut image, + size, + [ + [cx, cy + scale * 0.5], + [cx + scale, cy], + [cx + scale, cy + scale], + [cx, cy + scale * 1.5], + ], + c.map(|v| (v as f32 * 0.82) as u8), + ); + } + let mut bytes = Vec::new(); + { + let mut encoder = png::Encoder::new(&mut bytes, size as u32, size as u32); + encoder.set_color(png::ColorType::Rgb); + encoder.set_depth(png::BitDepth::Eight); + encoder.write_header()?.write_image_data(&image)?; + } + Ok(bytes) +} +fn polygon(img: &mut [u8], size: usize, p: [[f32; 2]; 4], color: [u8; 3]) { + let minx = p + .iter() + .map(|p| p[0]) + .fold(f32::INFINITY, f32::min) + .floor() + .max(0.) as usize; + let maxx = p + .iter() + .map(|p| p[0]) + .fold(f32::NEG_INFINITY, f32::max) + .ceil() + .clamp(0., size as f32 - 1.) as usize; + let miny = p + .iter() + .map(|p| p[1]) + .fold(f32::INFINITY, f32::min) + .floor() + .max(0.) as usize; + let maxy = p + .iter() + .map(|p| p[1]) + .fold(f32::NEG_INFINITY, f32::max) + .ceil() + .clamp(0., size as f32 - 1.) as usize; + for y in miny..=maxy { + for x in minx..=maxx { + let mut signs = [false; 4]; + for i in 0..4 { + let a = p[i]; + let b = p[(i + 1) % 4]; + signs[i] = (b[0] - a[0]) * (y as f32 + 0.5 - a[1]) + - (b[1] - a[1]) * (x as f32 + 0.5 - a[0]) + >= 0.; + } + if signs.iter().all(|s| *s) || signs.iter().all(|s| !*s) { + let i = (y * size + x) * 3; + img[i..i + 3].copy_from_slice(&color); + } + } + } +} diff --git a/crates/shacraft-server/src/tests.rs b/crates/shacraft-server/src/tests.rs new file mode 100644 index 0000000..1c303b1 --- /dev/null +++ b/crates/shacraft-server/src/tests.rs @@ -0,0 +1,554 @@ +//! Stateful acceptance tests for authority, durability, and bounded client queues. +//! Included as a child module of game.rs so tests exercise the real game actor. +use super::*; +use std::sync::OnceLock; +use tempfile::TempDir; + +type Inbox = tmpsc::Receiver>; +struct TestClient { + id: String, + inbox: Inbox, + bytes: Arc, +} +impl TestClient { + fn drain(&mut self) -> Vec { + let mut messages = Vec::new(); + while let Ok(message) = self.inbox.try_recv() { + self.bytes.fetch_sub(message.len(), Ordering::Relaxed); + messages.push(serde_json::from_str(&message).unwrap()); + } + messages + } +} +fn open_game(path: &Path) -> Game { + let packages = shacraft_content::load_packages( + Path::new(env!("CARGO_MANIFEST_DIR")).join("../../packages"), + ) + .unwrap(); + let manifest = crate::packages::manifest(&packages); + let jump = crate::packages::JumpModule::load(&packages).unwrap(); + Game::open(path, 16, manifest, jump).unwrap() +} +fn fixture() -> (TempDir, Game) { + // Do expensive full-catalog initial registration once. Copy closed durable + // databases into isolated directories; do not share a live WorldStore writer. + static SEED: OnceLock = OnceLock::new(); + let seed = SEED.get_or_init(|| { + let dir = tempfile::tempdir().unwrap(); + let mut game = open_game(dir.path()); + game.store.flush().unwrap(); + drop(game); + dir + }); + let dir = tempfile::tempdir().unwrap(); + for entry in std::fs::read_dir(seed.path()).unwrap() { + let path = entry.unwrap().path(); + if path.is_file() && path.extension().is_some_and(|s| s == "sqlite3") { + std::fs::copy(&path, dir.path().join(path.file_name().unwrap())).unwrap(); + } + } + let game = open_game(dir.path()); + (dir, game) +} +fn connect(game: &mut Game, world: &str, name: &str) -> TestClient { + let (tx, inbox) = tmpsc::channel(16); + let bytes = Arc::new(AtomicUsize::new(0)); + let p = json!({"type":"join","protocol":1,"name":name,"world":world,"manifest_hash":game.manifest["hash"]}); + let id = game + .join( + p, + Outbox { + tx, + bytes: bytes.clone(), + }, + ) + .unwrap(); + TestClient { id, inbox, bytes } +} +fn ticks(game: &mut Game, clients: &mut [&mut TestClient], count: usize) { + for _ in 0..count { + game.step(); + for client in clients.iter_mut() { + client.drain(); + } + } +} +fn edit(game: &mut Game, world: &str, changes: Vec) { + let revision = game.store.revision(world).unwrap(); + game.store + .edit(world, revision, &Uuid::new_v4().to_string(), changes) + .unwrap(); +} +fn entity_spawn(game: &mut Game, kind: &str) -> Result { + game.query("entity.spawn",json!({"world":"lobby","kind":kind,"position":[2.,1.,2.],"properties":{"custom_name":"Saved animal","nbt":{"test:unrecognized":{"type":"long","value":"9223372036854775807"}}},"expected_revision":game.meta.revision,"operation_id":Uuid::new_v4().to_string()})) +} + +#[test] +fn official_collision_shapes_drive_world_physics() { + let (_dir, mut game) = fixture(); + game.store.create_world("collision", None).unwrap(); + let states = [ + "minecraft:stone", + "minecraft:oak_slab[type=bottom,waterlogged=false]", + "minecraft:oak_fence", + "minecraft:water", + ]; + let changes = states + .into_iter() + .enumerate() + .map(|(i, s)| BlockChange { + pos: [i as i32 * 3, 0, 0], + block: game.id(s).unwrap(), + }) + .collect(); + edit(&mut game, "collision", changes); + assert!(!game.collision("collision", [0.5, 1., 0.5])); + assert!(game.collision("collision", [0.5, 0.9, 0.5])); + assert!(!game.collision("collision", [3.5, 0.5, 0.5])); + assert!(game.collision("collision", [3.5, 0.49, 0.5])); + assert!(game.collision("collision", [6.5, 1.2, 0.5])); + assert!(!game.collision("collision", [6.5, 1.5, 0.5])); + assert!(!game.collision("collision", [9.5, 0., 0.5])); +} + +#[test] +fn authoritative_actions_reject_forged_targets_and_sync_real_edits() { + let (_dir, mut game) = fixture(); + let mut a = connect(&mut game, "lobby", "Builder"); + let mut b = connect(&mut game, "lobby", "Observer"); + a.drain(); + b.drain(); + let player = game.players.get_mut(&a.id).unwrap(); + player.position = [0.5, 1., 8.5]; + player.input.pitch = -1.2; + let before = game.store.revision("lobby").unwrap(); + assert!( + game.client(&a.id, json!({"type":"break","pos":[20,0,20]})) + .is_err() + ); + assert_eq!(game.store.revision("lobby").unwrap(), before); + let (hit, normal) = game.raycast(&a.id).unwrap().expect("ground in reach"); + let place: Pos = std::array::from_fn(|i| hit[i] + normal[i]); + assert!( + game.client(&a.id, json!({"type":"place","pos":place,"block":u64::MAX})) + .is_err() + ); + assert_eq!(game.store.revision("lobby").unwrap(), before); + game.client(&a.id, json!({"type":"break","pos":hit})) + .unwrap(); + assert_eq!(game.store.get_block("lobby", hit).unwrap(), 0); + let messages = b.drain(); + let delta = messages + .iter() + .find(|m| m["type"] == "blocks") + .expect("observer must receive edit"); + assert_eq!(delta["revision"], before + 1); + assert_eq!(delta["changes"][0]["pos"], json!(hit)); + assert!( + game.client( + &a.id, + json!({"type":"input","seq":1,"yaw":0,"pitch":0,"forward":1000,"strafe":0,"jump":false}) + ) + .is_err() + ); +} + +#[test] +fn trampoline_executes_wasm_despite_small_contact_gap() { + let (_dir, mut game) = fixture(); + game.store.create_world("spring", None).unwrap(); + let spring = game.id("shacraft:trampoline").unwrap(); + edit( + &mut game, + "spring", + vec![BlockChange { + pos: [0, 0, 0], + block: spring, + }], + ); + let mut client = connect(&mut game, "spring", "Jumper"); + client.drain(); + let p = game.players.get_mut(&client.id).unwrap(); + p.position = [0.5, 1.075, 0.5]; + p.grounded = true; + p.velocity = 0.; + p.input.jump = true; + p.last_input = Instant::now(); + let before = game.jump.metrics()["calls"].as_u64().unwrap(); + game.step(); + client.drain(); + assert_eq!( + game.jump.metrics()["calls"].as_u64().unwrap(), + before + 1, + "grounded spring contact must invoke module" + ); + assert!( + game.players[&client.id].position[1] > 1.45, + "WASM impulse must affect authoritative position" + ); +} + +#[test] +fn eliminated_spleef_players_cannot_reenter_and_late_joins_spectate() { + let (_dir, mut game) = fixture(); + let mut a = connect(&mut game, "arena_1", "A"); + let mut b = connect(&mut game, "arena_1", "B"); + let mut c = connect(&mut game, "arena_1", "C"); + a.drain(); + b.drain(); + c.drain(); + game.start_match("arena_1").unwrap(); + ticks(&mut game, &mut [&mut a, &mut b, &mut c], 60); + assert_eq!(game.match_json("arena_1")["phase"], "active"); + game.players.get_mut(&a.id).unwrap().position[1] = -7.; + ticks(&mut game, &mut [&mut a, &mut b, &mut c], 1); + assert!(!game.players[&a.id].alive); + assert_eq!(game.match_json("arena_1")["phase"], "active"); + game.players.get_mut(&a.id).unwrap().last_snapshot = Instant::now() - Duration::from_secs(5); + game.client(&a.id, json!({"type":"switch_world","world":"lobby"})) + .unwrap(); + a.drain(); + game.players.get_mut(&a.id).unwrap().last_snapshot = Instant::now() - Duration::from_secs(5); + let result = game.client(&a.id, json!({"type":"switch_world","world":"arena_1"})); + if result.is_ok() { + assert!( + !game.players[&a.id].alive, + "eliminated participant became alive by switching worlds" + ); + } + let mut late = connect(&mut game, "arena_1", "Late"); + let welcome = late.drain(); + assert_eq!( + welcome[0]["revision"], + game.store.revision("arena_1").unwrap() + ); + assert!( + !game.players[&late.id].alive, + "mid-round joins must be spectators" + ); + assert!( + game.client(&late.id, json!({"type":"break","pos":[0,0,0]})) + .is_err() + ); +} + +#[test] +fn entities_are_durable_and_failed_commits_do_not_publish_changes() { + let (dir, mut game) = fixture(); + let spawned = entity_spawn(&mut game, "minecraft:cow").unwrap(); + let entity = spawned["entity"].clone(); + let id = entity["id"].as_str().unwrap().to_owned(); + let revision = game.meta.revision; + drop(game); + let mut game = open_game(dir.path()); + assert_eq!(game.meta.entities.get(&id), Some(&entity)); + assert!(game.meta.revision >= revision); + let before = game.meta.entities.clone(); + let revision = game.meta.revision; + game.db.execute_batch("PRAGMA query_only=ON;").unwrap(); + assert!(entity_spawn(&mut game, "minecraft:pig").is_err()); + assert_eq!( + game.meta.entities, before, + "failed persistent mutation leaked into visible RAM state" + ); + assert_eq!( + game.meta.revision, revision, + "failed persistent mutation advanced public revision" + ); + game.db.execute_batch("PRAGMA query_only=OFF;").unwrap(); +} + +#[test] +fn restart_recovers_arena_configuration_and_cleans_interrupted_round() { + let (dir, mut game) = fixture(); + let mut a = connect(&mut game, "arena_1", "A"); + let mut b = connect(&mut game, "arena_1", "B"); + a.drain(); + b.drain(); + game.query("arena.configure",json!({"world":"arena_1","spawn":[3.,2.,5.],"expected_revision":game.meta.revision,"operation_id":Uuid::new_v4().to_string()})).unwrap(); + game.start_match("arena_1").unwrap(); + edit( + &mut game, + "arena_1", + vec![BlockChange { + pos: [0, 0, 0], + block: 0, + }], + ); + let dirty_revision = game.store.revision("arena_1").unwrap(); + drop(game); + let mut reopened = open_game(dir.path()); + assert_eq!(reopened.config("arena_1").spawn, [3., 2., 5.]); + assert_eq!(reopened.match_json("arena_1")["phase"], "waiting"); + assert_eq!( + reopened.store.get_block("arena_1", [0, 0, 0]).unwrap(), + reopened.id("minecraft:snow_block").unwrap(), + "interrupted round left a damaged waiting arena" + ); + assert!(reopened.store.revision("arena_1").unwrap() > dirty_revision); + assert_eq!( + reopened.store.get_block("arena_2", [0, 0, 0]).unwrap(), + reopened.id("minecraft:snow_block").unwrap() + ); +} + +#[test] +fn snapshots_carry_revision_and_slow_consumers_are_disconnected() { + let (_dir, mut game) = fixture(); + let mut client = connect(&mut game, "lobby", "Slow"); + let welcome = client.drain(); + assert_eq!(welcome[0]["type"], "welcome"); + assert_eq!( + welcome[0]["revision"], + game.store.revision("lobby").unwrap() + ); + assert!( + welcome[0]["materials"] + .as_array() + .unwrap() + .iter() + .all(|m| m["id"].is_u64()) + ); + for _ in 0..20 { + game.step(); + } + assert!( + !game.players.contains_key(&client.id), + "full bounded outbox must evict slow player" + ); + assert_eq!(game.slow_clients, 1); + assert!(client.bytes.load(Ordering::Relaxed) <= 8 * 1024 * 1024); +} + +#[test] +fn outbox_has_byte_and_message_limits() { + let (tx, _rx) = tmpsc::channel(16); + let bytes = Arc::new(AtomicUsize::new(0)); + let out = Outbox { + tx, + bytes: bytes.clone(), + }; + assert!(!out.send_shared(Arc::new("x".repeat(8 * 1024 * 1024 + 1)))); + assert_eq!(bytes.load(Ordering::Relaxed), 0); + for _ in 0..16 { + assert!(out.send(json!({"a":1}))); + } + let before = bytes.load(Ordering::Relaxed); + assert!(!out.send(json!({"a":2}))); + assert_eq!(bytes.load(Ordering::Relaxed), before); +} + +#[test] +fn legacy_world_configuration_gets_safe_spleef_defaults() { + let conf: WorldConfig = + serde_json::from_value(json!({"spawn":[1,2,3],"mode":"spleef"})).unwrap(); + assert_eq!(conf.spawn, [1., 2., 3.]); + assert_eq!(conf.countdown_seconds, 3); + assert_eq!(conf.round_seconds, 180); + assert_eq!(conf.min_players, 2); + assert_eq!(conf.elimination_y, -6.); + assert!(conf.spawn_points.is_empty()); + assert_eq!(conf.spectator_spawn, [13., 2., 0.]); + assert_eq!(conf.floor_block, "minecraft:snow_block"); +} + +#[test] +fn arena_configuration_validates_before_mutation() { + let (_dir, mut game) = fixture(); + let before = serde_json::to_value(&game.meta).unwrap(); + for (key, value) in [ + ("countdown_seconds", json!(0)), + ("countdown_seconds", json!(31)), + ("round_seconds", json!(0)), + ("round_seconds", json!(3601)), + ("min_players", json!(1)), + ("min_players", json!(33)), + ("spawn", json!([32701, 2, 0])), + ("spectator_spawn", json!([0, -7, 0])), + ("elimination_y", json!(5)), + ("floor_block", json!("minecraft:water")), + ("floor_block", json!("unknown:missing")), + ("spawn_points", json!([[0, 2, 0]])), + ("spawn_points", json!([[0, 2, 0], [0, 2, 0]])), + ("spawn_points", json!([[0, 2, 0], [1, 2, 0], [32701, 2, 0]])), + ("spawn_points", json!(vec![[0, 2, 0]; 33])), + ("min_players", Value::Null), + ] { + let mut params = json!({"world":"arena_1"}); + params[key] = value; + assert!( + game.query("arena.configure", params).is_err(), + "accepted invalid {key}" + ); + assert_eq!( + serde_json::to_value(&game.meta).unwrap(), + before, + "failed {key} changed persistent metadata" + ); + } + assert!(entity_position(&json!([32701, 1, 0])).is_err()); +} + +#[test] +fn configured_spleef_rules_control_full_round_and_survive_restart() { + let (dir, mut game) = fixture(); + game.store.create_world("stone_template", None).unwrap(); + let stone = game.id("minecraft:stone").unwrap(); + let mut cells = Vec::new(); + for x in -4..=4 { + for z in -4..=4 { + cells.push(BlockChange { + pos: [x, 0, z], + block: stone, + }); + } + } + edit(&mut game, "stone_template", cells); + game.query( + "world.create", + json!({"world":"stone_arena","template":"stone_template"}), + ) + .unwrap(); + let configured=game.query("arena.configure",json!({"world":"stone_arena","mode":"spleef","spawn":[0.5,2.,3.5],"countdown_seconds":1,"round_seconds":2,"min_players":3,"elimination_y":-2,"spawn_points":[[0.5,1.,2.5],[2.5,1.,2.5],[-2.5,1.,2.5]],"spectator_spawn":[13.,2.,4.],"floor_block":"minecraft:stone"})).unwrap(); + let mut a = connect(&mut game, "stone_arena", "A"); + let mut b = connect(&mut game, "stone_arena", "B"); + a.drain(); + b.drain(); + assert!(game.start_match("stone_arena").is_err()); + let mut c = connect(&mut game, "stone_arena", "C"); + c.drain(); + game.start_match("stone_arena").unwrap(); + let spawns: Vec<_> = game + .players + .values() + .filter(|p| p.world == "stone_arena") + .map(|p| p.position) + .collect(); + for point in [[0.5, 1., 2.5], [2.5, 1., 2.5], [-2.5, 1., 2.5]] { + assert!(spawns.contains(&point)); + } + assert_eq!(game.match_json("stone_arena")["remaining"], 1.); + assert!( + game.query( + "arena.configure", + json!({"world":"stone_arena","round_seconds":60}) + ) + .is_err() + ); + ticks(&mut game, &mut [&mut a, &mut b, &mut c], 20); + assert_eq!(game.match_json("stone_arena")["phase"], "active"); + assert_eq!(game.match_json("stone_arena")["remaining"], 2.); + let player = game.players.get_mut(&a.id).unwrap(); + player.position = [0.5, 1., 2.5]; + player.input.pitch = -1.2; + player.last_input = Instant::now(); + let (hit, _) = game.raycast(&a.id).unwrap().unwrap(); + assert_eq!(game.store.get_block("stone_arena", hit).unwrap(), stone); + game.client(&a.id, json!({"type":"break","pos":hit})) + .unwrap(); + assert_eq!(game.store.get_block("stone_arena", hit).unwrap(), 0); + a.drain(); + b.drain(); + c.drain(); + game.players.get_mut(&a.id).unwrap().position[1] = -3.; + ticks(&mut game, &mut [&mut a, &mut b, &mut c], 1); + assert!(!game.players[&a.id].alive); + assert_eq!(game.players[&a.id].position, [13., 2., 4.]); + let mut late = connect(&mut game, "stone_arena", "Late"); + late.drain(); + assert_eq!(game.players[&late.id].position, [13., 2., 4.]); + assert!(!game.players[&late.id].alive); + game.tick = game.matches["stone_arena"].deadline - 1; + ticks(&mut game, &mut [&mut a, &mut b, &mut c, &mut late], 1); + assert_eq!(game.match_json("stone_arena")["phase"], "finished"); + assert_eq!(game.match_json("stone_arena")["winner"], Value::Null); + game.tick = game.matches["stone_arena"].deadline - 1; + ticks(&mut game, &mut [&mut a, &mut b, &mut c, &mut late], 1); + assert_eq!(game.match_json("stone_arena")["phase"], "waiting"); + assert_eq!(game.store.get_block("stone_arena", hit).unwrap(), stone); + assert_eq!(game.players[&a.id].position, [0.5, 2., 3.5]); + assert!(!game.meta.active_matches.contains("stone_arena")); + drop(game); + let mut reopened = open_game(dir.path()); + assert_eq!( + serde_json::to_value(reopened.config("stone_arena")).unwrap(), + configured + ); + assert_eq!( + reopened.store.get_block("stone_template", hit).unwrap(), + stone + ); +} + +#[test] +fn gallery_contains_every_default_state_over_a_bounded_floor() { + let (_dir, mut game) = fixture(); + assert_eq!(game.config("gallery").mode, "creative"); + let samples = game.catalog.sampler(); + assert!(samples.len() >= 1197); + for sample in samples { + assert_eq!( + game.store.get_block("gallery", sample.position).unwrap(), + game.id(&sample.state).unwrap(), + "{} sample missing", + sample.state + ); + assert_ne!( + game.store + .get_block("gallery", [sample.position[0], 0, sample.position[2]]) + .unwrap(), + 0 + ); + } + assert_eq!(game.store.get_block("gallery", [64, 0, 0]).unwrap(), 0); + assert_ne!(game.store.get_block("gallery", [-64, 0, -64]).unwrap(), 0); +} + +#[test] +fn material_payloads_are_bounded_and_runtime_id_lookup_works_without_registry_dump() { + let (_dir, mut game) = fixture(); + let cells = game + .store + .registry() + .iter() + .enumerate() + .map(|(id, _)| BlockChange { + pos: [0, 0, 0], + block: id as u32, + }) + .collect::>(); + let materials = game.materials(&cells); + assert!(materials.len() <= 256); + assert!(serde_json::to_vec(&materials).unwrap().len() <= 129 * 1024); + let stone = game.id("minecraft:stone").unwrap(); + let result = game + .query( + "catalog.search", + json!({"ids":stone.to_string(),"limit":128}), + ) + .unwrap(); + assert_eq!(result["items"].as_array().unwrap().len(), 1); + assert_eq!(result["items"][0]["state"], "minecraft:stone"); +} +#[test] +fn interrupted_creation_of_managed_world_can_finish_its_seed() { + let (_dir, mut game) = fixture(); + // Simulate an interrupted bootstrap after the core committed create_world, + // before its first seed edit. Only reserved demonstration worlds are rebuilt. + let scratch = tempfile::tempdir().unwrap(); + game.store = WorldStore::open(scratch.path(), 8).unwrap(); + for state in &game.catalog.states { + game.store.register_block(&state.state).unwrap(); + } + game.store.create_world("lobby", None).unwrap(); + game.ids = game + .store + .registry() + .iter() + .enumerate() + .map(|(id, s)| (s.clone(), id as u32)) + .collect(); + game.seed().unwrap(); + assert_eq!(game.store.revision("lobby").unwrap(), 1); + assert_ne!(game.store.get_block("lobby", [0, 0, 0]).unwrap(), 0); +} diff --git a/docs/ACCEPTANCE.md b/docs/ACCEPTANCE.md index fa4c40f..6c34c00 100644 --- a/docs/ACCEPTANCE.md +++ b/docs/ACCEPTANCE.md @@ -1,6 +1,6 @@ # Приёмка Shacraft Core -Статус: план проверок; фактические результаты первого этапа находятся в `STATUS.md` и `VERIFICATION.md`. Рубежи A и B целиком ещё не пройдены. Основа — исходный запрос пользователя и текущий `docs/CONTRACT.md`. Последний описывает первый рабочий протокол, но пока не покрывает весь согласованный MVP. +Статус: критерии для локального MVP. Реализованные сценарии и доказательства перечислены в STATUS и VERIFICATION. Этот документ сохраняет исходный план приёмки; ограничения более широких стресс-тестов и совместимости не скрываются общим флагом готовности. Shacraft Core — самостоятельный открытый движок на Rust. Shacraft-сервер и Spleef проверяют его пригодность на практике. Экономия серверной RAM — основное архитектурное требование. Полный базовый каталог Minecraft 26.2 означает контент, состояния и формы, а не требование воспроизвести архитектуру Minecraft или весь ванильный игровой процесс. diff --git a/docs/CLIENT.md b/docs/CLIENT.md new file mode 100644 index 0000000..11d330c --- /dev/null +++ b/docs/CLIENT.md @@ -0,0 +1,33 @@ +# Браузерный клиент MVP + +Клиент находится в `client/` и раздаётся `shacraft-server` по `/`. Сборщик, npm-зависимости и готовый игровой движок не нужны: это ES-модули и собственный WebGL2-рендерер. Откройте `http://127.0.0.1:4000` после запуска сервера. Поддерживаются современные настольные браузеры с WebGL2; `localhost` или HTTPS необходим для `crypto.subtle` и проверки пакетов. + +## Управление + +- Нажмите на мир, чтобы захватить мышь. Если браузер запрещает захват, удерживайте кнопку и перетаскивайте для обзора. +- WASD или стрелки — движение; пробел — прыжок. Направление определяется камерой, +Y вверх, yaw 0 смотрит вдоль −Z. Позиция игрока задаёт ступни. +- ЛКМ — убрать выбранный блок, ПКМ — поставить блок на выбранной грани, средняя кнопка — взять выбранный материал в текущую ячейку. +- 1–9 или колесо мыши — ячейка панели. E — библиотека всех состояний; поиск использует английские Minecraft-идентификаторы. Выбор заменяет текущую ячейку. +- T или Enter — чат, Enter отправляет, Esc закрывает. +- Кнопка имени мира открывает выбор экземпляра. F3 открывает диагностику. Меню содержит имя игрока, возвращение к точке появления и запуск Spleef. +- Esc освобождает мышь; отпускание фокуса и открытие панели отправляют нулевой ввод, чтобы игрок не продолжал движение. + +## Рендер и синхронизация + +Геометрия строится по локальным box-формам материалов. Сетки разбиты на секции 16³; общие грани полных непрозрачных кубов отбрасываются. Изменение блока пересобирает его секцию и смежные секции. Шейдер использует направленный свет, туман, пиксельную фактуру и авторскую текстуру из проверенного пакета. Небо и солнце также рисуются WebGL. Прозрачные материалы рисуются отдельным проходом с сортировкой секций по расстоянию (внутри секции порядок прозрачных поверхностей упрощён). Пакет с декларативным стилем `effect: bounce` (включая trampoline и пользовательские блоки) подключает текстуру, проверенную GLSL-функцию подсветки и авторский звук; отклик привязан к полученному от сервера подъёму игрока. Формы сущностей берутся из каталога; игроки имеют отдельные составные аватары. Это собственное упрощённое визуальное представление, а не точное воспроизведение Minecraft. + +Клиент отправляет ввод максимум 20 раз в секунду, не объявляет собственную позицию и не изменяет блоки оптимистически. Сервер рассчитывает движение, столкновения и правки, а клиент сглаживает полученные позиции между кадрами. Это добавляет небольшую задержку движения, зато визуальное положение следует авторитетной симуляции. Камера реагирует на мышь локально. + +`welcome` и `snapshot` полностью заменяют видимую геометрию. Полный `registry` необязателен: снимок содержит не больше 256 описаний используемых материалов, остальные формы клиент постепенно запрашивает через `/api/catalog?ids=...&limit=128`. Каждый ответ достраивает только затронутые секции; до получения формы отображается нейтральный куб. События `blocks` применяются только по порядку ревизий; данные за пределами последнего окна 64×40×64 отбрасываются, сохраняя продвижение ревизии. Пропуск запрашивает `resync`; старые ревизии игнорируются. При потере соединения клиент переподключается с задержкой 1, 2, 4, 8, 16, затем 20 секунд. Ошибки подключения, несовместимого протокола, ресурсов и отказанные сервером действия выводятся пользователю. + +## Пакеты + +До WebSocket-входа клиент получает `/api/manifest`, загружает объявленные клиентские файлы с того же сервера, проверяет их размер и SHA-256 и сохраняет содержимое в CacheStorage по хешу. Кэшированные файлы повторно проверяются. Отказ кэша не отменяет проверку целостности. При несовпадении хеша файл удаляется из кэша, вход не выполняется. Максимум одного файла — 64 МиБ, набора за загрузку — 128 МиБ, кэш — 512 последних записей. Это ограничения проверяемого содержимого; браузерные сетевые буферы и декодирование изображений также используют память. + +Токен Control API клиенту не передаётся. В браузере не выполняется произвольный привилегированный JavaScript из пакетов. Проверка клиентом хешей означает совместимость ресурсов и не доказывает неизменность самого клиента на устройстве игрока. + +## Отладка и проверки + +F3 показывает настоящие значения: мир, ревизию, число видимых блоков и сущностей, игроков, WebGL, FPS, треугольники, тик, подтверждённый ввод, координаты, пакеты и доступные серверные метрики. На `#world-canvas` есть `data-world`, `data-revision`, `data-blocks`, `data-entities`, `data-webgl`, `data-connected`; они обновляются раз в секунду для автоматизированной браузерной проверки. Секреты и управляющие команды через DOM не выставляются. + +Проверки чистой математики: `cd client && npm test`. Проверяются оси камеры и проекция, отрицательные координаты, ближайшая грань, ограничения дальности и точное попадание в неполные формы. Визуальная и сквозная проверка выполняется с настоящим сервером отдельно от этих unit-тестов. diff --git a/docs/COMPATIBILITY.md b/docs/COMPATIBILITY.md index 94742d4..8ff2b93 100644 --- a/docs/COMPATIBILITY.md +++ b/docs/COMPATIBILITY.md @@ -1,104 +1,30 @@ # Совместимость с Minecraft Java 26.2 -Дата проверки источников: 14 сентября 2026 года. Это план и критерии приёмки; наличие этого документа не означает, что конвертер или полный каталог уже реализованы. +Проверено 14 сентября 2026 года. Реализованы полный каталог целевой версии и двусторонний конвертер с явно определённым профилем точности. Подробные контракты и команды: [CONTENT](CONTENT.md), [interop](interop.md), [SERVER](SERVER.md). -## Цель и границы +## Источник -Shacraft остаётся самостоятельным движком на Rust. Совместимость означает полный каталог идентификаторов блоков, их допустимых состояний и типов сущностей целевой версии, отдельное покрытие форм, а также обмен пользовательскими мирами и постройками с сохранением исходных данных. Совпадение всей симуляции Minecraft — редстоуна, генератора мира, поведения мобов, жидкостей и команд — требует собственных модулей и не следует автоматически из наличия каталога. +Mojang выпустила [Java 26.2](https://www.minecraft.net/en-us/article/minecraft-java-edition-26-2) 16 июня 2026 года. [Официальный launcher manifest](https://piston-meta.mojang.com/mc/game/version_manifest_v2.json) указал точные [метаданные версии](https://piston-meta.mojang.com/v1/packages/bc42e43dfe43d65a2f6c2c1dbb322c75134e51fe/26.2.json): -Целевая версия действительно существует: Mojang выпустила Java 26.2 16 июня 2026 года. В ней добавлены, среди прочего, sulfur/cinnabar и sulfur cube; поэтому каталог более ранней версии нельзя выдавать за 26.2. [Официальный релиз](https://www.minecraft.net/en-us/article/minecraft-java-edition-26-2). +- Server JAR: `823e2250d24b3ddac457a60c92a6a941943fcd6a`, 60 894 273 байта; Java major 25. +- DataVersion, извлечённый из целевой версии: **4903**. +- Отчёты и публичный API подтвердили **1 196 блоков**, **32 366 состояний**, **158 сущностей**. +- Все состояния сопоставляются по канонической строке и множеству свойств, не только по общему количеству. -Первый рабочий срез может иметь небольшой демонстрационный каталог, однако в интерфейсе, README и отчётах он должен называться именно демонстрационным. Требование полного каталога остаётся незакрытым до проверки против зафиксированного источника. +`scripts/catalog_generate.py` проверяет артефакт, извлекает отчёты и измеряет коллизии. Повторное извлечение дало побайтно одинаковые сжатые каталоги. JAR остаётся в игнорируемом кэше; исходный код, текстуры, модели и звуки Minecraft в дистрибутив не включаются. -## Зафиксированный источник данных +## Что означает поддержка -При проверке [официального launcher manifest](https://piston-meta.mojang.com/mc/game/version_manifest_v2.json) получена запись `id=26.2`, `type=release`, `releaseTime=2026-06-16T12:03:33+00:00`. Она ссылается на [метаданные версии](https://piston-meta.mojang.com/v1/packages/bc42e43dfe43d65a2f6c2c1dbb322c75134e51fe/26.2.json): +`identity`, `render`, `collision` и `behavior` — отдельные поля. Все ванильные состояния известны; 179 контекстных состояний явно помечены `approximate-context`. Остальные коллизии измерены при воздушных соседях и пустом контексте сущности. Это не обещает контекстную эквивалентность во всех ситуациях. Визуальные модели авторские процедурные, а не ванильные. Невидимые служебные блоки намеренно не получают видимую геометрию. -- SHA-1 JSON метаданных: `bc42e43dfe43d65a2f6c2c1dbb322c75134e51fe`. -- Java runtime: major version `25`. -- [Официальный server.jar](https://piston-data.mojang.com/v1/objects/823e2250d24b3ddac457a60c92a6a941943fcd6a/server.jar): размер `60894273` байта, SHA-1 `823e2250d24b3ddac457a60c92a6a941943fcd6a`. +158 типов сущностей имеют измеренные размеры, сохраняемые экземпляры и собственные формы. Полноценная AI, redstone, инвентари, генератор и симуляция жидкостей не реализованы. Неизвестные импортированные состояния сохраняются в реестре и видимы как отмеченная заглушка; они не подменяются воздухом в данных. -SHA-1 здесь фиксирует артефакт по метаданным Mojang. Наш файл происхождения дополнительно должен содержать вычисленный SHA-256, дату, команду извлечения, Java version и хеш каждого итогового отчёта. +Числовой runtime BlockId Shacraft не равен Minecraft state ID. Конвертер сопоставляет канонические строки; одинаковые названия в независимых WorldStore могут иметь разные внутренние номера. -План получения каталога: +## Проверенный обмен -1. Скачать этот JAR в локальный игнорируемый кэш, проверить размер и хеш. Не включать его в репозиторий и дистрибутив Shacraft. -2. Проверить доступную точку входа и `--help` генератора данных именно этого артефакта, затем получить отчёты блоков и реестров. Команда для старых версий не считается проверенной командой для 26.2. Сам факт существования `blocks.json` в генераторе подтверждён Mojang; его структура меняется, что видно уже в [изменениях 26.3 Snapshot 2](https://www.minecraft.net/en-us/article/minecraft-26-3-snapshot-2). -3. Из отчёта блоков извлечь resource location, свойства, допустимые значения, все перечисленные состояния и состояние по умолчанию. Из реестров — типы сущностей, block entities, биомы и прочие необходимые для конвертации ключи. Если нужного поля нет в отчёте, пометить пробел и сделать отдельное воспроизводимое извлечение из исполняемого API целевой версии. -4. Получить `DataVersion` из целевого артефакта/мира, сохранить в манифесте. Номер ещё не извлечён в рамках этого исследования; не подменять его номером datapack/resource pack. -5. Хранить минимальный производный каталог и собственные правила адаптации. Текстуры, звуки, модели, шейдеры и декомпилированный код Minecraft в него не входят. Визуальные ресурсы Shacraft создаются отдельно либо подключаются из локальных ресурсов пользователя отдельным адаптером. +Anvil импортируется по одному chunk с типизированным NBT, включая измерения и непрозрачные дополнительные данные. Неизменённый `exact` возвращает сохранённый оригинал после проверки хешей. После правок `exact` консервативно отказывает. `best-effort` переносит изменения блоков и поддержанных свойств сущностей, инвалидирует зависимые данные и сохраняет неподдержанные данные с отчётом и исходником. -Полнота проверяется равенством множеств канонических состояний и типов сущностей с отчётами, а не ожидаемым числом из статьи или ручного списка. Количества блоков/состояний/сущностей появятся только после фактического извлечения. +Sponge `.schem` v3 поддерживается в обе стороны. Обмен между разными форматами не обещает преобразования всей семантики биомов/block entities: неперенесённые данные архивируются и отмечаются в отчёте. Старые версии, legacy `.schematic`, structure `.nbt` и полная миграция произвольных DataVersion не объявляются поддержанными. -## Контракт каталога и форм - -В `WorldStore` используется каноническая строка `namespace:block[key=value,...]`, где ключи свойств отсортированы. Числовой `BlockId` — внутренний идентификатор Shacraft; он не равен числовому идентификатору Minecraft и не переносится между независимыми реестрами без явной таблицы соответствия. `air` остаётся ID 0 по `CONTRACT.md`. - -Для совместимости необходимы разные признаки покрытия: - -- `identity`: идентификатор и все состояния известны и проверены. -- `render`: собственная геометрия отображает состояние; заглушка обозначена явно. -- `collision`: проверена форма столкновений для этого состояния и контекста. -- `behavior`: установлен модуль поведения, если он реализован. -- `roundtrip`: данные можно вернуть в конкретную версию и формат. - -Один флаг `supported` скрывал бы различия. Нельзя получать коллизию автоматически из текстур или из визуальной модели. Формы могут зависеть от соседей, сущности и состояния мира; лестницы, плиты, двери, заборы, стены, растения, жидкости и динамические блоки требуют раздельных тестов. Начать с собственных параметрических форм, затем сравнивать их с выборкой поведения целевой версии. Формы со сложным контекстом сохраняют статус `approximate` до проверки. - -Сущность может быть известна по идентификатору и полностью сохраняться для экспорта, даже если в Shacraft она пока отображается маркером и не имеет AI. В интерфейсе это должно быть видно. Неизвестный блок сохраняет исходную строку и NBT; отображение заглушкой не должно заменять его на `air` в хранилище. - -## Форматы и порядок поддержки - -**NBT — слой сериализации, а не единый формат мира.** Для Java нужен типизированный big-endian NBT. Типы чисел, массивов и списков необходимо сохранять: преобразование к обычному JSON теряет информацию для обратной записи. Это различие прямо показано в [API Prismarine NBT](https://github.com/PrismarineJS/prismarine-nbt), который можно использовать как независимый тестовый декодер, не как зависимость Rust runtime. - -**Sponge `.schem` v3 — первый полноценный адаптер построек.** Поддержать блоки и состояния, block entities, entities, 3D-биомы, размеры, offset, metadata и DataVersion. Спецификация предусматривает эти контейнеры и палитры; точный порядок байтов и кодирование брать из [первичной спецификации Sponge v3](https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-3.md). Затем добавить v2 как отдельную ветку декодера. Старый MCEdit `.schematic` не считать тем же форматом и не распознавать по одному похожему расширению. - -**Vanilla structure `.nbt` — отдельный адаптер.** Нужно зафиксировать схему 26.2 на файлах, сохранённых structure block: размеры, палитра/альтернативные палитры, блоки, относительные координаты, block entity NBT и сущности. Сырой NBT-декодер не равен поддержке этой схемы. Неподдерживаемые альтернативные палитры нельзя молча свести к первой. - -**Anvil world directory — потоковый адаптер миров.** Обрабатывать `level.dat`, измерения, region-файлы, секции/палитры, биомы, block entities, отдельные файлы сущностей и POI, а также остальные файлы сохранения. Извлекать разделы по мере необходимости, с ограничением кэша, сохраняя оригинал на диске. Проверять chunk `DataVersion` наряду с версией мира. - -Существующая реализация [WorldEdit AnvilChunk18](https://github.com/EngineHub/WorldEdit/blob/dca10737fe81bd81bb6a096e1801cc2d94f1793b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/AnvilChunk18.java) подтверждает практическую работу с секционными палитрами `Name`/`Properties`; [McRegionReader](https://github.com/EngineHub/WorldEdit/blob/dca10737fe81bd81bb6a096e1801cc2d94f1793b/worldedit-core/src/main/java/com/sk89q/worldedit/world/storage/McRegionReader.java) полезен для проверки контейнера. Эти реализации — независимые ориентиры, не доказательство полного соответствия 26.2. Код не копировать в ядро без отдельного решения о лицензии. - -Нужно явно проверить варианты сжатия, внешние chunk payload и крупные chunks на целевых fixtures. Поддержкой одного zlib нельзя объявлять поддержку всех Anvil-файлов: возможность LZ4-сжатия регионов описана в [официальном релизе Java 1.20.5](https://www.minecraft.net/es-es/article/minecraft-java-edition-1-20-5). Неизвестное сжатие даёт диагностируемый отказ, а не пустой chunk. - -## Режимы экспорта и сохранение оригинала - -**`exact` — проверенная точность данных.** По умолчанию используется та же версия и тот же формат, что у источника. Исходные файлы помещаются в неизменяемое дисковое хранилище с хешами; изменения Shacraft хранятся отдельно. Нетронутые файлы копируются побайтно. В изменённых файлах переписываются только поддерживаемые данные; остальные типизированные NBT-поля сохраняются. Контракт точности — семантическое равенство NBT за исключением явных правок и заранее объявленных производных полей, а не одинаковое сжатие и размещение секторов. - -При неизвестной версии, некорректной палитре, неподдерживаемой операции, несовместимой сущности, неразрешённом преобразовании metadata или отсутствии необходимых исходных данных `exact` прекращает экспорт до публикации результата. Особенно проверять замену блока с block entity, инвентари, пассажиров и UUID, а также зависимости от света, heightmaps, POI и scheduled ticks. Нельзя оставить заведомо неверные производные данные и назвать экспорт точным. Правило пересчёта/инвалидации каждого такого поля должно быть проверено целевым Minecraft. - -**`best-effort` — преобразование с отчётом.** Разрешает только явно заданные правила замены. Формирует `conversion-report.json`: версия источника/назначения, формат, координата/UUID, код причины, исходное значение, действие, количество и тяжесть. Неизвестные данные остаются в сопровождающем архиве, однако это не означает, что целевой Minecraft сможет их использовать. Отчёт различает `preserved`, `approximated`, `dropped`, `unsupported`. - -Для мира, созданного в Shacraft без Minecraft-оригинала, экспорт в `.schem` доступен после проверки всех данных на представимость. Создание полноценного Anvil-мира потребует отдельного генератора корректного окружения сохранения; одной записи массива блоков в `.mca` недостаточно. - -Исходный мир никогда не редактируется конвертером на месте. Вывод готовится во временном каталоге и переименовывается после успешной проверки. Прерванный импорт можно возобновить по журналу chunks и хешам. Экспорт получает согласованный снимок мира; параллельные игровые правки не должны давать смесь ревизий. - -## Необходимые дополнения к текущему API - -`CONTRACT.md` покрывает блоки и ревизии. В нём пока нет durable API произвольного NBT, биомов, сущностей и provenance. До заявления о lossless-конвертации добавить версионируемый compatibility sidecar со ссылками на неизменяемые blobs, типизированными NBT и изменениями по chunk/UUID. Он должен участвовать в атомарной фиксации ревизии вместе с блоками. - -Не перегружать строковый реестр блоков всем NBT мира и не держать sidecar целиком в RAM. Экспортёр/импортёр — отдельная библиотека/CLI над ядром; Java используется для получения эталонных данных и интеграционной проверки, но не для работы Shacraft-сервера. - -## Приёмочные проверки - -1. **Каталог:** равенство множеств всех состояний/типов целевому отчёту, один default на блок, канонизация независимо от порядка properties, сохранение неизвестного namespace, стабильность таблицы ID после перезапуска. -2. **NBT:** все типы, пустые списки, 64-битные значения, массивы, Unicode, неизвестные поля. Проверка encode/decode независимым декодером; обычный JSON не выступает эталоном. -3. **Палитры:** один блок на всю секцию, границы размера палитры и битовой упаковки, секции из воздуха, отрицательные X/Z/Y, границы chunks/regions, отсутствующие данные и повреждённые индексы. -4. **Без правок:** Minecraft/WorldEdit fixture → Shacraft → исходный формат. Нетронутые файлы побайтно идентичны; пересобранные структуры семантически равны по типизированному NBT. Третий декодер подтверждает результат. -5. **С правками:** поменять одно состояние, сломать контейнер, поставить лестницу/дверь, переместить поддерживаемую сущность. После экспорта меняются только предусмотренные данные; metadata, прочие inventories/entities/biomes и неизвестные теги сохраняются либо дают точный отказ. -6. **Открытие:** отдельная копия экспортированного мира открывается целевым Java 26.2 без ошибок декодирования/утраты chunks; фиксируются хеш JAR, логи и проверяемые координаты. Одного собственного roundtrip недостаточно — одинаковая ошибка в reader/writer может остаться незамеченной. -7. **Версии/потери:** unsupported DataVersion, модифицированный namespace, отсутствующая модель, неподдерживаемое NBT и cross-format export проверяют отказ `exact` и полный отчёт `best-effort`. -8. **Ресурсы:** большие sparse-миры, высокоэнтропийные секции, большие payload, повреждённые длины и сильное сжатие. Ограничить распакованный размер, глубину NBT, очередь и кэш; измерить пик RAM. Прерывание/повтор импорта и сбой финальной записи не повреждают исходник и сохранённые ревизии. - -Fixtures должны быть собственными маленькими мирами/постройками без сторонних карт и ассетов. Для версии и сжатия, которых нет в fixtures и внешней проверке, не ставить статус `verified`. - -## Этапы и условия завершения - -1. **Происхождение:** зафиксированный источник 26.2, воспроизводимый генератор, DataVersion, хеши и точные количества; отсутствие этих результатов оставляет полный каталог незавершённым. -2. **Реестр:** все состояния и entity IDs загружаются в Shacraft, сохраняются и ищутся; формы и behavior имеют отдельную карту покрытия. -3. **NBT + `.schem` v3:** типизированные данные и архив оригинала, оба направления, отчёт потерь, независимые roundtrip-тесты. -4. **Structure NBT + `.schem` v2:** схемы разделены и проверены на эталонах, включая offset/повороты только там, где они реализованы. -5. **Anvil 26.2:** потоковый импорт, возврат исходного мира, затем проверенные правки и создание новых экспортируемых миров; тесты с целевым Minecraft. -6. **Полное покрытие форм:** все состояния имеют проверенную визуальную форму и отдельно коллизию либо явный незакрытый дефект. Завершение списка ID само по себе не закрывает этот этап. -7. **Расширение версий:** добавлять другие DataVersion только через отдельные адаптеры/миграции и fixtures. Не обещать автоматический downgrade и произвольные модифицированные миры. - -Главные технические риски: дрейф схем между версиями, скрытые связи block entities/POI/ticks, формы с зависимостью от контекста, полная пересборка мира из частично поддерживаемых данных и непредсказуемые пики RAM при распаковке. Каждый риск выше привязан к конкретному отказу или приёмочному тесту, чтобы он не превратился в молчаливую потерю пользовательского мира. +Новый, неизменённый и отредактированный экспорт прочитаны официальными Java 26.2 `NbtIo`, `RegionFile`, `SerializableChunkData`, `PrimaryLevelData`, `WorldGenSettings` и читателем сущностей. Независимый nbtlib проверил Sponge и типы NBT. Это проверка официальных codecs без запуска игрового сервера и принятия EULA; игровой плейтест в Minecraft не заявляется. diff --git a/docs/CONTENT.md b/docs/CONTENT.md new file mode 100644 index 0000000..f3bcad0 --- /dev/null +++ b/docs/CONTENT.md @@ -0,0 +1,91 @@ +# Каталог, формы и единые пакеты MVP + +Встроенный каталог фактически извлечён из **Minecraft Java 26.2**, `DataVersion = 4903`: **1 196 блоков, 32 366 состояний, 158 типов сущностей**. Проверка сравнивает полные множества состояний, числовые ID источника, состояния по умолчанию, свойства и типы сущностей с отдельной проекцией официальных отчётов. Дополнительно зарегистрирован собственный `shacraft:trampoline`: всего 1 197 блоков и 32 367 состояний. + +Числовой `minecraft_id` — только идентификатор источника. Сервер отдельно регистрирует канонические строки в `WorldStore`; внутренний `BlockId` зависит от истории конкретного хранилища. Нельзя использовать `minecraft_id` в операциях редактирования мира. Для собственного состояния значение `minecraft_id = u32::MAX` означает отсутствие ID Minecraft. + +## Происхождение и воспроизведение + +Источник: [официальный server.jar Java 26.2](https://piston-data.mojang.com/v1/objects/823e2250d24b3ddac457a60c92a6a941943fcd6a/server.jar). SHA-1 `823e2250d24b3ddac457a60c92a6a941943fcd6a`, размер 60 894 273 байта. Полные SHA-256, версия Java, команды и контрольные суммы отчётов находятся в `crates/shacraft-content/data/provenance.json`. + +Генератор проверяет закреплённые размер и SHA-1 перед использованием JAR: + +```sh +python3 scripts/catalog_generate.py --java /path/to/java25/bin/java +python3 scripts/catalog_assets.py +cargo test -p shacraft-content +cargo run -p shacraft-content --example catalog_report +``` + +Нужен установленный JDK 25 или новее, включая `javac`. Проверенный локальный runtime: Microsoft OpenJDK 25.0.1+8-LTS. Скрипт не меняет системную Java. `--reuse-reports` позволяет повторно упаковать уже полученные локальные отчёты; полное воспроизведение выполняют без него. Gzip имеет фиксированный `mtime=0`; содержимое каталога детерминировано. В provenance меняется время запуска. + +Фактически проверена точка входа: + +```sh +java -Xmx1G -DbundlerMainClass=net.minecraft.data.Main -jar server.jar --reports --output generated +``` + +`catalog_extract.java` — собственная небольшая программа, вызывающая публичные API реестров и коллизий 26.2. Она не содержит декомпилированного кода. Генератор данных и измерения не запускают игровой сервер, не создают `eula=true`, не принимают соглашений. JAR, распакованные библиотеки, отчёты и Java-классы остаются в игнорируемом `artifacts/catalog-cache`; в дистрибутив входят только минимальные фактические данные совместимости и авторский код. + +## Что проверено у форм + +Для **каждого из 32 366 состояний** получен `getCollisionShape` официального исполняемого API. Измерение не использует текстуры или визуальные модели. Все измерения завершились без ошибок; после дедупликации осталось 326 различных наборов прямоугольных объёмов. + +Базовый контекст измерения — `BlockPos.ZERO`, соседи `air`, отсутствие сущности (`CollisionContext.empty()`). Дополнительно сравнены каменные соседи и `CollisionContext.positionContext(+10/-10)`: различия обнаружены у 32 состояний scaffolding. Помимо них явно помечены классы с зависимостью от сущности/блочной сущности/динамического состояния: powder snow, shulker box, moving piston и big dripleaf. Поэтому покрытие коллизий разделено: + +- 32 187 состояний: `measured-empty-context` — измерена форма в описанном контексте. +- 179 состояний: `approximate-context` — геометрия базового контекста доступна, полной эквивалентности динамических условий нет. +- 1 собственное состояние: `authored-exact`. + +Первое значение **не утверждает эквивалентность во всех произвольных контекстах**. Положение игрока, специальные экипировки, поршневые блочные сущности, открывание shulker box, обновление связей соседей, AI, редстоун и течения жидкостей не следуют из каталога. Сервер реализует собственную симуляцию и явно ограниченные модули. + +Отдельные регрессионные проверки подтверждают верхнюю/нижнюю плиту, объём и направления лестниц, открывание двери, пустую коллизию воды, коллизию забора высотой 1.5, контекстную пометку scaffolding/powder snow, валидность границ всех форм. Геометрия коллизий может выходить за клетку: нельзя безусловно ограничивать Y диапазоном `[0,1]`. + +## Авторское отображение + +`render` и `collision` — разные наборы `Aabb { min, max }`, координаты относительно блока. Рендерер использует собственные процедурные формы и палитру Shacraft. Встроенные PNG, звуковой WAV и GLSL написаны/сгенерированы в этом репозитории; оригинальных ресурсов Minecraft нет. + +Семейства плит, лестниц, дверей, люков, панелей, сундуков и многих сложных твёрдых блоков используют измеренные объёмы как основу самостоятельной геометрии. Для заборов, стен, открытых калиток, знаков, рельсов, жидкостей, растений, кнопок, рычагов, ковров и других нетвёрдых форм предусмотрены отдельные параметрические шаблоны. Забор рисуется до Y=1, при этом коллизия достигает Y=1.5. У наклонного рельса ступенчатая геометрия; изогнутый рельс — угловая аппроксимация из прямоугольников. Это читаемый авторский стиль, а не копия визуальной точности Minecraft. + +Покрытие: 32 317 состояний `authored-procedural` и 50 `intentionally-invisible` (включая воздух, технический light/barrier/structure void и moving piston без исходной динамической блочной сущности). Универсальных визуальных кубов-заглушек для неизвестных семейств встроенного каталога сейчас нет. При этом каждая декоративная деталь, текст надписей, анимация, waterlogged-жидкость внутри модели и световая симуляция не воспроизводятся автоматически по факту наличия состояния. + +Для 158 типов сущностей извлечены начальные width/height/eye height, fixed dimensions, категория, summonable/serializable/fire immune, tracking/update interval и все доступные базовые числовые attributes. Эти свойства находятся в `EntityDefinition.properties`. Модели относительно ног — авторские семейства biped, quadruped, aquatic, winged, boat, cart, dragon, arthropod и другие. Служебные marker/interaction/area effect cloud/lightning bolt намеренно невидимы. Display-сущности имеют явно указанную зависимость от свойств экземпляра. Размеры возраста/позы/масштаба и произвольный NBT сохраняются слоем экземпляров; каталог хранит размеры по умолчанию. Наличие модели не означает наличие ванильного AI. + +## Rust API + +- `Catalog::load_builtin() -> Result`: полный встроенный каталог и trampoline. +- `catalog.state(canonical_or_block_name)`, `catalog.entity(name)`, `catalog.default_state(name)`. +- `catalog.palette()`: 12 удобных канонических состояний для тестового клиента. +- `catalog.sampler()`: 1 197 образцов по умолчанию в сетке 32 столбца с шагом 3; отдельные клетки относительно пола Y=0, X/Z в пределах ±64. Создание пола и запись в мир — ответственность сервера. +- `catalog.summary()`: количества, раздельное покрытие, версия и ограничения. +- `canonical_state(name, properties)`: сортировка ключей и ограниченная валидация без потери неизвестных свойств. +- Все публичные определения реализуют `Clone`, `Serialize`, `Deserialize`. После десериализации целого `Catalog` следует вызвать `rebuild_indexes()` перед поиском. + +Хранение бинарного встроенного каталога занимает около 246 KiB gzip; при загрузке он распаковывается и создаёт строки/геометрию и индексы. Размер файла не равен RAM каталога. Полные строки 32 тысяч состояний и реестр `WorldStore` нужно учитывать отдельно в RSS измерениях процесса. + +## Единый формат пакета v1 + +Каждый подкаталог `packages/` содержит `manifest.json`: + +```json +{ + "schema": 1, + "id": "shacraft.trampoline", + "version": "1.0.0", + "license": "MIT OR Apache-2.0", + "dependencies": [{"id": "shacraft.base", "version": "1.0.0"}], + "capabilities": ["blocks.define", "client.texture", "client.style", "server.on_jump"], + "resources": [{ + "path": "server/trampoline.wasm", "scope": "server", "role": "wasm-on-jump", + "sha256": "<64 lowercase hexadecimal characters>", "size": 40 + }] +} +``` + +Пример иллюстрирует схему; действительные размеры и хеши берутся из сгенерированных манифестов. Версии зависимостей точные. `load_packages(root)` проверяет весь граф до выдачи ресурсов: схему, уникальность, зависимости, совпадение версий, циклы, допустимые capabilities, пути, размеры и SHA-256 всех объявленных ресурсов. Один ресурс ограничен 16 MiB, весь пакет — 64 MiB; symlink и traversal в ресурсных путях отвергаются. `read_resource` повторно проверяет хеш и размер при чтении. + +Scopes: `common` — общие определения; `client` — ресурсы клиента; `server` — внутренние данные и код сервера. `PackageManifest::client_manifest()` исключает серверные ресурсы и capabilities. `Package::public_resource(path)` отказывает для server scope; HTTP-маршрут обязан использовать именно этот метод. Статический сервер не должен раздавать весь каталог `packages/` напрямую. + +`shacraft.base` включает описание каталога, собственный 64×64 текстурный шум и клиентский стиль. `shacraft.trampoline` включает общее определение блока, 32×32 текстуру сетки, клиентский визуальный эффект, короткий авторский звук, необязательную функцию GLSL и **исполняемый серверный WebAssembly-модуль**. Его экспорт `on_jump() -> f32` возвращает скорость 10 блоков/с; импортов, памяти и внешних системных вызовов нет. WAT-исходник находится рядом. Сервер исполняет бинарный модуль в ограниченной среде; контракт предусматривает лимит топлива 10 000, памяти 1 страницу, проверку диапазона результата. Клиент использует встроенный эффект `bounce` по данным пакета, не произвольный JavaScript из сети. Произвольная среда клиентского кода и полноценная модовая экосистема не объявляются реализованными. + +`python3 scripts/catalog_assets.py` детерминированно пересоздаёт все авторские ресурсы и хеши. Ресурсы пакетов доступны на условиях `MIT OR Apache-2.0`, как собственный код проекта. Генерация ничего не скачивает. diff --git a/docs/CONTRACT.md b/docs/CONTRACT.md index 358aef2..43cd137 100644 --- a/docs/CONTRACT.md +++ b/docs/CONTRACT.md @@ -44,3 +44,12 @@ Client fetch GET /api/manifest -> {protocol:1,hash,packages:[],...}; GET /api/wo Control HTTP: GET /api/health, /api/metrics, /api/worlds, /api/catalog public; POST /api/control with Authorization: Bearer token and {method,params}, JSON return {result:...} or {error:'...'}. Control methods: world.list, world.create {name,template?}, world.reset {world,expected_revision,operation_id}, world.read {world,min,max}, world.edit {world,expected_revision,operation_id,changes}, world.undo {world,expected_revision,operation_id,target_operation}, catalog.search {query,limit}, metrics, arena.start {world}, camera.capture {world,min?,max?} (top-down PNG), entity.spawn {world,kind,position}, entity.list {world}. Default server host 127.0.0.1 port 4000, token file data/control.token (0600). No publishing or production access. + + +## Интегрированные компоненты MVP + +Игровой протокол и границы Control API описаны в SERVER.md, настоящий stdio MCP — в MCP.md, пакеты и WASM — в PACKAGES.md, полный каталог — в CONTENT.md, Anvil/Sponge и типизированные sidecar — в interop.md. Данные документы дополняют контракт ядра выше, не изменяя его durable-правил. + +`WorldStore::section_positions(world, after: Option, limit)` постранично возвращает эффективные координаты секций 16³, включая унаследованные секции и воздушные overrides, в порядке x/y/z. Лимит 1–4096. Экспорт удерживает единственного писателя и не меняет мир между страницами. + +История ядра находится на диске. Метаданные сущностей/правил имеют отдельную транзакционную область и ревизию. Планы preview живут 5 минут и не переживают рестарт; принятая правка живёт по контракту WorldStore. Неуспешный metadata commit не публикует изменённое состояние. При прерывании активного матча арена сбрасывается к закреплённой основе на следующем запуске. diff --git a/docs/MCP.md b/docs/MCP.md new file mode 100644 index 0000000..52bd07e --- /dev/null +++ b/docs/MCP.md @@ -0,0 +1,77 @@ +# Shacraft MCP + +`shacraft-mcp` — отдельный процесс с настоящим MCP поверх stdio и JSON-RPC 2.0. Он обращается к авторизованному Control API работающего сервера и не открывает файлы миров напрямую. Сервер хранит и проверяет ревизии, лимиты и долговечность операций. + +```sh +cargo run -p shacraft-mcp -- --server http://127.0.0.1:4000 --data data +``` + +По умолчанию токен читается из `data/control.token`. Параметр `--token-file /absolute/path/control.token` переопределяет путь. Токен читается при управляющем вызове, поэтому MCP можно запустить раньше сервера. В стандартный вывод пишутся только JSON-RPC-сообщения, одна строка на сообщение; диагностика и CLI-ошибки идут в stderr. Не запускайте через командную обёртку, которая печатает посторонний текст в stdout. + +Пример записи в конфигурации MCP-клиента (пути заменяются своими абсолютными): + +```json +{ + "mcpServers": { + "shacraft": { + "command": "/absolute/path/shacraft-core/target/release/shacraft-mcp", + "args": ["--server", "http://127.0.0.1:4000", "--data", "/absolute/path/shacraft-data"] + } + } +} +``` + +## Протокол + +Поддерживаются версии `2025-11-25`, `2025-06-18`, `2025-03-26`, `2024-11-05`. Сервер возвращает запрошенную поддерживаемую версию или новейшую поддерживаемую. Клиент начинает с `initialize`, затем посылает `notifications/initialized`. До этого доступны только `initialize` и `ping`. Уведомления не вызывают ответов; неизвестные методы запросов получают JSON-RPC-ошибку. Ошибки аргументов и выполнения известных инструментов возвращаются в `result.content` с `isError: true`. + +Реализованы `tools/list`, `tools/call`, `resources/list`, `resources/read`, `resources/templates/list`, `prompts/list`, `prompts/get` и `ping`. Списки небольшие и возвращаются целиком. Подписки, асинхронные задачи и уведомления о смене списков не объявляются. Выполнение последовательное; уведомление об отмене не прерывает уже выполняющийся HTTP-запрос. Сетевой тайм-аут ограничен 20 секундами (установление соединения — 3 секунды). + +Строка запроса и HTTP-ответ ограничены 8 МиБ. Слишком длинная входная строка отбрасывается до перевода строки, после чего поток продолжает разбираться. HTTP-редиректы отключены: bearer-токен не передаётся перенаправленному адресу. + +## Инструменты и рабочий процесс + +- `world_list`, `world_create`, `world_read`: осмотр миров и создание пустого мира или экземпляра закреплённого шаблона. +- `catalog_search`: точные состояния, runtime ID, формы и сведения о покрытии реализации. +- `world_edit`, `world_undo`, `world_reset`: атомарные правки, консервативная отмена последней операции и возврат к базе. +- `build_plan`, `build_commit`: предварительный расчёт ограниченной постройки из box/line/cylinder и последующая фиксация плана. +- `entity_list`, `entity_spawn`, `entity_update`, `entity_delete`: сохранённые сущности мира и их свойства. +- `arena_configure`, `arena_start`: сохраняемые правила Spleef (время, минимум игроков, высота выбывания, точки появления, материал пола) и запуск матча. Правила нельзя менять во время начавшегося раунда; материал пола задаёт разрешённые для разрушения блоки, но не перестраивает карту. +- `metrics`: измеренный RSS и отдельные оценки полезных данных кэша. +- `camera_capture`: изометрическое изображение мира в формате MCP image plus metadata. Это диагностическая проекция сервера, не снимок WebGL-камеры игрока. + +Полные JSON Schema доступны через `tools/list`. Имена инструментов соответствуют Control API с заменой первого `_` на точку, например `world_edit` → `world.edit`. + +Для строительства сначала прочитайте ревизию и площадку через `world_list`/`world_read`, найдите точные материалы через `catalog_search`, сформируйте `build_plan`, оцените границы и объём, затем выполните `build_commit` с уникальным `operation_id` в пределах авторизованного запроса. После фиксации проверьте `camera_capture`. При конфликте перечитайте мир и сформируйте новый план. Тот же ключ операции используйте только при повторе идентичного запроса. + +Отмена требует текущую ревизию и `target_operation` исходной правки. Последующие изменения и reset могут сделать отмену недоступной; инструмент не должен перезаписывать их молча. + +## Ресурсы и prompt + +Ресурсы `shacraft://server/status`, `shacraft://catalog/blocks`, `shacraft://catalog/entities`, `shacraft://packages` читают публичные сведения сервера. Ресурс блоков даёт начальную ограниченную страницу; полный каталог доступен поиском и пагинацией инструмента. + +Prompt `construct` принимает строки `world` и `request` и описывает последовательность осмотра, планирования, правки и визуальной проверки. Он не расширяет пользовательское разрешение на действие. + +Проверки: `cargo test -p shacraft-mcp`. Unit-тесты проверяют переходы жизненного цикла, согласование версии, отсутствие ответов на уведомления, ошибки аргументов и токена, недопустимые JSON-RPC ID, восстановление после слишком большой строки и схемы строительных операций. Сквозные тесты с настоящим сервером выполняются дополнительно. + +Основание протокола: официальные [lifecycle](https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle), [stdio transport](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports) и [tools](https://modelcontextprotocol.io/specification/2025-11-25/server/tools). + +## Проверка настоящим MCP SDK + +После запуска отдельного тестового сервера: + +```sh +node crates/shacraft-mcp/tests/sdk-smoke.mjs --data /absolute/path/test-server-data +``` + +Скрипт использует `@modelcontextprotocol/sdk` (проверен с 1.30.0), выполняет согласование протокола, читает все ресурсы, вызывает prompt, делает правку/повтор/конфликт/отмену, план/фиксацию, получает PNG, проверяет CRUD сущностей и reset. Он создаёт отдельный мир с префиксом `mcp_sdk_`. Путь к установленному SDK задаётся через `SHACRAFT_MCP_SDK`; в локальной среде поддерживается соседний `minecraft-builder-mcp/bridge/node_modules`. Это независимая проверка протокола, не зависимость исполняемого MCP от Minecraft Builder. + +Для воспроизводимой проверки с автоматически запущенным отдельным сервером: + +```sh +node scripts/check_mcp.mjs --binary target/release/shacraft-server --mcp-binary target/release/shacraft-mcp --port 4002 --output artifacts/mcp-sdk.json +``` + +Обёртка создаёт временный каталог данных, использует настоящий SDK и закрывает тестовый сервер. Рабочий сервер на порту 4000 не затрагивается. `--sdk` или `SHACRAFT_MCP_SDK` задают путь к уже установленному SDK; результат записывается JSON-файлом, включая ошибку при неуспешной проверке. + +Связанный сквозной тест `scripts/check_server.mjs` проверяет HTTP/WebSocket-клиенты, действия, экземпляры миров, полный матч и восстановление после реального `SIGKILL`: подтверждённые блоки, сущности и правила арены должны пережить перезапуск того же каталога данных. Временные тестовые данные сохраняются для разбора. diff --git a/docs/PACKAGES.md b/docs/PACKAGES.md new file mode 100644 index 0000000..c3b91f7 --- /dev/null +++ b/docs/PACKAGES.md @@ -0,0 +1,43 @@ +# Единые пакеты расширений + +`packages//manifest.json` объявляет точные версии, лицензии, зависимости, возможности и ресурсы. При запуске сервер проверяет весь граф зависимостей, размеры, SHA-256, пути и отсутствие symlink. Отсутствующая версия, цикл, неизвестная возможность или изменённый ресурс останавливают запуск. Публикуются только `client` и `common`; файлы `server` не имеют публичного маршрута. Ресурс повторно проверяется при HTTP-чтении. + +Примеры — `packages/base` и `packages/trampoline`. Все изображения, звук и модели авторские. Данные каталога происходят из официальных отчётов и измерения публичного API Java 26.2; ванильные текстуры и модели в пакеты не входят. + +Манифест schema 1 содержит: + +- `id`, `version` из трёх числовых частей, `license`; +- `dependencies:[{id,version}]` с точными версиями; +- `capabilities`, например `blocks.define`, `client.texture`, `server.on_jump`; +- `resources:[{path,scope,role,sha256,size}]`. + +Один ресурс не больше 16 МиБ; пакет не больше 64 МиБ, до 128 ресурсов, до 128 записей в каталоге пакетов. Это ограничения сервера; браузер дополнительно ограничивает суммарно проверяемые публичные ресурсы 128 МиБ на подключение. Определения блоков имеют роль `definitions`, ресурс с этой ролью требует schema 1. Сервер допускает до 4096 дополнительных определений. Блок задаёт `state` как новый идентификатор `namespace:path` без свойств (строчные ASCII-буквы, цифры, `_`, `.`, `-`, дополнительно `/` в path), `color:[r,g,b]`, `collision:[{min,max}]` и необязательный `render` аналогичной формы. Необязательный `opacity` — число 0…1. Если render не указан, используется существующая авторская форма того же состояния или коллизия нового блока. Максимум 64 бокса на каждый набор; допустимый локальный диапазон координат −2…3. Дубликаты определений и переопределение `minecraft:*` отвергаются. Runtime ID назначает сохраняемый реестр; `Game::open` расширяет каталог проверенными определениями до регистрации в WorldStore. Обычный пакетный блок без `behavior` хранится и участвует в физике; `behavior.server_hook: on_jump` связывает его с активным WASM-провайдером. + +```json +{ + "schema": 1, + "blocks": [{ + "state": "example:spring", + "color": [97,205,151], + "collision": [{"min":[0,0,0],"max":[1,1,1]}], + "render": [{"min":[0,0,0],"max":[1,1,1]}], + "behavior": {"server_hook":"on_jump"} + }] +} +``` + +## Исполнение модуля + +В MVP нужен ровно один активный провайдер серверного hook `on_jump`; отсутствие провайдера или два модуля с этой ролью останавливают запуск. Серверный `.wasm` объявляется ресурсом `role: "wasm-on-jump"`, `scope: "server"`; необходима capability `server.on_jump`. Экспорт `on_jump: () -> f32` возвращает импульс прыжка в блоках/с. Сервер вызывает его только при прыжке игрока с блока, который связан с hook через проверенное определение пакета. + +Исполнение идёт в Wasmi: без импортов, файлов, сети и системных вызовов; до 10 000 единиц fuel на вызов, одна память до 64 КиБ, одна таблица до 128 элементов, один экземпляр. Бинарный модуль не больше 64 КиБ. Результат должен быть конечным числом 0…20; trap или недопустимое значение фиксируется метрикой и даёт обычный прыжок. Выполняемый пример возвращает 10. Тесты проверяют реальный вызов, бесконечный цикл, превышение памяти, попытку импорта и NaN. Отдельный тест создаёт пакет `example:spring`, проверяет его SHA-256, добавляет новый блок в каталог, регистрирует и сохраняет runtime ID, связывает блок с модулем и получает импульс 12 от собственного бинарного WASM. Дубликаты, Minecraft override, недопустимая геометрия, opacity/идентификатор и изменение ресурса после загрузки отвергаются. + +Это ограниченный действующий API расширения, а не обещание произвольной совместимости с Forge/Fabric или доступа WASM к полному состоянию мира. Для нового hook необходима явная версия контракта. Spleef в этом MVP реализован серверным режимом Rust с сохраняемыми правилами. + +## Клиентские ресурсы + +`/api/manifest` возвращает публичный список с URL, точной версией, размерами и SHA-256. Браузер скачивает файлы, проверяет размер и хеш **до входа**, затем кладёт в CacheStorage по хешу. При повторном подключении содержимое кэша тоже проверяется. Ошибка хеша удаляет повреждённую запись и запрещает вход. Неподходящий `manifest_hash` сервер отвергает. Публичный хеш не подтверждает, что клиентское приложение не модифицировано. + +Базовый пакет даёт пиксельную текстуру; trampoline — собственную текстуру, GLSL-функцию окраски, настройку стиля и короткий синтезированный звук. Они применяются собственным WebGL2-рендерером. В ядре и сервере отсутствует графический движок. Пакет не загружает произвольный привилегированный JavaScript. + +Для изменения пакета пересчитайте размер и SHA-256 каждого изменённого ресурса, увеличьте версию и обновите точные зависимости. `scripts/catalog_assets.py` воспроизводимо генерирует встроенные авторские ресурсы и манифесты. Формат ориентирован на будущий лаунчер: лаунчер сможет получить тот же manifest и кэшировать по `(id,version,sha256)`; интеграция конкретного лаунчера в этот репозиторий не входит. diff --git a/docs/PLAN.md b/docs/PLAN.md index e821702..9b81ec6 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -2,7 +2,7 @@ План составлен до реализации. Каждый этап заканчивается воспроизводимым результатом в локальном репозитории. `docs/STATUS.md` обновляется после проверок. Пункт не считается выполненным по наличию интерфейса, заглушки, каталога имён или успешной компиляции. -Текущий прогресс: этап 0 и первая реализация этапа 1 завершены. Проверены библиотека хранения, CLI и аварийное восстановление. Этапы 2–6 остаются впереди; подробности в STATUS и VERIFICATION. +Текущий прогресс: этапы 0–6 реализованы для локального профиля MVP. Компоненты интегрированы; фактические проверки, пределы нагрузки и ограничения совместимости описаны в STATUS и VERIFICATION. Исходный порядок этапов ниже сохранён. ## Этап 0. Сохранить контекст и проверить проектирование diff --git a/docs/SERVER.md b/docs/SERVER.md new file mode 100644 index 0000000..62fc5b1 --- /dev/null +++ b/docs/SERVER.md @@ -0,0 +1,80 @@ +# Сервер, протокол и эксплуатация MVP + +## Запуск + +Нужны Rust 1.96+ и современный браузер с WebGL2. Java не нужна для запуска Shacraft: проверенный каталог включён в исходники. Node 22+ используется для проверок клиента и сети. + +```sh +cargo build --release --locked --workspace +bash scripts/run.sh --data data --listen 127.0.0.1:4000 +``` + +Открыть http://127.0.0.1:4000. Для друзей в локальной сети можно задать `--listen 0.0.0.0:4000`; браузерная проверка SHA-256 требует HTTPS для адресов вне localhost. Для внешней сети нужен обычный HTTPS/WSS reverse proxy. В MVP нет сервиса аккаунтов; имя игрока не является подтверждённой личностью. Контрольный токен выдаётся только владельцу сервера, клиент его не получает. + +`--data` — каталог WorldStore, `--cache-sections` — ёмкость общего кэша (по умолчанию 64). `--client` и `--packages` задают каталоги статического клиента и проверенных пакетов. Скрипт запуска явно задаёт пути относительно распакованного проекта. Остановка — Ctrl+C; уже подтверждённые правки не зависят от корректного завершения процесса. + +Первый запуск создаёт лобби, галерею `gallery`, неизменяемую основу Spleef и две независимые арены. Каталог содержит все состояния Java 26.2 и авторский trampoline. Импортированный WorldStore тоже можно открыть сервером; импортированные миры появятся в выборе миров рядом с демонстрационными. Галерея содержит 1 197 образцов состояний по умолчанию на полу 128×128, с шагом 3; это обзор всех типов блоков, а не всех 32 тысяч вариантов. Начальная позиция галереи — `[-50,2,58]`; клиент подгружает её частями по мере перемещения. + +## Владение состоянием + +Один выделенный поток владеет WorldStore, физикой и игровым состоянием. HTTP и WebSocket ставят ограниченные команды в очередь. Движение считается 20 раз в секунду: скорость 5 блоков/с, гравитация 20 блоков/с², обычный прыжок 7 блоков/с. Игрок занимает AABB 0.6×1.8 блока; позиция задаёт середину стоп. Оси +Y вверх, yaw растёт вправо, pitch вверх; направление взгляда `[sin(yaw)*cos(pitch),sin(pitch),-cos(yaw)*cos(pitch)]`. + +Игровые позиции и точки появления ограничены диапазоном ±32 700 по каждой оси: физика этого клиента использует `f32`. Хранилище и конвертер сохраняют более широкий контракт ±30 000 000; это не обещание игровой физики на дальних координатах. Выход игрока за игровой диапазон возвращает его на spawn, а в активном матче означает выбывание. + +Ввод содержит намерение двигаться, а не позицию. Сервер проверяет дальность 6 блоков, ближайшее пересечение форм, ячейку установки, пересечение с игроком и правила арены. Просроченный ввод обнуляется через секунду. Игровая физика использует ограниченную область соседних блоков на каждый тик; независимые миры без игроков не требуют массива загруженных секций. + +В `worlds.sqlite3` хранятся блоки и их история. В `server.sqlite3` — конфигурация и сохраняемые сущности с отдельной ревизией. Это две транзакционные области: создание мира и добавление его настроек не заявляются одной общей транзакцией. Если сохранение настроек не удалось после создания мира, мир доступен с безопасными настройками по умолчанию; ошибку нельзя интерпретировать как разрешение повторно создать тот же мир. Для сущностей и настроек неуспешная запись восстанавливает состояние из последней сохранённой версии. Если даже чтение SQLite невозможно, операция возвращает ошибку; ошибка хранения не объявляется успешным подтверждением. + +## HTTP и авторизация + +Публичные GET: `/api/health`, `/api/manifest`, `/api/worlds`, `/api/catalog`, `/api/entities`, `/api/metrics`. Каталог принимает `query`, `offset`, `limit` (1–256) `ids` с максимум 128 runtime ID или `states` с каноническими состояниями, разделёнными запятыми вне скобок свойств. Runtime ID берётся из ответа; он не совпадает с числовым ID Minecraft. + +`POST /api/control` принимает `{ "method": "world.read", "params": {...} }`, возвращает `{ "result": ... }` или HTTP 400 с `{ "error": "..." }`. Требуется `Authorization: Bearer `. При первом запуске файл `control.token` создаётся с режимом 0600 на Unix. Параметры операций доступны в схемах `tools/list` отдельного MCP. Названия Control API используют точку: `world.edit`, `build.plan`, `camera.capture` и т.д. + +Токен не является секретом от администратора локальной машины. Хеш manifest подтверждает совместимость ресурсов; он не доказывает неизменность исполняемого кода клиента. Защита игрового состояния основана на серверных проверках. Origin для браузерного WebSocket и Control API проверяется; межсайтовый доступ не включён. + +## WebSocket, снимки и правки + +Первое сообщение на `/ws` в течение 10 секунд: + +```json +{"type":"join","protocol":1,"manifest_hash":"из /api/manifest","name":"Игрок","world":"lobby"} +``` + +`welcome` содержит `id`, `world`, `revision`, `blocks:[{pos,block}]`, определения использованных `materials`, `players`, `entities`, `spawn`, `view_center` и `manifest_hash`. Снимок покрывает `[centerX-32, centerY-8, centerZ-32]…[centerX+31, centerY+31, centerZ+31]`, максимумы включительные. При перемещении центра видимости сервер присылает новый `snapshot`; клиент полностью заменяет геометрию. Полный строковый реестр в снимке не передаётся. `materials` ограничен 256 записями и 128 КиБ; остальные определения клиент последовательно запрашивает через `/api/catalog?ids=1,2,...&limit=128`. Это позволяет войти в мир с большой палитрой, не переполняя исходящую очередь. + +Клиент отправляет `input` с `seq,yaw,pitch,forward,strafe,jump`; `break` с `pos`; `place` с `pos,block` или `state`; `switch_world`, `resync`, `respawn`, `start_match`, `chat`, `ping`. Ответ `state` содержит авторитетные позиции, `tick`, подтверждённый `ack` и состояние матча. Блоки приходят в `blocks` с новой ревизией. При пропуске ревизии клиент запрашивает снимок. Подписка и создание снимка сериализованы с правками в одном потоке, поэтому промежуточная правка не теряется. + +Для управляющих правок сохраняется контракт ядра: ожидаемая ревизия, уникальный `operation_id`, durable-подтверждение, повтор того же запроса без второй записи, отказ при конфликте. План строительства занимает не более 32 768 ячеек, хранится 5 минут, максимум 16 планов; preview не меняет мир. Планы эфемерны и исчезают после перезапуска, принятые правки остаются на диске. `camera.capture` возвращает PNG изометрической серверной проекции и точную ревизию; это не кадр WebGL-камеры игрока. + +## Правила Spleef + +Матч проходит `waiting → countdown → active → finished → waiting`. По умолчанию нужны 2 игрока, отсчёт занимает 3 секунды, раунд — до 180 секунд. Разрешено разрушать только `minecraft:snow_block` в активном раунде; установка блоков и разрушение границы запрещены. Падение ниже Y=−6 означает выбывание. При одном оставшемся участнике объявляется победитель; истечение времени с несколькими оставшимися даёт ничью. После результата через 5 секунд мир возвращается к своему закреплённому шаблону, игроки — на spawn. Арены независимы. Отключение/уход из мира исключает участника; повторный вход во время раунда остаётся входом зрителя. После перезапуска прерванный матч сбрасывается к шаблону. + +`arena.configure` сохраняет настройки мира. Изменять их можно между матчами; попытка во время countdown/active/finished отклоняется. Доступны `mode`, `spawn` и следующие поля: + +- `countdown_seconds`: целое 1…30, по умолчанию 3; `round_seconds`: целое 1…3600, по умолчанию 180. +- `min_players`: целое 2…32, по умолчанию 2. +- `elimination_y`: конечная координата в пределах ±32 700, по умолчанию −6. +- `spawn_points`: до 32 точек `[x,y,z]`. Пустой список означает круг радиуса 7 вокруг X/Z=0 на высоте `spawn[1]`. Непустой список должен вмещать минимум участников, а при старте — всех вошедших; точки располагаются не ближе 0.8 блока друг к другу. +- `spectator_spawn`: точка зрителя, по умолчанию `[13,2,0]`. +- `floor_block`: известное каноническое состояние с коллизией, которое участникам разрешено разрушать. По умолчанию `minecraft:snow_block`. Пол в закреплённой карте должен уже содержать этот материал; configure не перекрашивает и не перестраивает карту. + +Все точки появления находятся в игровом диапазоне, их Y выше `elimination_y + 0.5`. Необязательный `expected_revision` проверяет общую ревизию метаданных, доступную через `entity.list`/`metrics`; это отдельная ревизия от блоков мира. Правила возвращаются в `match.rules`. Старые настройки с двумя полями `mode/spawn` читаются с указанными значениями по умолчанию. + +Журнал идемпотентности ядра относится к правкам блоков, undo/reset и подтверждению плана. Операции сущностей и настройки арен пока не имеют такого журнала: повторный `entity.spawn` создаёт ещё один экземпляр. После неопределённого сетевого результата сначала следует прочитать текущее состояние. + +## Лимиты и наблюдаемость + +- 32 WebSocket-сессии, включая ожидающие join; 16 одновременно обслуживаемых HTTP-запросов, очередь 64 команд. +- Входное сообщение WebSocket до 64 КиБ, максимум 80 сообщений/с на соединение; действия блоков не чаще 110 мс, чат не чаще 700 мс, явный resync не чаще 500 мс, переход между мирами не чаще секунды, автоматический снимок при смене секции не чаще 2 секунд. +- Control API до 2 МиБ JSON; штатная правка до 32 768 ячеек; чтение до 262 144 ячеек и 6 МиБ ответа; при превышении байтового лимита требуется уменьшить область. +- Исходящая очередь на клиента: 16 сообщений и 8 МиБ. При переполнении или превышении срока отправки медленное соединение закрывается. Общее верхнее ограничение очередей зависит от числа клиентов; эти байты не следует путать с кэшем секций. +- Метаданные сервера до 8 МиБ, до 4096 сущностей, свойства одной сущности до 16 КиБ. В игровые снимки входят компактные представления без произвольного JSON свойств; полные свойства читаются через `entity.list` с offset и limit (по умолчанию 64, максимум 128). +- RAM процесса в `/api/metrics` — фактический Linux VmRSS, а `storage.cache_payload_bytes` — только полезные байты кодированных секций. Каталог, строки, SQLite, сетевые буферы, временные чтения и память аллокатора существуют отдельно. + +Максимальная разрешённая конфигурация лимитов не равна измеренному целевому профилю нагрузки. Условия и результаты benchmark публикуются в VERIFICATION; заявлений о выигрыше относительно Paper без сопоставимого прогона нет. + +## Сущности и совместимость + +158 определений сущностей имеют реальные размеры и авторские процедурные модели. Сохраняемые экземпляры создаются, перемещаются и удаляются через MCP. Полноценные ванильные AI, redstone, жидкости, инвентари и игровая логика Minecraft не реализованы. Формы контекстно зависимых блоков явно отмечены в каталоге. Изменённые и неизвестные данные конвертер обрабатывает по правилам `docs/interop.md`, без молчаливого объявления lossless-совместимости. diff --git a/docs/STATUS.md b/docs/STATUS.md index 38f5656..a2191d1 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -1,49 +1,31 @@ # Состояние проекта -Обновлено: 2026-09-14. Рабочая папка: `/home/emil/Desktop/shacraft-core`. +Обновлено 2026-09-14. Реализован и локально проверен весь согласованный профиль MVP. Рабочая папка: `/home/emil/Desktop/shacraft-core`. Исходный план сохранён до реализации коммитом `ddfcef2`; результаты старой облачной среды не использовались как доказательство. -## Завершено: планирование и первый этап хранения +## Готово -План сохранён **до реализации**, отдельным Git-коммитом `ddfcef2`. Исходники старой облачной среды не восстановлены и не использованы как доказательство работы новой реализации. +- Самостоятельное ядро Rust: компактные секции, общий ограниченный LRU, долговечные правки и история, immutable snapshots, независимые миры, revision/idempotency, undo/reset. +- Отдельный авторитетный сервер с игровым циклом 20 Гц, проверкой движения/форм/дальности, ограниченными очередями, сохраняемыми настройками и сущностями. +- Собственный браузерный WebGL2-клиент: строительство, каталог, игроки/сущности, чат, миры, загрузка пакетов и диагностика. Нет зависимости от готового игрового движка. +- Настоящий отдельный stdio MCP: 17 инструментов, 4 ресурса, строительный prompt, планы/commit, визуальный PNG и проверка через независимый MCP SDK. +- Полный каталог Java 26.2: 1 196 блоков, 32 366 состояний, 158 сущностей, DataVersion 4903. Коллизии измерены через официальный API, модели авторские; контекстные случаи отмечены. +- Пакеты: точные версии, граф зависимостей, SHA-256/размеры, приватные серверные файлы, проверяемый клиентский кэш. Действующий WASM `on_jump`, пользовательские определения блоков и собственные текстуры/шейдер/звук. +- Spleef: две независимые арены общей карты, отсчёт, выбывание, победитель/ничья, сброс, spectators, сохраняемые правила, восстановление после прерывания. Лобби и галерея 1 197 образцов. +- Anvil и Sponge v3 import/export: типизированный NBT, сохранение оригинала, атомарная публикация, отчёты о потерях/преобразованиях, перенос игровых правок блоков и сущностей. -Работают две crate: +## Проверено -- `shacraft-core`: versioned codec секций 16³ (uniform/palette/dense), компактный LRU, долговечный реестр, SQLite/WAL/FULL, блокировка второго писателя, неизменяемые снимки, независимые экземпляры, атомарные edit, revision/idempotency, undo/reset и явная уборка недостижимых blobs. -- `shacraft-tools`: локальная JSON-lines сессия для тестирования API, demo, stats и воспроизводимый storage benchmark. Это не MCP и не игровой сервер. +84 Rust-теста, 6 JS-тестов, fmt и Clippy без предупреждений; 14 групп реальных HTTP/WebSocket-сценариев, отдельная MCP SDK-сессия, SIGKILL и восстановление. Экспорты прочитаны официальными Java 26.2 codecs и независимым NBT-читателем. Клиент осмотрен в реальном браузере; подтверждены отрисовка, поиск состояний, переход в галерею, догрузка материалов, повторное соединение и кэш ресурсов. -Проверено на Linux x86_64 с Rust 1.96.0: +Финальный release-стенд: 100 пустующих экземпляров карты — 50.50 МиБ RSS; 10 движущихся клиентов — максимум 59.65 МиБ RSS/VmHWM, p95 выборки работы тика 7.33–9.54 мс. Это ограниченный локальный профиль, не сравнение с Paper. Команды и доказательства — [VERIFICATION](VERIFICATION.md). -- `cargo fmt` и Clippy с запретом предупреждений. -- 29 Rust-тестов: 11 codec, 8 black-box контрактов, 10 хранения. -- Отдельные процессы: 80 подтверждённых правок → SIGKILL → восстановление реестра/данных/replay; прерывание транзакции на 32768 ячеек → отсутствие частичного состояния → безопасный повтор. -- Вытеснение различных секций при превышении кэша; однородная секция остаётся компактной и в RAM. -- Release demo и синтетический benchmark: 256 секций, 100 независимых экземпляров, чтение сверх кэша, edit/reset каждого экземпляра. +## Точные границы -Команды и результаты: [DEVELOPMENT](DEVELOPMENT.md), [VERIFICATION](VERIFICATION.md), `docs/verification/`. +- Это самостоятельная миниигровая платформа с каталогом Minecraft, не полная ванильная симуляция: нет полного AI, redstone, инвентарей или симуляции жидкостей. Формы с зависимостью от контекста помечены; модели не повторяют ванильные ассеты. +- `exact` консервативно отказывает после правок; `best-effort` отражает изменения и выдаёт отчёт. Между Anvil и `.schem` не вся семантика биомов/block entities преобразуется — исходные данные архивируются. Ограничения версий, размеров и контекстов описаны в interop.md. +- История блоков хранится на диске без автоматического удаления. Undo допускает только текущую целевую правку. Preview-планы эфемерны, 5 минут. Метаданные сущностей/правил имеют отдельную ревизию; их API не заявляет журнал идемпотентности ядра. +- Предел игрового пространства с f32-физикой — ±32700; хранение и конвертер поддерживают координаты ядра ±30 миллионов. Память ограничивается несколькими структурами, а не одним магическим RSS-лимитом. +- Проверены Linux x86_64 и локальная нагрузка. Длительный продакшен soak, аппаратное отключение питания, все ОС и игровой плейтест экспорта в запущенном Minecraft не заявляются пройденными. +- Лаунчер, аккаунты, продакшен и существующие серверы — последующая интеграция. Ничего не опубликовано и не развёрнуто на удалённых машинах. -## Следующий этап: сервер и тестовый клиент - -1. Добавить crate сервера с игровым циклом отдельно от долговечных редакторских транзакций. Не выполнять SQL/FULL commit каждого игрового ввода. -2. Уточнить протокол resync, подписку без разрыва между снимком и изменениями, переключение миров и лимиты очередей. -3. Реализовать серверные движение/коллизии/взаимодействия и минимальный WebGL2-клиент по решению D003. -4. Пройти сценарий двух клиентов с общими блоками и независимыми мирами. -5. Затем подключить собственный MCP через общий Control API, полный каталог и конвертер согласно PLAN. - -## Ограничения первого этапа - -- Полный MVP ещё не завершён. Нет игрового сервера, графического клиента, MCP, каталога 26.2, конвертера, системы исполняемых модулей и миниигры. -- Undo консервативный: только целевая правка на текущей ревизии, без последующих операций. Каждый новый успешный edit, включая no-op, повышает ревизию. Retry не повышает. -- История остаётся на диске без автоматического удаления. GC ограничивает число удалённых blobs, но не время сканирования. Он не удаляет историю/снимки и не уменьшает физический файл через VACUUM. -- Реестр строк находится в RAM: максимум 262144 состояния по 512 ASCII-байт. Кэш секций не является лимитом всей памяти процесса. SQLite page-cache budget — настройка движка, не жёсткий RSS-лимит. -- Benchmark проверяет хранение, не игроков/тики/полный каталог и не сравнительную экономию относительно Paper. -- SIGKILL не имитирует отключение питания и отказы накопителя. Платформы вне Linux пока не проверены. -- Продакшен, существующий лаунчер и удалённые репозитории не изменялись. - -## Правила продолжения - -- Перед работой прочитать REQUIREMENTS, PLAN, DECISIONS, CONTRACT и этот файл. -- Новые результаты подтверждать командами, тестами или видимым поведением; старый облачный отчёт не использовать как доказательство. -- Не помечать весь MVP готовым по завершению одного этапа. -- Отмечать точные ограничения контента, конвертера, клиента, модулей и безопасности. -- Команды запуска и проверки сохранять в репозитории; изменения коммитить в локальный Git после проверки. -- Не помещать токены, данные реальных игроков и проприетарные ассеты в Git и архивы. +Контракты компонентов: SERVER.md, MCP.md, CONTENT.md, PACKAGES.md, interop.md. Исходники и release-бинарные файлы упаковывает `scripts/make_release.py`; в архивы не входят токены, локальные миры и Minecraft JAR. diff --git a/docs/VERIFICATION.md b/docs/VERIFICATION.md index 70228de..dd97924 100644 --- a/docs/VERIFICATION.md +++ b/docs/VERIFICATION.md @@ -1,32 +1,60 @@ -# Проверки первого этапа, 14 сентября 2026 +# Проверка локального MVP -Проверены библиотека хранения и CLI. Рубеж A из ACCEPTANCE.md целиком ещё не пройден: сервер/клиент/MCP отсутствуют. Результаты ниже не объявляют полный MVP готовым. +Дата: 2026-09-14. Стенд: Linux x86_64, AMD Ryzen 7 1700, Rust/Cargo 1.96.0, Node 22.22.3, Python 3.14.4. Точные версии — [environment.json](verification/environment.json). Исходная ревизия выпуска фиксируется в `RELEASE.json` каждого архива. ## Автоматические проверки -Команда `bash scripts/verify.sh` завершилась с кодом 0. В [полном журнале](verification/checks.txt) сохранены: - -- форматирование и Clippy `--workspace --all-targets --locked -- -D warnings` без ошибок; -- 29 Rust-тестов (11 секционного формата, 8 публичных контрактов, 10 хранилища); -- сборка CLI; -- девять проверок отдельного процесса, включая принудительное завершение и восстановление. - -В аварийном сценарии 80 правок были подтверждены процессом до SIGKILL и сохранились после повторного открытия. Повтор старой операции вернул её исходный результат без повторной правки. Большая операция на 32768 блоков, завершения которой вызывающий код не наблюдал, восстановилась целиком или отсутствовала целиком; безопасный повтор завершился на одной ревизии. Дополнительно SQL-тест принудительно вызывает отказ в середине изменения и проверяет откат данных, истории и ревизии. - -## Проверка работы и хранения - -`cargo build --release -p shacraft-tools --locked` завершилась успешно. [Результат demo](verification/demo.json) подтверждает сценарий общей карты, двух экземпляров, изолированной правки, undo и reset. - -[Сырой результат benchmark](verification/storage-benchmark.json) получен командой: - ```bash -target/release/shacraft-tools --data <пустой-временный-каталог> --cache 8 benchmark --sections 256 --worlds 100 +bash scripts/verify.sh +cargo build --release --workspace --locked +node scripts/check_server.mjs --binary target/release/shacraft-server --output artifacts/server-e2e-release.json +node scripts/check_mcp.mjs --binary target/release/shacraft-server --output artifacts/mcp-sdk.json +node scripts/benchmark_server.mjs --binary target/release/shacraft-server --output artifacts/server-benchmark-final.json ``` -После создания 100 экземпляров количество blobs осталось 256: карты разделяют неизменяемые данные. После обхода карты резидентный кэш остался в пределах восьми записей и зафиксировал вытеснения. Все экземпляры прошли независимую правку и сброс. RSS, размеры файлов и длительности сохранены в JSON вместе с версией Rust и системой. +`verify.sh` завершился с кодом 0: fmt, Clippy `-D warnings`, **84 Rust-теста** (core 30, content 11, compat 17, MCP 8, server/WASM 18), **6 JS-тестов**, отдельная аварийная проверка хранилища и debug HTTP/WebSocket-сценарий. [Полный журнал](verification/mvp-checks.txt). -Это один синтетический прогон на небольшом реестре из двух состояний, без сети, игроков и симуляции. Не использовать его для оценки готового сервера или сравнения с Paper. Байты закодированных секций не включают служебные структуры/аллокатор; RSS измеряется отдельно. +Release-прогон прошёл **14 групп**: проверка ресурсов/авторизации, несовместимый manifest, два клиента, авторитетное движение, недостижимая правка, реальные break/place, последовательные ревизии, late join, immutable template/изоляция, чат, события сущностей, reconnect, полный Spleef и reset, удаление отключённых игроков, **SIGKILL → восстановление блоков, свойств сущностей и настроек**. [Отчёт](verification/server-e2e.json). -## Ограничения доказательств +Настоящий MCP SDK 1.30.0 прошёл initialize/notification/ping, 17 schemas, 4 resources, prompt, durable edit/replay/conflict/undo, plan/commit/retry, PNG image content, entities CRUD, настройки, metrics/reset. [Отчёт SDK](verification/mcp-sdk.json). Для воспроизведения установить независимый клиент: -Подтверждена работа на Linux x86_64. Тесты завершения процесса не имитируют отключение питания или аппаратные сбои. Часть защиты от повреждений проверяется на намеренно изменённых временных SQLite-базах; реальные миры пользователя не затрагиваются. Интеграция с Minecraft, лаунчером и MCP относится к следующим этапам и пока не проверялась. +```bash +npm install --prefix artifacts/mcp-sdk --no-package-lock @modelcontextprotocol/sdk@1.30.0 +SHACRAFT_MCP_SDK="$PWD/artifacts/mcp-sdk/node_modules/@modelcontextprotocol/sdk" node scripts/check_mcp.mjs --binary target/release/shacraft-server --output artifacts/mcp-sdk.json +``` + +В репозитории нет зависимости рабочего клиента от Node/MCP SDK. Они нужны только проверке. + +## Каталог и совместимость + +Каталог сравнивается с независимой проекцией официальных отчётов по всем каноническим состояниям, properties/defaults и множеству сущностей. Отдельно проверены геометрия, ориентации плит/ступеней/дверей, контекстные случаи, entity dimensions. Повторный полный генератор отчётов/API и авторских ресурсов воспроизвёл файлы побайтно: [reproducibility](verification/catalog-reproducibility.json). + +17 converter-тестов покрывают типизированный NBT, compression modes/external chunks, палитры, negative coordinates, unknown data, offset/3D biomes, удаление stale chest data, original checksums, no-overwrite, invalid input, создание/перемещение/удаление сущностей и отдельный entity fingerprint. + +Официальный Java 26.2 прочитал exact (1 chunk, 3 блока, 1 сущность), edited (2 chunks, 3 блока, 1 сущность) и новый экспорт (2 chunks, 2 блока). nbtlib 2.0.4 проверил Sponge-теги и их числовые типы. [Машиночитаемый результат](verification/interop.json), [команды и ограничения](interop.md). Использовались публичные codecs без запуска Minecraft-сервера и без принятия EULA. + +## Память и тик + +Бюджеты записаны в скрипте **до прогона**: 256 МиБ для процесса с 10 клиентами, p95 выборки работы тика ≤50 мс. Полный каталог включён. Один сервер содержит 5 служебных/демонстрационных миров и 1, 10, затем 100 дополнительных immutable forks лобби. Активные этапы: 10 клиентов в одной области общего мира и в отдельных мирах, движение/прыжок с вводом 20 Гц, по 15 секунд; метрики каждые 100 мс. Затем все клиенты отключаются. Linux VmHWM дополнительно фиксирует пик процесса, включая промежутки между выборками. + +Финальный прогон: + +- 1 / 10 / 100 пустующих forks: максимальный RSS **50.28 / 50.35 / 50.50 МиБ**. +- 10 клиентов в общем мире: RSS/VmHWM **57.00 МиБ**, p95 работы тика **9.54 мс**. +- 10 клиентов в 10 мирах: RSS/VmHWM **59.65 МиБ**, p95 **7.33 мс**. +- После отключения: 0 игроков и 0 активных миров; RSS остаётся **59.65 МиБ** из-за удерживаемого кэша/аллокатора. Нулевое число активных миров не означает нулевой RSS. +- Ограничение кэша выполнено во всех выборках, исходящие очереди и активные миры измерены. Оба заранее заданных бюджета пройдены. + +[Полные фазы и исходные выборки](verification/server-benchmark.json). p95 рассчитан по выборке последней работы тика, не по сетевой задержке и не по всей непрерывной последовательности тиков. Это короткий локальный тест движения; нагрузка ванильных механик, тысячи игроков и бесконечные пользовательские миры не включены. С Paper/NeoForge результат не сравнивался. + +Отдельный storage benchmark этапа 1 сохраняется в [storage-benchmark.json](verification/storage-benchmark.json): 256 уникальных секций, кэш 8, 100 forks, обход сверх кэша и независимые edit/reset. После создания forks число immutable blobs осталось 256. Это синтетический профиль ядра с двумя состояниями, отдельный от полного сервера. + +## Браузер и поставка + +[Браузерный протокол проверки](verification/browser.md) фиксирует реальные снимки/DOM, каталог, неполные формы, сущности, чистое подключение без полного registry, галерею, повторное соединение и проверенный ресурсный кэш. На этом стенде наблюдались 144 FPS; переносить это число на другие устройства нельзя. + +`python3 scripts/make_release.py` и вариант `--binaries` создают архив из чистого Git-коммита, добавляют `RELEASE.json` с SHA-256 каждого файла и проверяют каждый файл при повторном чтении архива. Соседний `.sha256` проверяет весь архив. Поставка проверяется повторной распаковкой, offline Cargo-проверкой исходников и запуском извлечённого Linux-бинарного файла с ресурсами из архива. Итоговый журнал упаковки находится рядом с архивами в `artifacts/`. + +## Границы приёмки + +Основные рубежи A-CORE/SERVER/CLIENT/MCP/SPLEEF подтверждены перечисленными тестами и браузерным осмотром. B-CONTENT, B-PACKAGES, B-INTEROP, B-PERSISTENCE выполнены в документированном профиле. B-MEMORY подтверждён указанной нагрузкой, а не произвольным масштабом. Более широкие пункты исходного ACCEPTANCE (долгий soak, все игровые контексты Minecraft, все варианты внешних миров и реальный Minecraft-плейтест) не объявляются пройденными. Заявления о полной ванильной симуляции, аппаратной отказоустойчивости или экономии относительно Paper отсутствуют. diff --git a/docs/interop.md b/docs/interop.md new file mode 100644 index 0000000..a3f8d82 --- /dev/null +++ b/docs/interop.md @@ -0,0 +1,88 @@ +# Interchange MVP: Java 26.2 и Sponge v3 + +`shacraft-compat` — отдельная Rust-библиотека и автономная CLI. Она действительно переносит состояния блоков в `WorldStore`: браузер, Control API и MCP редактируют импортированные данные, а экспорт читает текущие секции. Исходный мир хранится отдельно на диске с SHA-256. Возврат оригинала без изменений является отдельным проверенным режимом. + +Целевая версия: **Minecraft Java 26.2, DataVersion 4903**. Библиотека не запускает JVM. Java 25 нужна только воспроизводимой проверке и генератору собственных тестовых сохранений. + +## Команды + +Команды выполняются из корня репозитория. Все выходные пути должны отсутствовать. Каждый экспорт публикует **каталог**, даже экспорт одной постройки: в нём находятся `world.schem` и `conversion-report.json`. Если исходный мир уже содержит файл с этим именем, новый отчёт получает числовой суффикс; исходный файл сохраняется. + +```bash +cargo build --release -p shacraft-compat -p shacraft-server + +# Импорт остановленной копии Java-мира в новый native store. +target/release/shacraft-compat import-anvil /path/to/java-world data/imported + +# Открыть импорт в браузере через сервер; в списке миров выбрать main. +target/release/shacraft-server --data data/imported --listen 127.0.0.1:4000 + +# После остановки сервера: все импортированные измерения вместе. +target/release/shacraft-compat export-anvil data/imported artifacts/return-exact +target/release/shacraft-compat export-anvil data/imported artifacts/return-edited --mode best-effort + +# Новый мир Shacraft: полноценный каталог сохранения Java 26.2. +target/release/shacraft-compat export-anvil data artifacts/new-java-world --world lobby --mode best-effort + +# Sponge v3; Offset переносится в координаты native мира. +target/release/shacraft-compat import-schem /path/to/build.schem data/build --world main +target/release/shacraft-compat export-schem data/build artifacts/build-edited --mode best-effort + +# Экспорт ограниченного объёма нового native мира; границы включительные. +target/release/shacraft-compat export-schem data artifacts/build --world lobby --min=-16,-1,-16 --max=16,15,16 +``` + +CLI печатает отчёт JSON в stdout, ошибки — JSON в stderr и ненулевой exit code. Конвертация выполняется offline: `WorldStore` удерживает ту же блокировку единственного писателя, что сервер, поэтому параллельное редактирование не смешивает ревизии в одном экспорте. Сам исходный Java-мир должен быть остановленной копией: изменения размера/времени файла во время копирования обнаруживаются, но это не заменяет согласованный backup работающего Minecraft. + +## Что реализовано + +- Big-endian NBT: все 12 payload-типов, числовые разрядности, float/double bit patterns, signed arrays, Java modified UTF-8/CESU-8, Unicode, тип элемента пустого списка и неизвестные compound-поля. Duplicate compound keys, невозможные длины, превышение глубины и лишние распакованные байты отклоняются. +- Anvil: `level.dat`, обычные измерения, `dimensions//`, секционные палитры `Name`/`Properties`, современные непересекающие 64-битную границу индексы, отрицательные координаты, единообразные секции, биомы. Чтение gzip, zlib, raw и LZ4Block с checksum, включая внешние `c.x.z.mcc`. Запись zlib и внешний payload для chunk более 255 секторов. +- Исходные `entities`, `block_entities`, POI, биомы, inventories, playerdata, datapacks, неизвестные поля и произвольные обычные файлы сохраняются на диске. Отдельные entity region-файлы действительно читаются для серверного представления, а не только копируются. +- Sponge v3: `Blocks`, sparse palette indices и varints, block entities, сущности, полный 3D-контейнер биомов, размеры, Offset, Metadata и неизвестные теги. Контейнер `Schematic` вложен в корневой NBT compound согласно спецификации. +- Новый Anvil-мир использует собственный маленький шаблон сохранения, созданный public API Java 26.2. В 26.2 параметры генерации и game rules находятся в `data/minecraft/world_gen_settings.dat` и `game_rules.dat`; экспорт включает эти файлы. Генератор — пустой flat overworld, creative, три стандартных измерения, биом plains в новых секциях, высота редактируемого экспорта −64…319. + +## Сущности между MCP и файлами мира + +Импорт создаёт совместимый `server.sqlite3`, таблица `metadata(id,json)`. До 4 096 сущностей становятся доступны через сервер и MCP с исходными UUID, типом, координатами и поворотом. Остальные сущности, неподходящие координаты и неподдерживаемые записи остаются в оригинале и отмечаются `preserved`; они не превращаются в пропавшие данные. + +Исходный типизированный NBT каждой редактируемой сущности находится в `compat/entities/.nbt`; его хеш закреплён в provenance. `compat/native-entities.json` содержит исходное серверное представление. Экспорт отдельно сравнивает fingerprint сущностей и ревизии блоков, поэтому перемещение сущности без правки блоков также отклоняет `exact`. + +`best-effort` применяет создание, удаление и перемещение сущностей между chunks/regions и измерениями, а также yaw в радианах из серверного API. Явно поддерживаются свойства `Health`, `CustomName`, `NoGravity`, `Invisible`, `Invulnerable`, `Glowing`, `Silent`, `CustomNameVisible` с соответствующими числовыми/строковыми/логическими типами. Прочие свойства JSON сохраняются в `shacraft-native-entities*.json` и получают `entity_property_unmapped`; они не выдаются за vanilla NBT. Оригинальный NBT сохраняет остальные поля. AI, passengers, leash и связанные UUID не симулируются и не получают обещания точной семантики после перемещения. + +## Exact и best-effort + +`exact` использует DataVersion 4903 и тот же формат, что источник. Пока **любая новая ревизия блоков или изменённое серверное представление сущностей** консервативно запрещает точный возврат исходного мира/постройки. Это касается даже отменённой правки, восстановившей те же блоки: ревизия не возвращается назад. Без правок все исходные файлы побайтно идентичны после проверки SHA-256. + +Для нового native мира `exact` поддерживает представимый Sponge v3. Создание нового Anvil-окружения и межформатное преобразование требуют `best-effort`, поскольку свет и производные данные нуждаются в восстановлении Minecraft. Режим не содержит скрытых замен блоков. Неизвестный namespace остаётся в палитре и получает `unsupported`: целевому Minecraft нужен соответствующий мод, иначе он может заменить неизвестный блок воздухом. + +В изменённых Anvil chunks экспорт обновляет палитры/блоки, удаляет сохранённые light arrays и heightmaps, устанавливает `isLightOn=false`, удаляет устаревшие block entities и scheduled ticks непосредственно в изменённых координатах, инвалидирует POI record изменённого chunk. Все эти действия перечислены в отчёте, оригиналы находятся в `shacraft-source-sidecar*`. Это проверенный профиль сериализации и инвалидации; прохождение полной игровой симуляции света/POI не заявляется. + +При экспорте между `.schem` и Anvil переносится блоковая модель и явный entity bridge. Биомная сетка, block entities и произвольные metadata разных форматов пока архивируются без преобразования и получают `cross_format_opaque_data`. Оригинал находится рядом с результатом. Неподдерживаемые версии не мигрируют через DataFixer: `exact` отказывает, а `best-effort` сохраняет исходный DataVersion и диагностирует непроверенную схему. + +## Ограничения ресурсов и публикация + +- Не более 16 MiB распакованного NBT на chunk/постройку, глубина 64, до 1 000 000 NBT nodes. Это лимиты входных данных, не обещание 16 MiB RSS: Rust-структуры и строки занимают дополнительную память. +- Sponge: максимум 262 144 вокселя; Anvil обрабатывается по одному chunk, экспортная очередь координат находится на диске, страницы секций — не более 4 096 ключей. Кэш ядра конвертера — 32 секции плюс ограниченный SQLite cache. +- Entity bridge: 4 096 записей, до 16 KiB properties на сущность, ограничение сериализованного metadata 8 MiB (импортируемый entity subset ограничен 6 MiB с запасом для настроек сервера). Избыточные исходные сущности сохраняются без загрузки всех записей в серверную RAM. +- До 1 000 подробных issue в отчёте; `omitted_issues` явно считает оставшиеся события. До 256 импортированных измерений, 1 000 000 файлов, 8 GiB на исходный файл и 1 TiB суммарного источника. Symlinks, специальные файлы, выход из каталога, вложенный в исходный мир destination и повреждённые region headers отклоняются. +- Импорт строит весь новый native store, metadata и provenance в соседнем временном каталоге. Экспорт тоже использует staging. Файлы и каталоги синхронизируются, публикация — Linux `renameat2(RENAME_NOREPLACE)` и fsync родителя. Конвертер никогда не перезаписывает существующий destination и не меняет исходный Java-мир. +- При штатной ошибке staging удаляется; после SIGKILL может остаться непубликованный `.shacraft-convert-*`. Повторный импорт безопасно начинается заново. Возобновление с последнего chunk после аварии ещё не реализовано. Нужен запас диска: исходный архив плюс native DB, а изменённый экспорт сохраняет ещё одну полную копию исходника. + +`.schem` v2, legacy `.schematic`, vanilla structure `.nbt`, произвольные повороты/миграции версий и полная ванильная симуляция не включены в этот профиль. Они не распознаются как v3 по расширению файла. + +## Воспроизводимая проверка + +```bash +cargo test -p shacraft-compat +cargo clippy -p shacraft-compat --all-targets -- -D warnings +python3 -m venv artifacts/compat-venv +artifacts/compat-venv/bin/pip install nbtlib==2.0.4 +artifacts/compat-venv/bin/python scripts/compat_verify.py +``` + +Для последней команды нужен pinned JAR/JDK из `scripts/catalog_generate.py`; альтернативный JDK передаётся `--java-bin /path/to/jdk25/bin`. Скрипт проверяет SHA-1 JAR, компилирует `compat_java.java`, проверяет оригинальный, изменённый и новый Rust-экспорт через **официальные `NbtIo`, `RegionFile`, `SerializableChunkData`, `PrimaryLevelData`, `WorldGenSettings`**. Независимый `nbtlib 2.0.4` сравнивает типизированные Sponge-теги. Результат и Java logs сохраняются в `artifacts/compat-verification-*/verification.json`. + +Проверка 14 сентября 2026: 17 Rust-тестов и clippy прошли; Java прочитал exact 1 chunk / 3 блока, edited 2 chunks / 3 блока, new 2 chunks / 2 блока. Плюс тесты всех четырёх compression modes, внешнего большого chunk, границ палитр, отрицательных координат, entities move/create/remove, отказа exact после entity edits, checksum и no-overwrite. Java-проверка использует codecs, **не запускает сервер, не принимает EULA и не является игровым плейтестом**. + +Первичные источники: [Sponge v3 specification](https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-3.md), [WorldEdit AnvilChunk18](https://github.com/EngineHub/WorldEdit/blob/dca10737fe81bd81bb6a096e1801cc2d94f1793b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/AnvilChunk18.java), [lz4-java block stream](https://github.com/lz4/lz4-java/blob/master/src/java/net/jpountz/lz4/LZ4BlockInputStream.java). Runtime реализация написана самостоятельно; код Minecraft и оригинальные игровые ресурсы не включены. diff --git a/docs/verification/browser.md b/docs/verification/browser.md new file mode 100644 index 0000000..76f1229 --- /dev/null +++ b/docs/verification/browser.md @@ -0,0 +1,14 @@ +# Браузерная проверка 2026-09-14 + +Проверялся реальный Codex In-app Browser на `http://127.0.0.1:4000` через CUA. API-тесты проводились отдельными HTTP/WebSocket-процессами. + +- Чистое открытие страницы: manifest, 8 проверенных ресурсов, вход в lobby, собственный WebGL2-рендер без ошибки инициализации. +- Лобби видно на реальном снимке: пиксельная площадка, световые столбы, арка, вода, trampoline, небо, солнце, HUD. +- Каталог открыл 32 367 состояний; поиск `minecraft:oak_slab` вернул 6 вариантов с точными type/waterlogged. Выбран `type=bottom,waterlogged=false`, быстрый слот сменился на него. +- Диагностика показывала live tick/ack, ревизию, координаты, число блоков, RAM и полезный кэш отдельно. В лобби на стенде наблюдались 144 FPS, 11 920 треугольников, 0 ожидающих секций. +- После остановки и замены серверного процесса открытая страница автоматически переподключилась. Ранее выбранный материал остался выбранным. +- Созданные через Control API сохраняемые сущности пришли в клиент; allay виден на снимке, счётчик сущностей обновился. +- Второй чистый браузерный клиент загрузил финальный протокол **без передачи полного registry**. Hotbar заполнился через поиск каталога; 8 ресурсов повторно прошли проверку из кэша. +- Выбор `gallery` заменил мир. На реальном снимке видны разные кубические и неполные формы, UI не перекрывает весь мир. Диагностика: 1 614 блоков в текущем окне, 7 808 треугольников, 144 FPS, 0 ожидающих секций. Все 1 197 образцов находятся в мире, а не обязательно в одном окне просмотра. + +FPS описывает этот браузер, оборудование, размер окна и точку наблюдения. Это не минимальное требование и не обещание производительности на другом устройстве. Движение, reach, строительство двух клиентов, Spleef, переподключение и аварийная долговечность дополнительно проверены воспроизводимым `scripts/check_server.mjs`. diff --git a/docs/verification/catalog-reproducibility.json b/docs/verification/catalog-reproducibility.json new file mode 100644 index 0000000..c6a4680 --- /dev/null +++ b/docs/verification/catalog-reproducibility.json @@ -0,0 +1,8 @@ +{ + "catalog": "byte-for-byte identical after full reports + runtime extraction", + "package_assets": "byte-for-byte identical after authoring script", + "source_hashes": { + "catalog.json.gz": "df889f6ce074b96130011d00b2f3b661cf910aba44064a0b5f361d7c064ce8ed", + "report-identities.json.gz": "938232b10d17071d3eefa54ce9a1c3026e17f39b5a2c0f4d6ede2644824d9135" + } +} diff --git a/docs/verification/environment.json b/docs/verification/environment.json new file mode 100644 index 0000000..b3af1c5 --- /dev/null +++ b/docs/verification/environment.json @@ -0,0 +1,11 @@ +{ + "date": "2026-09-14", + "platform": "Linux", + "machine": "x86_64", + "kernel": "7.0.0-31-generic", + "cpu": "AMD Ryzen 7 1700 Eight-Core Processor", + "rustc": "rustc 1.96.0 (ac68faa20 2026-05-25)", + "cargo": "cargo 1.96.0 (30a34c682 2026-05-25)", + "node": "v22.22.3", + "python": "3.14.4" +} diff --git a/docs/verification/interop.json b/docs/verification/interop.json new file mode 100644 index 0000000..f13bce7 --- /dev/null +++ b/docs/verification/interop.json @@ -0,0 +1,146 @@ +{ + "success": true, + "directory": "/home/emil/Desktop/shacraft-core/artifacts/compat-verification-2rxmacov", + "java": [ + { + "java26_2_verified": true, + "chunks": 1, + "sections": 1, + "entities": 1, + "nonair_blocks": 3, + "level_name": "Shacraft template", + "scope": "NbtIo,RegionFile,SerializableChunkData,PrimaryLevelData,WorldGenSettings codecs; no server simulation", + "case": "exact" + }, + { + "java26_2_verified": true, + "chunks": 2, + "sections": 25, + "entities": 1, + "nonair_blocks": 3, + "level_name": "Shacraft template", + "scope": "NbtIo,RegionFile,SerializableChunkData,PrimaryLevelData,WorldGenSettings codecs; no server simulation", + "case": "edited" + }, + { + "java26_2_verified": true, + "chunks": 2, + "sections": 48, + "entities": 0, + "nonair_blocks": 2, + "level_name": "own", + "scope": "NbtIo,RegionFile,SerializableChunkData,PrimaryLevelData,WorldGenSettings codecs; no server simulation", + "case": "new" + } + ], + "nbtlib_version": "2.0.4", + "source_jar_sha1": "823e2250d24b3ddac457a60c92a6a941943fcd6a", + "source_jar_sha256": "cdacdfb25898de5e4b4b0e5ddcc2722f77067e46605709c2d886c000ebb63ec5", + "nbtlib_sponge_typed_roundtrip": true, + "exact_source_files_identical": true, + "edited_world": { + "schema_version": 1, + "format": "anvil", + "mode": "best-effort", + "data_version": 4903, + "worlds": { + "main": 2 + }, + "chunks": 2, + "sections": 25, + "nonair_blocks": 3, + "issues": [ + { + "code": "source_archive", + "severity": "info", + "action": "preserved", + "location": "shacraft-source-sidecar", + "detail": "Verified original world retained for unsupported/stale data", + "count": 1 + }, + { + "code": "dependent_records_invalidated", + "severity": "warning", + "action": "dropped", + "location": "main:chunk-1,1", + "detail": "Removed1 stale block_entities at edited coordinates; originals retained in sidecar", + "count": 1 + }, + { + "code": "derived_fields_invalidated", + "severity": "warning", + "action": "approximated", + "location": "main:chunk-1,1", + "detail": "Removed stored light arrays and heightmaps, marked isLightOn=false for Minecraft reconstruction; unknown fields/entities/biomes preserved. No vanilla simulation guarantee.", + "count": 1 + }, + { + "code": "derived_fields_invalidated", + "severity": "warning", + "action": "approximated", + "location": "main:chunk32,-33", + "detail": "Removed stored light arrays and heightmaps, marked isLightOn=false for Minecraft reconstruction; unknown fields/entities/biomes preserved. No vanilla simulation guarantee.", + "count": 1 + }, + { + "code": "entity_edited", + "severity": "warning", + "action": "approximated", + "location": "00000001-0000-0002-0000-000300000004", + "detail": "Position/yaw/type and supported scalar properties applied; unknown original NBT retained; passenger/tether/AI relationships not simulated", + "count": 1 + } + ], + "issue_limit": 1000, + "omitted_issues": 0, + "source_files": 0, + "source_bytes": 0, + "native_entity_bytes": 0, + "profile": "Java 26.2 (DataVersion 4903); blocks editable, other typed NBT preserved on disk; offline writer lock" + }, + "native_world": { + "schema_version": 1, + "format": "anvil", + "mode": "best-effort", + "data_version": 4903, + "worlds": { + "own": 1 + }, + "chunks": 2, + "sections": 48, + "nonair_blocks": 2, + "issues": [ + { + "code": "new_world_profile", + "severity": "warning", + "action": "approximated", + "location": "level.dat", + "detail": "Creative Java 26.2 overworld, empty flat generator, Y[-64,319], default plains biomes. Minecraft reconstructs light/heightmaps. Native entities use the explicit property bridge.", + "count": 1 + }, + { + "code": "derived_fields_invalidated", + "severity": "warning", + "action": "approximated", + "location": "own:chunk-1,0", + "detail": "Removed stored light arrays and heightmaps, marked isLightOn=false for Minecraft reconstruction; unknown fields/entities/biomes preserved. No vanilla simulation guarantee.", + "count": 1 + }, + { + "code": "derived_fields_invalidated", + "severity": "warning", + "action": "approximated", + "location": "own:chunk0,0", + "detail": "Removed stored light arrays and heightmaps, marked isLightOn=false for Minecraft reconstruction; unknown fields/entities/biomes preserved. No vanilla simulation guarantee.", + "count": 1 + } + ], + "issue_limit": 1000, + "omitted_issues": 0, + "source_files": 0, + "source_bytes": 0, + "native_entity_bytes": 0, + "profile": "Java 26.2 (DataVersion 4903); blocks editable, other typed NBT preserved on disk; offline writer lock" + }, + "limitations": "Java checks official disk/container/palette/world-metadata codecs, not running server, client renderer, light simulation or EULA acceptance." +} diff --git a/docs/verification/mcp-sdk.json b/docs/verification/mcp-sdk.json new file mode 100644 index 0000000..d7addf8 --- /dev/null +++ b/docs/verification/mcp-sdk.json @@ -0,0 +1,19 @@ +{ + "passed": true, + "server_binary": "/home/emil/Desktop/shacraft-core/target/release/shacraft-server", + "mcp_binary": "/home/emil/Desktop/shacraft-core/target/release/shacraft-mcp", + "sdk": true, + "checks": [ + "SDK initialize, version negotiation, notification and ping", + "17 discoverable tool schemas accepted by SDK", + "4 resources read through SDK", + "Construction prompt and arguments", + "Durable write, read, idempotent retry, conflict content and undo", + "Plan and atomic idempotent commit", + "MCP PNG image content", + "Entity spawn/update/list/delete", + "Persisted world configuration and measured metrics", + "World reset" + ], + "world": "mcp_sdk_1789395818564" +} diff --git a/docs/verification/mvp-checks.txt b/docs/verification/mvp-checks.txt new file mode 100644 index 0000000..d4f934f --- /dev/null +++ b/docs/verification/mvp-checks.txt @@ -0,0 +1,402 @@ + Checking shacraft-compat v0.1.0 (/home/emil/Desktop/shacraft-core/crates/shacraft-compat) + Checking shacraft-server v0.1.0 (/home/emil/Desktop/shacraft-core/crates/shacraft-server) + Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.77s + Compiling shacraft-compat v0.1.0 (/home/emil/Desktop/shacraft-core/crates/shacraft-compat) + Compiling shacraft-server v0.1.0 (/home/emil/Desktop/shacraft-core/crates/shacraft-server) + Finished `test` profile [unoptimized + debuginfo] target(s) in 3.09s + Running unittests src/lib.rs (target/debug/deps/shacraft_compat-cd22d99df205fe27) + +running 8 tests +test anvil::tests::lz4_raw_and_compressed ... ok +test nbt::tests::rejects_bombs ... ok +test schem::tests::varint_validation ... ok +test nbt::tests::all_types_roundtrip ... ok +test anvil::tests::negative_region_zlib_and_external ... ok +test anvil::tests::all_compression_modes_and_external_payloads ... ok +test anvil::tests::section_palette_boundaries ... ok +test anvil::tests::oversized_chunk_writes_external_and_validates_checksum ... ok + +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s + + Running unittests src/main.rs (target/debug/deps/shacraft_compat-bd4306d00d4a6c17) + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Running tests/roundtrip.rs (target/debug/deps/roundtrip-f70ba20f52297682) + +running 9 tests +test malformed_input_is_not_published ... ok +test no_overwrite_and_provenance_hash_guard ... ok +test unsupported_data_version_rejects_exact_before_publication ... ok +test duplicate_entity_uuid_stays_outside_editable_subset ... ok +test sponge_entity_metadata_guard_and_position_roundtrip ... ok +test sponge_import_edits_unknown_states_and_preserves_nbt ... ok +test native_entity_edit_move_create_remove_roundtrip ... ok +test genuine_java_world_import_exact_roundtrip_edit_and_new_chunk ... ok +test native_new_world_export_and_schematic ... ok + +test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s + + Running unittests src/lib.rs (target/debug/deps/shacraft_content-ee19c845f27f8fb2) + +running 11 tests +test shapes::tests::four_quarter_rotations_restore_box ... ok +test shapes::tests::connected_fence_has_two_added_rails ... ok +test shapes::tests::rail_ascent_reaches_next_block ... ok +test packages::tests::changed_resource_rejected ... ok +test packages::tests::bundled_packages_hashes_dependencies_and_privacy ... ok +test packages::tests::paths_sizes_and_versions_are_validated ... ok +test tests::key_collision_states_and_orientation ... ok +test tests::official_entity_dimensions_and_authored_models_present ... ok +test tests::sampler_defaults_and_palette_are_registered ... ok +test tests::every_state_has_valid_shapes_and_explicit_coverage ... ok +test tests::complete_against_independent_official_report_projection ... ok + +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.31s + + Running unittests src/lib.rs (target/debug/deps/shacraft_core-f7257583d500a490) + +running 11 tests +test section::tests::crc32_matches_standard_check_value ... ok +test section::tests::direct_read_rejects_out_of_range_cell - should panic ... ok +test section::tests::packed_indices_match_cross_byte_wire_fixture ... ok +test section::tests::uniform_round_trip_and_little_endian_layout ... ok +test section::tests::invalid_palettes_and_indices_are_rejected ... ok +test section::tests::structurally_invalid_headers_are_rejected_even_with_valid_checksum ... ok +test section::tests::dense_round_trip_and_size_crossover ... ok +test section::tests::truncated_extra_and_corrupted_bytes_are_rejected ... ok +test section::tests::every_storage_mode_checks_registry_bounds ... ok +test section::tests::palette_width_changes_at_powers_of_two ... ok +test section::tests::every_palette_width_round_trips ... ok + +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s + + Running tests/contract.rs (target/debug/deps/contract-b050c7d50e9640d3) + +running 8 tests +test accepted_noop_advances_revision_and_prevents_undo_of_earlier_edit ... ok +test operation_id_collision_rejects_changed_payload_across_restart_and_methods ... ok +test edit_replay_precedes_revision_check_and_survives_reset_and_reopen ... ok +test invalid_batch_never_partially_writes_or_advances_revision ... ok +test reset_is_monotonic_idempotent_durable_and_an_undo_barrier ... ok +test undo_restores_inherited_content_and_replays_without_mutating_newer_state ... ok +test strict_undo_rejects_later_nonoverlapping_edits_and_aba_cycles ... ok +test snapshots_pin_effective_source_contents_and_air_overrides ... ok + +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s + + Running tests/section_pages.rs (target/debug/deps/section_pages-92b3be09a3e83895) + +running 1 test +test section_pages_are_sorted_bounded_and_include_inherited_air_overrides ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s + + Running tests/storage.rs (target/debug/deps/storage-be95f5d467d8c630) + +running 10 tests +test lock_is_exclusive_and_released_on_drop ... ok +test registry_is_canonical_durable_and_rejects_malformed_identifiers ... ok +test corrupted_blob_is_reported_instead_of_air ... ok +test revision_overflow_rejects_mutation_but_keeps_original_replay ... ok +test sqlite_failure_mid_edit_rolls_back_blobs_history_and_revision ... ok +test explicit_gc_preserves_snapshots_history_and_cache_correctness ... ok +test oversized_unreachable_blob_is_rejected_before_reinterning ... ok +test compact_cache_evicts_distinct_blobs_and_shares_identical_sections ... ok +test coordinate_boundaries_and_inclusive_read_limits ... ok +test uniform_section_remains_twenty_bytes_in_resident_cache ... ok + +test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s + + Running unittests src/main.rs (target/debug/deps/shacraft_mcp-8af48a29a5cc1f7b) + +running 8 tests +test tests::build_shapes_validate_without_allowing_invented_parameters ... ok +test tests::supported_version_is_preserved ... ok +test tests::malformed_ids_and_requests_do_not_execute ... ok +test tests::notifications_never_generate_responses ... ok +test tests::invalid_tool_arguments_are_mcp_content_errors ... ok +test tests::unavailable_token_is_a_tool_error_not_transport_error ... ok +test tests::lifecycle_negotiates_and_rejects_before_initialization ... ok +test tests::bounded_reader_recovers_after_oversized_line ... ok + +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s + + Running unittests src/main.rs (target/debug/deps/shacraft_server-33e07bc1da9f7f4e) + +running 18 tests +test game::tests::legacy_world_configuration_gets_safe_spleef_defaults ... ok +test packages::tests::changed_definition_or_module_fails_hash_verification_before_loading ... ok +test game::tests::outbox_has_byte_and_message_limits ... ok +test packages::tests::sandbox_executes_and_bounds_fuel_memory_and_results ... ok +test packages::tests::verified_custom_package_registers_content_and_binds_real_wasm ... ok +test packages::tests::duplicate_vanilla_and_invalid_geometry_definitions_are_rejected ... ok +test game::tests::trampoline_executes_wasm_despite_small_contact_gap ... ok +test game::tests::official_collision_shapes_drive_world_physics ... ok +test game::tests::arena_configuration_validates_before_mutation ... ok +test game::tests::authoritative_actions_reject_forged_targets_and_sync_real_edits ... ok +test game::tests::material_payloads_are_bounded_and_runtime_id_lookup_works_without_registry_dump ... ok +test game::tests::snapshots_carry_revision_and_slow_consumers_are_disconnected ... ok +test game::tests::gallery_contains_every_default_state_over_a_bounded_floor ... ok +test game::tests::eliminated_spleef_players_cannot_reenter_and_late_joins_spectate ... ok +test game::tests::entities_are_durable_and_failed_commits_do_not_publish_changes ... ok +test game::tests::restart_recovers_arena_configuration_and_cleans_interrupted_round ... ok +test game::tests::configured_spleef_rules_control_full_round_and_survive_restart ... ok +test game::tests::interrupted_creation_of_managed_world_can_finish_its_seed ... ok + +test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.29s + + Running unittests src/main.rs (target/debug/deps/shacraft_tools-1836b285f941c1f2) + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests shacraft_compat + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests shacraft_content + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests shacraft_core + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Compiling shacraft-server v0.1.0 (/home/emil/Desktop/shacraft-core/crates/shacraft-server) + Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.71s +{ + "passed": true, + "checks": [ + "bounded resident cache with verified eviction while reading 80 sections", + "second writer rejected while owner is running", + "80 acknowledged edits and registry survive SIGKILL without flush", + "idempotent replay after SIGKILL precedes current revision check", + "invalid batch leaves both blocks and revision unchanged", + "interrupted 32768-cell transaction is atomic (recovered revision 0)", + "uncertain interrupted request can safely be retried", + "invalid request does not terminate the local test session", + "4096-cell uniform section occupies 20 encoded payload bytes in resident cache" + ], + "final_metrics": { + "process": { + "peak_rss_bytes": 8114176, + "rss_bytes": 8114176, + "source": "/proc/self/status (null when unavailable)" + }, + "storage": { + "cache_capacity_sections": 2, + "cache_entries": 1, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 1, + "cache_payload_bytes": 20, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 0, + "coordinate_limit": 30000000, + "database_bytes": 647168, + "history_change_count": 36944, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 18, + "last_mutation_duration_us": 0, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 82, + "os_rss_bytes": null, + "overlay_section_count": 97, + "registry_count": 2, + "registry_limit_states": 262144, + "registry_text_bytes": 32, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 0, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 16384, + "wal_bytes": 0, + "world_count": 3, + "world_limit": 10000 + } + }, + "limits": [ + "process crash tested; power loss and faulty hardware are not simulated", + "storage-only workload; no Paper or gameplay performance comparison" + ] +} +TAP version 13 +# Subtest: camera axes and world projection match the server coordinate convention +ok 1 - camera axes and world projection match the server coordinate convention + --- + duration_ms: 2.623771 + type: 'test' + ... +# Subtest: DDA resolves negative world coordinates and nearest entry face +ok 2 - DDA resolves negative world coordinates and nearest entry face + --- + duration_ms: 4.264518 + type: 'test' + ... +# Subtest: ray selection respects slab geometry and reach instead of selecting empty half +ok 3 - ray selection respects slab geometry and reach instead of selecting empty half + --- + duration_ms: 8.035945 + type: 'test' + ... +# Subtest: axis aligned ray slabs reject parallel paths outside a box +ok 4 - axis aligned ray slabs reject parallel paths outside a box + --- + duration_ms: 0.271763 + type: 'test' + ... +# Subtest: selection intersects a fence extension owned by the cell below +ok 5 - selection intersects a fence extension owned by the cell below + --- + duration_ms: 1.042738 + type: 'test' + ... +# Subtest: package geometry is selectable across its documented three-block extent +ok 6 - package geometry is selectable across its documented three-block extent + --- + duration_ms: 1.65838 + type: 'test' + ... +1..6 +# tests 6 +# suites 0 +# pass 6 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 134.144281 +{ + "passed": true, + "checks": [ + "Manifest resource SHA-256/size, admin token required, server WASM not public", + "Incompatible manifest rejected", + "Two clients receive shared snapshot and presence", + "Authoritative movement and collision; client position spoof ignored", + "Forged out-of-reach block break rejected", + "Reachable break/place, server revision ordering and broadcast", + "Late join receives current geometry and revision", + "Pinned template and independent clone isolation", + "Scoped game chat delivered to peer", + "Persisted entity events reach both clients", + "Reconnect restores authoritative world snapshot", + "Full two-player Spleef countdown, elimination, winner and automatic floor reset", + "Disconnect removes players and active worlds", + "Real SIGKILL/restart preserves committed blocks, entity properties and arena configuration" + ], + "metrics": { + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 1, + "entity_revision": 13, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 3.362786, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 61239296, + "slow_clients_disconnected": 1, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 8, + "cache_evictions": 0, + "cache_hits": 9, + "cache_misses": 8, + "cache_payload_bytes": 4304, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 0, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 22055, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 87, + "last_mutation_duration_us": 0, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 11, + "os_rss_bytes": null, + "overlay_section_count": 93, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 16384, + "wal_bytes": 1384352, + "world_count": 9, + "world_limit": 10000 + }, + "tick": 1, + "tick_ms": 3.362786, + "uptime_seconds": 0, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 9 + }, + "binary": "/home/emil/Desktop/shacraft-core/target/debug/shacraft-server", + "report_file": "/home/emil/Desktop/shacraft-core/artifacts/server-e2e-debug.json", + "data": "/tmp/shacraft-server-test-nBiKWZ" +} diff --git a/docs/verification/server-benchmark.json b/docs/verification/server-benchmark.json new file mode 100644 index 0000000..1db2484 --- /dev/null +++ b/docs/verification/server-benchmark.json @@ -0,0 +1,41161 @@ +{ + "passed": true, + "profile": "release", + "binary": "/home/emil/Desktop/shacraft-core/target/release/shacraft-server", + "budgets": { + "ten_client_rss_bytes": 268435456, + "p95_tick_ms": 50 + }, + "budget_results": { + "rss_passed": true, + "tick_passed": true + }, + "cache_bounded": true, + "workload": { + "fork_counts": [ + 1, + 10, + 100 + ], + "players": 10, + "input_hz": 20, + "sampling_interval_ms": 100, + "active_sample_ms": 15000, + "template": "lobby", + "scope": "local seeded map; storage and authoritative movement; not full vanilla mechanics" + }, + "limitations": [ + "No comparison with Minecraft or a modded server", + "Tick metrics measure server step work, not end-to-end latency", + "Process RSS excludes browser clients and operating-system disk cache", + "Cache entries remain bounded after disconnect; zero active worlds does not imply zero retained cache" + ], + "phases": [ + { + "phase": "idle_1_template_forks", + "samples": 29, + "rss_bytes": { + "p50": 52707328, + "p95": 52723712, + "max": 52723712 + }, + "tick_ms": { + "p50": 0.002024, + "p95": 0.002394, + "max": 0.002755 + }, + "process_high_water_bytes": 52723712, + "players": 0, + "active_worlds": 0, + "world_count": 6, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "slow_clients_disconnected": 0, + "queued_client_bytes": 0 + }, + { + "phase": "idle_10_template_forks", + "samples": 29, + "rss_bytes": { + "p50": 52789248, + "p95": 52793344, + "max": 52793344 + }, + "tick_ms": { + "p50": 0.001863, + "p95": 0.002424, + "max": 0.002925 + }, + "process_high_water_bytes": 52793344, + "players": 0, + "active_worlds": 0, + "world_count": 15, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "slow_clients_disconnected": 0, + "queued_client_bytes": 0 + }, + { + "phase": "idle_100_template_forks", + "samples": 29, + "rss_bytes": { + "p50": 52953088, + "p95": 52953088, + "max": 52953088 + }, + "tick_ms": { + "p50": 0.0019240000000000001, + "p95": 0.002365, + "max": 0.002835 + }, + "process_high_water_bytes": 52953088, + "players": 0, + "active_worlds": 0, + "world_count": 105, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "slow_clients_disconnected": 0, + "queued_client_bytes": 0 + }, + { + "phase": "10_moving_clients_shared_world", + "samples": 142, + "rss_bytes": { + "p50": 59494400, + "p95": 59691008, + "max": 59768832 + }, + "tick_ms": { + "p50": 2.205753, + "p95": 9.543319, + "max": 40.179120999999995 + }, + "process_high_water_bytes": 59768832, + "players": 10, + "active_worlds": 1, + "world_count": 105, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 7102, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "slow_clients_disconnected": 0, + "queued_client_bytes": 0 + }, + { + "phase": "10_moving_clients_separate_worlds", + "samples": 142, + "rss_bytes": { + "p50": 62513152, + "p95": 62533632, + "max": 62550016 + }, + "tick_ms": { + "p50": 2.0932899999999997, + "p95": 7.325514, + "max": 19.305461 + }, + "process_high_water_bytes": 62550016, + "players": 10, + "active_worlds": 10, + "world_count": 105, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14344, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "slow_clients_disconnected": 0, + "queued_client_bytes": 0 + }, + { + "phase": "after_disconnect_idle", + "samples": 29, + "rss_bytes": { + "p50": 62550016, + "p95": 62550016, + "max": 62550016 + }, + "tick_ms": { + "p50": 0.002004, + "p95": 0.0025450000000000004, + "max": 0.0026249999999999997 + }, + "process_high_water_bytes": 62550016, + "players": 0, + "active_worlds": 0, + "world_count": 105, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "slow_clients_disconnected": 0, + "queued_client_bytes": 0 + } + ], + "samples": [ + { + "phase": "idle_1_template_forks", + "time": 1789396049606, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52625408, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 22, + "tick_ms": 0.001804, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52637696 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396049714, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52637696, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 24, + "tick_ms": 0.0016929999999999998, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52658176 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396049824, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52658176, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 26, + "tick_ms": 0.002024, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52666368 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396049931, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52666368, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 28, + "tick_ms": 0.0021739999999999997, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52674560 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050037, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52674560, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 30, + "tick_ms": 0.002254, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52678656 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050142, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52678656, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 32, + "tick_ms": 0.0016330000000000001, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52682752 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050248, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52682752, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 35, + "tick_ms": 0.0023350000000000003, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52686848 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050355, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52686848, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 37, + "tick_ms": 0.002064, + "uptime_seconds": 1, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52690944 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050463, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52690944, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 39, + "tick_ms": 0.002103, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52695040 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050569, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52695040, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 41, + "tick_ms": 0.001993, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52699136 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050676, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52699136, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 43, + "tick_ms": 0.0016530000000000002, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52703232 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050782, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52703232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 45, + "tick_ms": 0.002164, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52703232 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050888, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52703232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 47, + "tick_ms": 0.002164, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52707328 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396050993, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52707328, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 49, + "tick_ms": 0.001793, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52707328 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051099, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52707328, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 52, + "tick_ms": 0.002184, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52711424 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051205, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52715520, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 54, + "tick_ms": 0.002394, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52715520 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051311, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52715520, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 56, + "tick_ms": 0.002614, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52715520 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051417, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52715520, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 58, + "tick_ms": 0.001953, + "uptime_seconds": 2, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52719616 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051523, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52719616, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 60, + "tick_ms": 0.001613, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52719616 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051629, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52719616, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 62, + "tick_ms": 0.001673, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52719616 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051734, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52719616, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 64, + "tick_ms": 0.0016929999999999998, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051839, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 66, + "tick_ms": 0.002144, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396051944, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 68, + "tick_ms": 0.001683, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396052048, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 71, + "tick_ms": 0.001562, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396052156, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 73, + "tick_ms": 0.002144, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396052260, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 75, + "tick_ms": 0.0016229999999999999, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396052366, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 77, + "tick_ms": 0.001603, + "uptime_seconds": 3, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396052471, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 79, + "tick_ms": 0.002194, + "uptime_seconds": 4, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_1_template_forks", + "time": 1789396052576, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 2, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52723712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32375, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 295, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 6, + "world_limit": 10000 + }, + "tick": 81, + "tick_ms": 0.002755, + "uptime_seconds": 4, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 6, + "process_high_water_bytes": 52723712 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396053705, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52752384, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 104, + "tick_ms": 0.0017430000000000002, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52756480 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396053811, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52756480, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 106, + "tick_ms": 0.0021739999999999997, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52756480 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396053916, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52760576, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 108, + "tick_ms": 0.001503, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52760576 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054023, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52764672, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 110, + "tick_ms": 0.001583, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52772864 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054128, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52772864, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 112, + "tick_ms": 0.001523, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52776960 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054235, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52776960, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 114, + "tick_ms": 0.001502, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52781056 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054340, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52781056, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 116, + "tick_ms": 0.001803, + "uptime_seconds": 5, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52781056 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054444, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52781056, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 118, + "tick_ms": 0.0023439999999999997, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52781056 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054550, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52781056, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 121, + "tick_ms": 0.002565, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52781056 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054656, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52781056, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 123, + "tick_ms": 0.0018729999999999999, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52785152 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054765, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52785152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 125, + "tick_ms": 0.001854, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52785152 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054872, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52785152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 127, + "tick_ms": 0.001893, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52785152 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396054981, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52785152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 129, + "tick_ms": 0.002424, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52789248 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055086, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52789248, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 131, + "tick_ms": 0.001993, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52789248 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055191, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52789248, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 133, + "tick_ms": 0.002204, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52789248 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055296, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52789248, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 136, + "tick_ms": 0.001663, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055403, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 138, + "tick_ms": 0.001553, + "uptime_seconds": 6, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055510, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 140, + "tick_ms": 0.0019939999999999997, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055619, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 142, + "tick_ms": 0.0019939999999999997, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055726, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 144, + "tick_ms": 0.001593, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055832, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 146, + "tick_ms": 0.0019039999999999999, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396055939, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 148, + "tick_ms": 0.002925, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056043, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 150, + "tick_ms": 0.001542, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056147, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 153, + "tick_ms": 0.001863, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056254, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 155, + "tick_ms": 0.002164, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056359, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 157, + "tick_ms": 0.001483, + "uptime_seconds": 7, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056464, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 159, + "tick_ms": 0.001863, + "uptime_seconds": 8, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056570, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 161, + "tick_ms": 0.0018440000000000002, + "uptime_seconds": 8, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_10_template_forks", + "time": 1789396056676, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 11, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52793344, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32384, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 235, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 15, + "world_limit": 10000 + }, + "tick": 163, + "tick_ms": 0.001803, + "uptime_seconds": 8, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 15, + "process_high_water_bytes": 52793344 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396057917, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 188, + "tick_ms": 0.0016229999999999999, + "uptime_seconds": 9, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058022, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 190, + "tick_ms": 0.001533, + "uptime_seconds": 9, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058130, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 192, + "tick_ms": 0.002264, + "uptime_seconds": 9, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058235, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 194, + "tick_ms": 0.0019240000000000001, + "uptime_seconds": 9, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058343, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 196, + "tick_ms": 0.001753, + "uptime_seconds": 9, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058447, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 199, + "tick_ms": 0.0019240000000000001, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058554, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 201, + "tick_ms": 0.001673, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058658, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 203, + "tick_ms": 0.001562, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058763, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 205, + "tick_ms": 0.002835, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058869, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 207, + "tick_ms": 0.002245, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396058976, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 209, + "tick_ms": 0.001964, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059082, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 211, + "tick_ms": 0.002835, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059188, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 213, + "tick_ms": 0.0013930000000000001, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059294, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 215, + "tick_ms": 0.002365, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059399, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 218, + "tick_ms": 0.001563, + "uptime_seconds": 10, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059504, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 220, + "tick_ms": 0.0016229999999999999, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059609, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 222, + "tick_ms": 0.001613, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059714, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 224, + "tick_ms": 0.002104, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059819, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 226, + "tick_ms": 0.001894, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396059925, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 228, + "tick_ms": 0.001794, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060029, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 230, + "tick_ms": 0.0020540000000000003, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060136, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 232, + "tick_ms": 0.002104, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060241, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 234, + "tick_ms": 0.0020940000000000004, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060346, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 236, + "tick_ms": 0.001863, + "uptime_seconds": 11, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060452, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 239, + "tick_ms": 0.0019429999999999998, + "uptime_seconds": 12, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060557, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 241, + "tick_ms": 0.002084, + "uptime_seconds": 12, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060661, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 243, + "tick_ms": 0.002184, + "uptime_seconds": 12, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060768, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 245, + "tick_ms": 0.001823, + "uptime_seconds": 12, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "idle_100_template_forks", + "time": 1789396060875, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.009818, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 52953088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 0, + "cache_evictions": 0, + "cache_hits": 0, + "cache_misses": 0, + "cache_payload_bytes": 0, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 247, + "tick_ms": 0.002365, + "uptime_seconds": 12, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 52953088 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063139, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58560512, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1016, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 292, + "tick_ms": 40.179120999999995, + "uptime_seconds": 14, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58560512 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063251, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58560512, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1068, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 294, + "tick_ms": 1.684018, + "uptime_seconds": 14, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58560512 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063358, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58568704, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1128, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 297, + "tick_ms": 2.3516280000000003, + "uptime_seconds": 14, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58572800 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063466, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58572800, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1170, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 299, + "tick_ms": 2.237232, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58580992 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063572, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1214, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 301, + "tick_ms": 2.228124, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063678, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1250, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 303, + "tick_ms": 1.793805, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063785, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1290, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 305, + "tick_ms": 1.761524, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063891, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1334, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 307, + "tick_ms": 2.936692, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396063995, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1374, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 309, + "tick_ms": 2.512631, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064099, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1434, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 312, + "tick_ms": 2.144327, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064205, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1472, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 314, + "tick_ms": 1.5692519999999999, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064313, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58589184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1504, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 316, + "tick_ms": 1.4513079999999998, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58589184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064420, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1548, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 318, + "tick_ms": 5.3381929999999995, + "uptime_seconds": 15, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064526, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1580, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 320, + "tick_ms": 1.873907, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064632, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1612, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 322, + "tick_ms": 1.932347, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064739, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1644, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 324, + "tick_ms": 3.2074529999999997, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064845, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1678, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 326, + "tick_ms": 2.086327, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396064949, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1729, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 329, + "tick_ms": 1.5110810000000001, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065054, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1767, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 331, + "tick_ms": 2.205753, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065166, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58597376, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1824, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 333, + "tick_ms": 17.565357, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58597376 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065271, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1895, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 335, + "tick_ms": 11.693978000000001, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065376, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1950, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 337, + "tick_ms": 7.692106, + "uptime_seconds": 16, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065483, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 1984, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 339, + "tick_ms": 2.096336, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065589, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2016, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 341, + "tick_ms": 1.872343, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065694, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2050, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 343, + "tick_ms": 2.556604, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065798, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2100, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 346, + "tick_ms": 1.49935, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396065903, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2131, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 348, + "tick_ms": 1.383441, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066009, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2160, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 350, + "tick_ms": 3.541182, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066114, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2194, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 352, + "tick_ms": 2.29975, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066218, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2238, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 354, + "tick_ms": 1.7858399999999999, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066325, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2272, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 356, + "tick_ms": 3.648935, + "uptime_seconds": 17, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066429, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2306, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 358, + "tick_ms": 2.000996, + "uptime_seconds": 18, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066536, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58658816, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2353, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 360, + "tick_ms": 1.643642, + "uptime_seconds": 18, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58658816 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066640, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58855424, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2393, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 362, + "tick_ms": 2.167771, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58855424 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066747, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58867712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2431, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 364, + "tick_ms": 4.516063, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58867712 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066853, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58867712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2497, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 367, + "tick_ms": 2.2617179999999997, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58867712 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396066958, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58867712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2533, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 369, + "tick_ms": 2.2729299999999997, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58867712 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067064, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58867712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2569, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 371, + "tick_ms": 2.4196959999999996, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58867712 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067170, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 58867712, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2607, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 373, + "tick_ms": 1.672406, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 58867712 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067275, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59002880, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2673, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 375, + "tick_ms": 5.182138999999999, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59002880 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067382, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59002880, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2714, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 377, + "tick_ms": 1.9125489999999998, + "uptime_seconds": 18, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59002880 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067487, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59002880, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2754, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 379, + "tick_ms": 2.05098, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59002880 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067593, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59002880, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2806, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 381, + "tick_ms": 3.237811, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59002880 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067699, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59002880, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2866, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 384, + "tick_ms": 1.864448, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59002880 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067805, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2926, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 386, + "tick_ms": 7.727943, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396067910, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 2964, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 388, + "tick_ms": 1.937406, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068015, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3002, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 390, + "tick_ms": 2.285753, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068120, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3040, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 392, + "tick_ms": 2.75581, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068225, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3076, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 394, + "tick_ms": 1.887582, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068333, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3120, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 396, + "tick_ms": 2.2985879999999996, + "uptime_seconds": 19, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068439, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59064320, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3164, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 398, + "tick_ms": 2.645051, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59064320 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068546, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59080704, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3210, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 400, + "tick_ms": 7.712394, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59084800 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068652, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59088896, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3258, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 403, + "tick_ms": 1.5902209999999999, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59092992 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068757, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59092992, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3290, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 405, + "tick_ms": 1.408909, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59092992 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068862, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59092992, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3325, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 407, + "tick_ms": 1.477137, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59097088 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396068968, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59097088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3361, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 409, + "tick_ms": 3.2523880000000003, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59097088 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069074, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59097088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3399, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 411, + "tick_ms": 2.007629, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59097088 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069183, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59097088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3437, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 413, + "tick_ms": 4.077164000000001, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59097088 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069289, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59097088, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3475, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 415, + "tick_ms": 1.824423, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59097088 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069394, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59101184, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3513, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 417, + "tick_ms": 3.393434, + "uptime_seconds": 20, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59101184 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069514, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59203584, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3598, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 420, + "tick_ms": 10.956976000000001, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59203584 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069620, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59297792, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3664, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 422, + "tick_ms": 1.750323, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59297792 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069727, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59297792, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3702, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 424, + "tick_ms": 1.638151, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59297792 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069835, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59297792, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3740, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 426, + "tick_ms": 4.09654, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59297792 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396069941, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59461632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3794, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 428, + "tick_ms": 1.526861, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59461632 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070049, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59461632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3832, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 430, + "tick_ms": 1.926415, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59461632 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070155, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59461632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3886, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 433, + "tick_ms": 3.585185, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59461632 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070262, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59461632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3920, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 435, + "tick_ms": 2.273921, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59461632 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070367, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59461632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3948, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 437, + "tick_ms": 1.86499, + "uptime_seconds": 21, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59461632 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070473, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59461632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 3976, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 439, + "tick_ms": 2.139467, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59461632 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070578, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4022, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 441, + "tick_ms": 6.58673, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070683, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4058, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 443, + "tick_ms": 2.572074, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070789, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4104, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 445, + "tick_ms": 2.194741, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396070894, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4146, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 447, + "tick_ms": 1.83348, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071002, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4206, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 450, + "tick_ms": 4.343416, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071107, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4246, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 452, + "tick_ms": 2.0621720000000003, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071212, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4298, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 454, + "tick_ms": 1.830744, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071317, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4348, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 456, + "tick_ms": 2.291174, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071421, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4390, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 458, + "tick_ms": 1.78091, + "uptime_seconds": 22, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071526, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4432, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 460, + "tick_ms": 3.834266, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071635, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59494400, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4507, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 462, + "tick_ms": 9.543319, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59494400 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071743, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4558, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 464, + "tick_ms": 4.5620080000000005, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071854, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4637, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 467, + "tick_ms": 5.844028000000001, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396071960, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4679, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 469, + "tick_ms": 1.7481090000000001, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072066, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4717, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 471, + "tick_ms": 2.149076, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072170, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4764, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 473, + "tick_ms": 2.2034979999999997, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072275, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4808, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 475, + "tick_ms": 2.127856, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072381, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4852, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 477, + "tick_ms": 2.006878, + "uptime_seconds": 23, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072487, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4896, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 479, + "tick_ms": 2.083401, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072592, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4936, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 481, + "tick_ms": 1.491745, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072699, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 4990, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 484, + "tick_ms": 2.165026, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072803, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5042, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 486, + "tick_ms": 6.691247, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396072908, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5082, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 488, + "tick_ms": 2.3460769999999997, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073015, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5122, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 490, + "tick_ms": 1.6586999999999998, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073120, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5160, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 492, + "tick_ms": 2.165867, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073226, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5196, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 494, + "tick_ms": 2.6420850000000002, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073330, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5245, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 496, + "tick_ms": 5.996125, + "uptime_seconds": 24, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073435, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5297, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 498, + "tick_ms": 2.60187, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073541, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5335, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 500, + "tick_ms": 2.365795, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073647, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59539456, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 502, + "tick_ms": 6.914408000000001, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59539456 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073752, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5480, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 505, + "tick_ms": 1.977772, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073856, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5514, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 507, + "tick_ms": 2.408235, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396073964, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5548, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 509, + "tick_ms": 3.584905, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074071, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5582, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 511, + "tick_ms": 3.528117, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074178, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5616, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 513, + "tick_ms": 4.731007, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074284, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5650, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 515, + "tick_ms": 3.594773, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074390, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5679, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 517, + "tick_ms": 3.3115699999999997, + "uptime_seconds": 25, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074495, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5707, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 519, + "tick_ms": 3.382343, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074600, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5755, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 522, + "tick_ms": 1.407967, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074706, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5787, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 524, + "tick_ms": 1.8612730000000002, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074812, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5819, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 526, + "tick_ms": 1.8107769999999999, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396074917, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5864, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 528, + "tick_ms": 3.188457, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075023, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5900, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 530, + "tick_ms": 1.9805270000000001, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075129, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5936, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 532, + "tick_ms": 1.806138, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075235, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 5972, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 534, + "tick_ms": 2.113227, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075341, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6007, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 536, + "tick_ms": 1.496654, + "uptime_seconds": 26, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075448, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6058, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 539, + "tick_ms": 1.969477, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075554, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6092, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 541, + "tick_ms": 4.399482, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075661, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59654144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6138, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 543, + "tick_ms": 10.271383, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59654144 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075768, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6188, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 545, + "tick_ms": 13.33291, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075873, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6220, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 547, + "tick_ms": 4.463873, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396075979, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6268, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 549, + "tick_ms": 11.025376, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076084, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6304, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 551, + "tick_ms": 5.202788, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076190, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6349, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 553, + "tick_ms": 2.348081, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076294, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6404, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 555, + "tick_ms": 9.084944, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076400, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6455, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 558, + "tick_ms": 1.478089, + "uptime_seconds": 27, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076504, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6489, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 560, + "tick_ms": 1.923881, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076609, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6522, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 562, + "tick_ms": 1.862685, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076713, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6558, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 564, + "tick_ms": 1.549804, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076818, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6598, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 566, + "tick_ms": 1.885698, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396076923, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6656, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 568, + "tick_ms": 5.69161, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077028, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6686, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 570, + "tick_ms": 1.945832, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077133, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6716, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 572, + "tick_ms": 2.01395, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077237, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6746, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 574, + "tick_ms": 1.48912, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077342, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6778, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 576, + "tick_ms": 1.770591, + "uptime_seconds": 28, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077453, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6830, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 579, + "tick_ms": 5.188732, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077558, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6866, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 581, + "tick_ms": 4.172614, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077665, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6902, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 583, + "tick_ms": 2.2159720000000003, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077772, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6938, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 585, + "tick_ms": 4.046586, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077877, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 6974, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 587, + "tick_ms": 1.690049, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396077982, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59691008, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 7038, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 589, + "tick_ms": 11.492156999999999, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59691008 + }, + { + "phase": "10_moving_clients_shared_world", + "time": 1789396078087, + "active_worlds": 1, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 59768832, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 7102, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 591, + "tick_ms": 1.933739, + "uptime_seconds": 29, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 59768832 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080277, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62013440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8106, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 635, + "tick_ms": 6.692489, + "uptime_seconds": 31, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62013440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080381, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62017536, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8203, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 637, + "tick_ms": 2.173322, + "uptime_seconds": 31, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62017536 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080486, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62017536, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8243, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 639, + "tick_ms": 1.390274, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62017536 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080592, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62017536, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8283, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 641, + "tick_ms": 1.6018320000000001, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62017536 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080699, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62017536, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8349, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 644, + "tick_ms": 1.6187639999999999, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62017536 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080806, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62017536, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8385, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 646, + "tick_ms": 4.008966, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62017536 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396080912, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8425, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 648, + "tick_ms": 3.80452, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081017, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8469, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 650, + "tick_ms": 4.009145, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081124, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8509, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 652, + "tick_ms": 3.64055, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081230, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8549, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 654, + "tick_ms": 1.560535, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081337, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8589, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 656, + "tick_ms": 1.812059, + "uptime_seconds": 32, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081444, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8623, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 658, + "tick_ms": 1.497876, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081554, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8683, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 661, + "tick_ms": 7.037049, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081660, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8715, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 663, + "tick_ms": 2.073522, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081765, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8747, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 665, + "tick_ms": 1.333687, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081872, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8779, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 667, + "tick_ms": 1.4305489999999998, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396081979, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8813, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 669, + "tick_ms": 1.69092, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082085, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8847, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 671, + "tick_ms": 1.3660180000000002, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082192, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8883, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 673, + "tick_ms": 2.115802, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082299, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62021632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 8936, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 676, + "tick_ms": 1.8869909999999999, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62021632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082413, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62062592, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9028, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 678, + "tick_ms": 6.372155, + "uptime_seconds": 33, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62062592 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082518, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9083, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 680, + "tick_ms": 7.325514, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082625, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9117, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 682, + "tick_ms": 1.4616779999999998, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082731, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9150, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 684, + "tick_ms": 1.4809249999999998, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082835, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9184, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 686, + "tick_ms": 3.835839, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396082940, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9218, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 688, + "tick_ms": 1.810607, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083045, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9250, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 690, + "tick_ms": 1.4672990000000001, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083149, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9294, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 693, + "tick_ms": 1.543823, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083255, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9328, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 695, + "tick_ms": 1.496885, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083361, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9372, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 697, + "tick_ms": 1.93397, + "uptime_seconds": 34, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083470, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9406, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 699, + "tick_ms": 1.797803, + "uptime_seconds": 35, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083574, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9440, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 701, + "tick_ms": 2.0932899999999997, + "uptime_seconds": 35, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083680, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9487, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 703, + "tick_ms": 1.6804109999999999, + "uptime_seconds": 35, + "wasm": { + "calls": 2, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083788, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9527, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 705, + "tick_ms": 2.0132890000000003, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083892, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9565, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 707, + "tick_ms": 1.82284, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396083999, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9631, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 710, + "tick_ms": 2.334455, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084104, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9667, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 712, + "tick_ms": 1.709997, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084209, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9703, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 714, + "tick_ms": 1.3672, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084314, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62066688, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9741, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 716, + "tick_ms": 4.081863, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62066688 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084418, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9807, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 718, + "tick_ms": 9.892498, + "uptime_seconds": 35, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084524, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9848, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 720, + "tick_ms": 1.837027, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084628, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9888, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 722, + "tick_ms": 1.868656, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084733, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9940, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 724, + "tick_ms": 3.9867130000000004, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084837, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 9980, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 726, + "tick_ms": 1.445408, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396084944, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10020, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 728, + "tick_ms": 2.090315, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085050, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10098, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 731, + "tick_ms": 1.742689, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085156, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10136, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 733, + "tick_ms": 1.782153, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085263, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10174, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 735, + "tick_ms": 3.78942, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62087168 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085369, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62087168, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10210, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 737, + "tick_ms": 3.843774, + "uptime_seconds": 36, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085474, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10254, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 739, + "tick_ms": 1.7709519999999999, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085580, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10298, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 741, + "tick_ms": 2.034129, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085684, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10344, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 743, + "tick_ms": 5.624153, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085791, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10376, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 745, + "tick_ms": 3.688731, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396085899, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10408, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 747, + "tick_ms": 3.0246280000000003, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086004, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10459, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 750, + "tick_ms": 1.935573, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086110, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10495, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 752, + "tick_ms": 1.804015, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086217, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10533, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 754, + "tick_ms": 2.031513, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086321, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10571, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 756, + "tick_ms": 2.2644539999999997, + "uptime_seconds": 37, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086426, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62091264, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10609, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 758, + "tick_ms": 1.518645, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62091264 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086532, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62177280, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10675, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 760, + "tick_ms": 2.622318, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62177280 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086638, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62177280, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10713, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 762, + "tick_ms": 1.690901, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62177280 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086745, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62345216, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10807, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 764, + "tick_ms": 19.123327999999997, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62345216 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086853, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62345216, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10864, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 767, + "tick_ms": 4.197171, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62345216 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396086961, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62345216, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10902, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 769, + "tick_ms": 1.7737969999999998, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62345216 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087066, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62431232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10956, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 771, + "tick_ms": 3.9558350000000004, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62431232 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087170, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62431232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 10994, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 773, + "tick_ms": 3.182766, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62431232 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087275, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62431232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11032, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 775, + "tick_ms": 3.207192, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62431232 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087381, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62431232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11067, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 777, + "tick_ms": 1.591383, + "uptime_seconds": 38, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62431232 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087487, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62431232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11099, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 779, + "tick_ms": 3.0779789999999996, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62431232 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087595, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62431232, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11127, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 781, + "tick_ms": 4.140192, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62431232 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087711, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11186, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 784, + "tick_ms": 11.912911, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087818, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11218, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 786, + "tick_ms": 2.055078, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396087923, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11264, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 788, + "tick_ms": 1.6253170000000001, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088030, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11310, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 790, + "tick_ms": 4.979998, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088135, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11353, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 792, + "tick_ms": 1.530127, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088242, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11393, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 794, + "tick_ms": 5.042266, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088354, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11464, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 797, + "tick_ms": 4.94964, + "uptime_seconds": 39, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088458, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62513152, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11514, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 799, + "tick_ms": 1.615188, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62513152 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088563, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11584, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 801, + "tick_ms": 2.26269, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088668, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11626, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 803, + "tick_ms": 1.4209319999999999, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088773, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11701, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 805, + "tick_ms": 6.3514349999999995, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088878, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11743, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 807, + "tick_ms": 1.57956, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396088983, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11794, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 809, + "tick_ms": 4.124744, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089087, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11850, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 811, + "tick_ms": 2.4456550000000004, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089193, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11896, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 813, + "tick_ms": 3.824597, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089302, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11957, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 816, + "tick_ms": 4.481146, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089409, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 11998, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 818, + "tick_ms": 3.807314, + "uptime_seconds": 40, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089514, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12042, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 820, + "tick_ms": 2.208237, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089619, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12086, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 822, + "tick_ms": 4.8558129999999995, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089724, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12130, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 824, + "tick_ms": 1.5845200000000002, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089828, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12172, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 826, + "tick_ms": 1.502005, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396089935, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12208, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 828, + "tick_ms": 1.9969990000000002, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090040, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12245, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 830, + "tick_ms": 1.586804, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090145, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12297, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 832, + "tick_ms": 4.453414, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090252, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12355, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 835, + "tick_ms": 3.950385, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090358, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12392, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 837, + "tick_ms": 3.5756680000000003, + "uptime_seconds": 41, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090463, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12437, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 839, + "tick_ms": 4.536892, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090569, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12473, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 841, + "tick_ms": 1.895667, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090673, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12525, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 843, + "tick_ms": 2.144246, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090779, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62525440, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12584, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 845, + "tick_ms": 19.305461, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62525440 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090886, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12635, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 847, + "tick_ms": 7.287933, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396090992, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12678, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 849, + "tick_ms": 5.335578, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091102, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12741, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 852, + "tick_ms": 4.341022, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091209, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12777, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 854, + "tick_ms": 4.171862999999999, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091314, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12813, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 856, + "tick_ms": 1.3555080000000002, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091419, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12849, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 858, + "tick_ms": 1.781512, + "uptime_seconds": 42, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091524, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12881, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 860, + "tick_ms": 1.614496, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091631, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12912, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 862, + "tick_ms": 1.200104, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091737, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12944, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 864, + "tick_ms": 3.0920650000000003, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091844, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 12976, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 866, + "tick_ms": 3.0880780000000003, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396091951, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13024, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 869, + "tick_ms": 2.858063, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092059, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13056, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 871, + "tick_ms": 2.7995929999999998, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092166, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13101, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 873, + "tick_ms": 1.44673, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092272, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13137, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 875, + "tick_ms": 1.3413410000000001, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092377, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13174, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 877, + "tick_ms": 1.392277, + "uptime_seconds": 43, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092484, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13212, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 879, + "tick_ms": 3.487571, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092592, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13246, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 881, + "tick_ms": 1.347963, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092696, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13279, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 883, + "tick_ms": 2.755039, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092801, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13342, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 886, + "tick_ms": 4.086571, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396092907, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13378, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 888, + "tick_ms": 3.1058209999999997, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093013, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13416, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 890, + "tick_ms": 1.445568, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093118, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13480, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 892, + "tick_ms": 1.650374, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093225, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13516, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 894, + "tick_ms": 1.653791, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093332, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13562, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 896, + "tick_ms": 9.74473, + "uptime_seconds": 44, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093439, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13615, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 898, + "tick_ms": 4.582267, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093545, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13649, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 900, + "tick_ms": 1.288262, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093650, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13700, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 903, + "tick_ms": 1.942876, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093758, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13734, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 905, + "tick_ms": 3.363637, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093863, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13774, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 907, + "tick_ms": 1.452681, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396093967, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13810, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 909, + "tick_ms": 1.612443, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094071, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13851, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 911, + "tick_ms": 1.913761, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094177, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13893, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 913, + "tick_ms": 7.9701900000000006, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094284, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13923, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 915, + "tick_ms": 2.72886, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094388, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13958, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 917, + "tick_ms": 5.009784, + "uptime_seconds": 45, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094493, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 13990, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 919, + "tick_ms": 1.826627, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094600, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14044, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 922, + "tick_ms": 1.4310910000000001, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094706, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14080, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 924, + "tick_ms": 2.241069, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094812, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14116, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 926, + "tick_ms": 2.146391, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396094918, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14180, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 928, + "tick_ms": 4.168076, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396095024, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62533632, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14244, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 930, + "tick_ms": 8.468481, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62533632 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396095130, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14308, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 932, + "tick_ms": 9.162901, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "10_moving_clients_separate_worlds", + "time": 1789396095236, + "active_worlds": 10, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 10, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14344, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 934, + "tick_ms": 1.629585, + "uptime_seconds": 46, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396096850, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 967, + "tick_ms": 0.0014529999999999999, + "uptime_seconds": 48, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396096955, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 969, + "tick_ms": 0.001823, + "uptime_seconds": 48, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097061, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 971, + "tick_ms": 0.002164, + "uptime_seconds": 48, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097167, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 973, + "tick_ms": 0.001804, + "uptime_seconds": 48, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097271, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 975, + "tick_ms": 0.001372, + "uptime_seconds": 48, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097377, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 977, + "tick_ms": 0.001804, + "uptime_seconds": 48, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097484, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 979, + "tick_ms": 0.001603, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097591, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 981, + "tick_ms": 0.002204, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097697, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 983, + "tick_ms": 0.001894, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097804, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 986, + "tick_ms": 0.002494, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396097911, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 988, + "tick_ms": 0.0025450000000000004, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098017, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 990, + "tick_ms": 0.0018440000000000002, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098125, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 992, + "tick_ms": 0.002004, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098240, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 994, + "tick_ms": 0.001663, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098347, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 996, + "tick_ms": 0.002074, + "uptime_seconds": 49, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098452, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 999, + "tick_ms": 0.001833, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098557, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1001, + "tick_ms": 0.0017230000000000001, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098664, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1003, + "tick_ms": 0.002465, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098770, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1005, + "tick_ms": 0.0017829999999999999, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098876, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1007, + "tick_ms": 0.002034, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396098981, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1009, + "tick_ms": 0.002294, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099087, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1011, + "tick_ms": 0.002024, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099195, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1013, + "tick_ms": 0.002495, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099302, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1016, + "tick_ms": 0.0026249999999999997, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099409, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1018, + "tick_ms": 0.002285, + "uptime_seconds": 50, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099516, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1020, + "tick_ms": 0.002475, + "uptime_seconds": 51, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099623, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1022, + "tick_ms": 0.002555, + "uptime_seconds": 51, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099729, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1024, + "tick_ms": 0.0016330000000000001, + "uptime_seconds": 51, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + }, + { + "phase": "after_disconnect_idle", + "time": 1789396099835, + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 0, + "entity_revision": 101, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 40.179120999999995, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 62550016, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 16, + "cache_evictions": 0, + "cache_hits": 14380, + "cache_misses": 16, + "cache_payload_bytes": 23152, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 32474, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 21328, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 74, + "last_mutation_duration_us": 131, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 3, + "os_rss_bytes": null, + "overlay_section_count": 84, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 32768, + "wal_bytes": 1384352, + "world_count": 105, + "world_limit": 10000 + }, + "tick": 1026, + "tick_ms": 0.0016330000000000001, + "uptime_seconds": 51, + "wasm": { + "calls": 4, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 105, + "process_high_water_bytes": 62550016 + } + ] +} diff --git a/docs/verification/server-e2e.json b/docs/verification/server-e2e.json new file mode 100644 index 0000000..64de804 --- /dev/null +++ b/docs/verification/server-e2e.json @@ -0,0 +1,119 @@ +{ + "passed": true, + "checks": [ + "Manifest resource SHA-256/size, admin token required, server WASM not public", + "Incompatible manifest rejected", + "Two clients receive shared snapshot and presence", + "Authoritative movement and collision; client position spoof ignored", + "Forged out-of-reach block break rejected", + "Reachable break/place, server revision ordering and broadcast", + "Late join receives current geometry and revision", + "Pinned template and independent clone isolation", + "Scoped game chat delivered to peer", + "Persisted entity events reach both clients", + "Reconnect restores authoritative world snapshot", + "Full two-player Spleef countdown, elimination, winner and automatic floor reset", + "Disconnect removes players and active worlds", + "Real SIGKILL/restart preserves committed blocks, entity properties and arena configuration" + ], + "metrics": { + "active_worlds": 0, + "catalog": { + "collision": { + "approximate-context": 179, + "authored-exact": 1, + "measured-empty-context": 32187 + }, + "collision_context": "BlockPos.ZERO, air neighbors, empty entity context; contextual classes flagged separately", + "data_version": 4903, + "entities": 158, + "minecraft_blocks": 1196, + "minecraft_states": 32366, + "minecraft_version": "26.2", + "palette": { + "fence": "minecraft:oak_fence[east=false,north=false,south=false,waterlogged=false,west=false]", + "glass": "minecraft:glass", + "grass": "minecraft:grass_block[snowy=false]", + "light": "minecraft:sea_lantern", + "sand": "minecraft:sand", + "slab": "minecraft:oak_slab[type=bottom,waterlogged=false]", + "snow": "minecraft:snow_block", + "stairs": "minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]", + "stone": "minecraft:stone", + "trampoline": "shacraft:trampoline", + "water": "minecraft:water[level=0]", + "wood": "minecraft:oak_planks" + }, + "render": { + "authored-package": 1, + "authored-procedural": 32316, + "intentionally-invisible": 50 + }, + "simulation": "server movement, block editing, authored modules; vanilla AI/redstone/fluid simulation are not implemented", + "total_states": 32367 + }, + "entities": 1, + "entity_revision": 13, + "limits": { + "build_plans": 16, + "bytes_per_client": 8388608, + "command_queue": 64, + "messages_per_client": 16, + "plan_cells": 32768, + "players": 32 + }, + "max_tick_ms": 0.001784, + "plans": 0, + "players": 0, + "queued_client_bytes": 0, + "rss_bytes": 51974144, + "slow_clients_disconnected": 0, + "storage": { + "cache_capacity_sections": 64, + "cache_entries": 8, + "cache_evictions": 0, + "cache_hits": 1, + "cache_misses": 8, + "cache_payload_bytes": 4304, + "cache_representation": "encoded_uniform_palette_dense", + "commits_this_handle": 0, + "coordinate_limit": 30000000, + "database_bytes": 7372800, + "history_change_count": 22055, + "history_retention": "all_operations_until_explicit_future_retention_policy", + "immutable_blob_count": 87, + "last_mutation_duration_us": 0, + "max_edit_cells": 32768, + "max_read_volume": 262144, + "operation_count": 11, + "os_rss_bytes": null, + "overlay_section_count": 93, + "registry_count": 32367, + "registry_limit_states": 262144, + "registry_text_bytes": 2671754, + "schema_version": 1, + "shm_bytes": 32768, + "snapshot_count": 2, + "sqlite_cache_budget_bytes": 4194304, + "sqlite_journal_mode": "wal", + "sqlite_synchronous": "FULL", + "transient_decoded_payload_peak_estimate_bytes": 16384, + "wal_bytes": 1384352, + "world_count": 9, + "world_limit": 10000 + }, + "tick": 1, + "tick_ms": 0.001784, + "uptime_seconds": 0, + "wasm": { + "calls": 0, + "fuel_per_call": 10000, + "imports": 0, + "memory_limit": 65536, + "runtime": "wasmi", + "traps": 0 + }, + "world_count": 9 + }, + "binary": "/home/emil/Desktop/shacraft-core/target/release/shacraft-server" +} diff --git a/packages/base/client/style.json b/packages/base/client/style.json new file mode 100644 index 0000000..c00b3d0 --- /dev/null +++ b/packages/base/client/style.json @@ -0,0 +1,7 @@ +{ + "schema": 1, + "texture": "client/texture.png", + "texture_mode": "repeat-tint", + "pixel_size": 64, + "license": "MIT OR Apache-2.0" +} diff --git a/packages/base/client/texture.png b/packages/base/client/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..451a1803cf0fc1b8e240d056cc855fce3c11d936 GIT binary patch literal 3939 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 J_4&W^`Y&|39+Ch6 literal 0 HcmV?d00001 diff --git a/packages/trampoline/client/style.json b/packages/trampoline/client/style.json new file mode 100644 index 0000000..c47fb36 --- /dev/null +++ b/packages/trampoline/client/style.json @@ -0,0 +1,13 @@ +{ + "schema": 1, + "block": "shacraft:trampoline", + "color": [ + 97, + 205, + 151 + ], + "texture": "client/texture.png", + "effect": "bounce", + "sound": "client/bounce.wav", + "shader": "client/tint.glsl" +} diff --git a/packages/trampoline/client/texture.png b/packages/trampoline/client/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4e96e4e63acc6b38d32ef09fdf3ae3d28b323f GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WoIG6|Ln>}18+`q|L^DakO|0U) z&gy+Tc|4p1T61*77+hC&upMG|zTb4wLZY`Bg-|Rsxb@>`Bg3CW?)co= 3000 && duration <= 120000, + "--sample-ms must be 3000..120000", +); +const h = await harness(opts), + clients = [], + samples = [], + phases = []; +let reportWritten = false; +const percentile = (values, p) => + [...values].sort((a, b) => a - b)[ + Math.min(values.length - 1, Math.floor((values.length - 1) * p)) + ]; +function summary(name, list) { + const rss = list.map((s) => s.rss_bytes).filter(Number.isFinite), + ticks = list.map((s) => s.tick_ms).filter(Number.isFinite); + assert.ok( + rss.length && ticks.length, + "Measured RSS and tick durations are required", + ); + const last = list.at(-1); + return { + phase: name, + samples: list.length, + rss_bytes: { + p50: percentile(rss, 0.5), + p95: percentile(rss, 0.95), + max: Math.max(...rss), + }, + tick_ms: { + p50: percentile(ticks, 0.5), + p95: percentile(ticks, 0.95), + max: Math.max(...ticks), + }, + process_high_water_bytes: last.process_high_water_bytes, + players: last.players, + active_worlds: last.active_worlds, + world_count: last.world_count, + storage: last.storage, + slow_clients_disconnected: last.slow_clients_disconnected, + queued_client_bytes: last.queued_client_bytes, + }; +} +async function sample(name, milliseconds = duration) { + const list = [], + end = Date.now() + milliseconds; + while (Date.now() < end) { + const m = await h.get("/api/metrics"); + const processStatus = await readFile(`/proc/${h.pid}/status`, "utf8"); + const highWater = Number(processStatus.match(/^VmHWM:\s+(\d+)/m)?.[1]) * 1024; + assert.ok(Number.isFinite(highWater), "Linux process high-water RSS required"); + m.process_high_water_bytes = highWater; + const s = { phase: name, time: Date.now(), ...m }; + samples.push(s); + list.push(s); + await delay(100); + } + const result = summary(name, list); + phases.push(result); + return result; +} +let mover; +async function moving(count, distinct) { + const manifest = await h.get("/api/manifest"); + for (let i = 0; i < count; i++) { + const c = new Client(h.url); + clients.push(c); + await c.join( + manifest, + `test_bench_${String(distinct ? i : 0).padStart(3, "0")}`, + `Bench${i}`, + ); + } + const started = Date.now(); + mover = setInterval(() => { + const t = (Date.now() - started) / 1000; + for (let i = 0; i < clients.length; i++) + clients[i].input({ + yaw: (t * 0.75 + (i * Math.PI) / 5) % (Math.PI * 2), + pitch: -0.1, + forward: 1, + strafe: 0, + jump: Math.floor(t) % 5 === 0, + }); + }, 50); + await delay(2000); +} +async function disconnect() { + clearInterval(mover); + await Promise.all(clients.splice(0).map((c) => c.close())); + for (let n = 0; n < 50; n++) { + const m = await h.get("/api/metrics"); + if (m.players === 0) return; + await delay(100); + } + throw Error("Players did not disconnect within 5 seconds"); +} +try { + let created = 0; + for (const count of [1, 10, 100]) { + while (created < count) { + await h.control("world.create", { + world: `test_bench_${String(created).padStart(3, "0")}`, + template: "lobby", + }); + created++; + } + await delay(1000); + const phase = await sample(`idle_${count}_template_forks`, 3000); + assert.equal(phase.players, 0); + assert.equal(phase.active_worlds, 0); + } + await moving(10, false); + await sample("10_moving_clients_shared_world"); + await disconnect(); + await moving(10, true); + await sample("10_moving_clients_separate_worlds"); + await disconnect(); + await delay(1500); + const idle = await sample("after_disconnect_idle", 3000); + assert.equal(idle.players, 0); + assert.equal(idle.active_worlds, 0); + const active = phases.filter((p) => p.phase.includes("moving_clients")); + const budgetResults = { + rss_passed: active.every( + (p) => p.rss_bytes.max <= budgets.ten_client_rss_bytes && p.process_high_water_bytes <= budgets.ten_client_rss_bytes, + ), + tick_passed: active.every((p) => p.tick_ms.p95 <= budgets.p95_tick_ms), + }; + const cacheSamples = samples.map((s) => { + const storage = s.storage; + return { + entries: storage.cache_entries ?? storage.cache?.entries, + capacity: + storage.cache_capacity_sections ?? + storage.cache_capacity ?? + storage.cache_sections ?? + storage.cache?.capacity, + }; + }); + const recognizedCache = cacheSamples.filter( + (s) => Number.isFinite(s.entries) && Number.isFinite(s.capacity), + ); + const cacheBounded = + recognizedCache.length === cacheSamples.length && + recognizedCache.every((s) => s.entries <= s.capacity); + const passed = + budgetResults.rss_passed && budgetResults.tick_passed && cacheBounded; + await h.report({ + passed, + profile: h.binary.includes("/release/") + ? "release" + : "custom binary; verify optimization separately", + binary: h.binary, + budgets, + budget_results: budgetResults, + cache_bounded: cacheBounded, + workload: { + fork_counts: [1, 10, 100], + players: 10, + input_hz: 20, + sampling_interval_ms: 100, + active_sample_ms: duration, + template: "lobby", + scope: + "local seeded map; storage and authoritative movement; not full vanilla mechanics", + }, + limitations: [ + "No comparison with Minecraft or a modded server", + "Tick metrics measure server step work, not end-to-end latency", + "Process RSS excludes browser clients and operating-system disk cache", + "Cache entries remain bounded after disconnect; zero active worlds does not imply zero retained cache", + ], + phases, + samples, + }); + reportWritten = true; + assert.ok( + passed, + "Predetermined benchmark budget or bounded-cache check failed; inspect report", + ); +} catch (error) { + if (!reportWritten) + await h.report({ + passed: false, + budgets, + error: error.stack, + server_logs: h.logs(), + phases, + samples, + }); + throw error; +} finally { + await disconnect().catch(() => {}); + await h.stop(); +} diff --git a/scripts/catalog_assets.py b/scripts/catalog_assets.py new file mode 100644 index 0000000..a5c81bb --- /dev/null +++ b/scripts/catalog_assets.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""Deterministically author original PNG/WAV/WASM package resources using stdlib.""" +from pathlib import Path +import hashlib,json,struct,zlib,math,wave +ROOT=Path(__file__).resolve().parents[1] + +def png(path,w,h,pixel): + def chunk(kind,data):return struct.pack('>I',len(data))+kind+data+struct.pack('>I',zlib.crc32(kind+data)&0xffffffff) + raw=b''.join(b'\x00'+b''.join(bytes(pixel(x,y)) for x in range(w)) for y in range(h)) + path.write_bytes(b'\x89PNG\r\n\x1a\n'+chunk(b'IHDR',struct.pack('>IIBBBBB',w,h,8,2,0,0,0))+chunk(b'IDAT',zlib.compress(raw,9))+chunk(b'IEND',b'')) + +def js(path,obj):path.write_text(json.dumps(obj,indent=2)+'\n') +def manifest(path,ident,deps,caps,resources): + js(path/'manifest.json',{'schema':1,'id':ident,'version':'1.0.0','license':'MIT OR Apache-2.0', + 'dependencies':[{'id':d,'version':'1.0.0'} for d in deps], 'capabilities':caps, + 'resources':[{'path':p,'scope':scope,'role':role,'size':(path/p).stat().st_size,'sha256':hashlib.sha256((path/p).read_bytes()).hexdigest()}for p,scope,role in resources]}) + +base=ROOT/'packages/base'; trampoline=ROOT/'packages/trampoline' +for p in [base/'client',base/'common',trampoline/'client',trampoline/'common',trampoline/'server']:p.mkdir(parents=True,exist_ok=True) +# Pixel noise tile, generated by integer hash; intentionally original, no external art. +def grain(x,y): + v=((x*374761393+y*668265263)^((x+y*17)*1274126177))&0xffffffff + value=211+((v^(v>>13))%29);return[value,value,value] +png(base/'client/texture.png',64,64,grain) +js(base/'client/style.json',{'schema':1,'texture':'client/texture.png','texture_mode':'repeat-tint','pixel_size':64,'license':'MIT OR Apache-2.0'}) +js(base/'common/definitions.json',{'schema':1,'catalog':'builtin-java-26.2','data_version':4903,'coordinates':'+Y up; block models in [0,1], entity models relative feet','vanilla_assets':False}) +# Authored spring mat: dark frame, mint mesh, small crossing weave. +def mat(x,y): + if x<3 or y<3 or x>=29 or y>=29:return[53,78,73] + if x%4==0 or y%4==0:return[123,217,166] + return[75,153,118] +png(trampoline/'client/texture.png',32,32,mat) +js(trampoline/'client/style.json',{'schema':1,'block':'shacraft:trampoline','color':[97,205,151],'texture':'client/texture.png','effect':'bounce','sound':'client/bounce.wav','shader':'client/tint.glsl'}) +(trampoline/'client/tint.glsl').write_text('// Original optional Shacraft material function. GLSL ES 3.00.\nvec3 shacraftBounceTint(vec3 color, float pulse) {\n return color * (1.0 + 0.12 * clamp(pulse, 0.0, 1.0));\n}\n') +with wave.open(str(trampoline/'client/bounce.wav'),'wb') as wav: + rate=22050;n=int(rate*.18);wav.setnchannels(1);wav.setsampwidth(2);wav.setframerate(rate) + wav.writeframes(b''.join(struct.pack(' { + const c = new Client(h.url); + clients.push(c); + return c; +}; +try { + const manifest = await h.get("/api/manifest"); + assert.equal(manifest.protocol, 1); + for (const pack of manifest.packages) + for (const file of pack.files) { + assert.notEqual(file.scope, "server"); + const r = await fetch(h.url + file.url); + assert.equal(r.status, 200); + const bytes = Buffer.from(await r.arrayBuffer()); + assert.equal(bytes.length, file.size); + assert.equal( + createHash("sha256").update(bytes).digest("hex"), + file.sha256, + ); + } + const denied = await fetch(h.url + "/api/control", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ method: "world.list" }), + }); + assert.equal(denied.status, 401); + const secret = await fetch( + h.url + "/packages/shacraft.trampoline/1.0.0/server/trampoline.wasm", + ); + assert.equal(secret.status, 404); + checks.push( + "Manifest resource SHA-256/size, admin token required, server WASM not public", + ); + const bad = createClient(); + await bad.open; + bad.send({ + type: "join", + protocol: 1, + manifest_hash: "incorrect", + world: "lobby", + name: "BadManifest", + }); + assert.match((await bad.next("error")).message, /manifest|package/i); + await bad.close(); + checks.push("Incompatible manifest rejected"); + const catalog = await h.control("catalog.search", { + query: "minecraft:stone", + limit: 64, + }), + stone = catalog.items.find((m) => m.state === "minecraft:stone"); + assert.ok(stone); + await h.control("world.create", { world: "test_e2e_base" }); + const plan = await h.control("build.plan", { + world: "test_e2e_base", + expected_revision: 0, + operations: [ + { type: "box", min: [-8, -1, -8], max: [8, 0, 12], block: stone.id }, + ], + }); + await h.control("build.commit", { + plan_id: plan.plan_id, + operation_id: "test-floor", + }); + for (const world of ["test_e2e_a", "test_e2e_b"]) + await h.control("world.create", { world, template: "test_e2e_base" }); + let a = createClient(); + const b = createClient(); + const wa = await a.join(manifest, "test_e2e_a", "TestAlice"); + await b.join(manifest, "test_e2e_a", "TestBob"); + assert.equal(wa.revision, 0); + assert.ok(wa.blocks.length > 500); + await a.state((p, m) => m.players.length === 2); + checks.push("Two clients receive shared snapshot and presence"); + const initial = (await b.state((p) => p.position[1] < 1.15)).players.find( + (p) => p.id === b.id, + ).position; + b.input({ forward: 1, position: [1000, 1000, 1000] }); + const moved = ( + await b.state((p) => p.position[2] < initial[2] - 0.5) + ).players.find((p) => p.id === b.id).position; + b.input(); + assert.ok(moved.every((v) => Math.abs(v) < 20)); + assert.ok(moved[1] < 2); + checks.push( + "Authoritative movement and collision; client position spoof ignored", + ); + a.send({ type: "break", pos: [1000, 0, 1000] }); + assert.match((await a.next("error")).message, /reach|sight|ray|target/i); + checks.push("Forged out-of-reach block break rejected"); + const p = (await a.state((p) => p.position[1] < 1.15)).players.find( + (p) => p.id === a.id, + ).position; + const materials = new Map(wa.materials.map((m) => [m.id, m])); + const blocks = new Map(wa.blocks.map((b) => [key(b.pos), b.block])); + const hit = raycast( + [p[0], p[1] + 1.62, p[2]], + direction(0.2, -1.3), + blocks, + materials, + ); + assert.ok(hit); + const seq = a.input({ yaw: 0.2, pitch: -1.3 }); + await a.state((_p, m) => m.ack >= seq); + await delay(150); + a.send({ type: "break", pos: hit.pos }); + const removed = await a.next("blocks", (m) => + m.changes.some((c) => key(c.pos) === key(hit.pos) && c.block === 0), + ); + await b.next("blocks", (m) => m.revision === removed.revision); + assert.equal(removed.revision, 1); + await delay(160); + a.send({ type: "place", pos: hit.pos, block: stone.id }); + const restored = await a.next("blocks", (m) => m.revision === 2); + await b.next("blocks", (m) => m.revision === 2); + assert.equal(restored.changes[0].block, stone.id); + checks.push("Reachable break/place, server revision ordering and broadcast"); + const late = createClient(); + const lateSnapshot = await late.join(manifest, "test_e2e_a", "TestLate"); + assert.equal(lateSnapshot.revision, 2); + assert.equal( + lateSnapshot.blocks.find((c) => key(c.pos) === key(hit.pos)).block, + stone.id, + ); + await late.close(); + checks.push("Late join receives current geometry and revision"); + await h.control("world.edit", { + world: "test_e2e_a", + expected_revision: 2, + operation_id: "test-isolation", + changes: [{ pos: [3, 1, 3], block: stone.id }], + }); + await a.next("blocks", (m) => m.revision === 3); + for (const world of ["test_e2e_base", "test_e2e_b"]) { + const r = await h.control("world.read", { + world, + min: [3, 1, 3], + max: [3, 1, 3], + }); + assert.equal(r.blocks.length, 0); + } + checks.push("Pinned template and independent clone isolation"); + a.send({ type: "chat", text: "local integration check" }); + const chat = await b.next( + "chat", + (m) => m.text === "local integration check", + ); + assert.equal(chat.name, "TestAlice"); + checks.push("Scoped game chat delivered to peer"); + const entity = await h.control("entity.spawn", { + world: "test_e2e_a", + kind: "minecraft:pig", + position: [3, 2, 3], + properties: { name: "TestPig" }, + }); + await a.next("entities", (m) => + m.entities.some((e) => e.id === entity.entity.id), + ); + await b.next("entities", (m) => + m.entities.some((e) => e.id === entity.entity.id), + ); + await h.control("entity.delete", { id: entity.entity.id }); + checks.push("Persisted entity events reach both clients"); + await a.close(); + a = createClient(); + const reconnect = await a.join(manifest, "test_e2e_a", "TestAlice"); + assert.equal(reconnect.revision, 3); + assert.ok(reconnect.blocks.some((c) => key(c.pos) === "3,1,3")); + checks.push("Reconnect restores authoritative world snapshot"); + await h.control("world.create", { + world: "test_e2e_arena", + template: "spleef_template", + }); + await delay(1150); + for (const c of [a, b]) { + c.send({ type: "switch_world", world: "test_e2e_arena" }); + await c.next("snapshot", (m) => m.world === "test_e2e_arena"); + } + a.send({ type: "start_match" }); + await a.state((_p, m) => m.match?.phase === "countdown"); + const active = await a.state((_p, m) => m.match?.phase === "active", 7000); + const victim = active.players.find((p) => p.id === a.id), + at = victim.position.map(Math.floor); + const floor = []; + for (let x = at[0] - 1; x <= at[0] + 1; x++) + for (let z = at[2] - 1; z <= at[2] + 1; z++) + floor.push({ pos: [x, 0, z], block: 0 }); + const arena = (await h.control("world.list")).find( + (w) => w.name === "test_e2e_arena", + ); + await h.control("world.edit", { + world: "test_e2e_arena", + expected_revision: arena.revision, + operation_id: "test-eliminate", + changes: floor, + }); + const finished = await b.state( + (_p, m) => m.match?.phase === "finished", + 7000, + ); + assert.equal(finished.match.winner, "TestBob"); + await b.state( + (_p, m) => m.tick > finished.tick && m.match?.phase === "waiting", + 8000, + ); + const reset = await h.control("world.read", { + world: "test_e2e_arena", + min: [at[0], 0, at[2]], + max: [at[0], 0, at[2]], + }); + assert.equal(reset.blocks.length, 1); + checks.push( + "Full two-player Spleef countdown, elimination, winner and automatic floor reset", + ); + for (const c of clients) await c.close(); + let metrics; + for (let n = 0; n < 30; n++) { + metrics = await h.get("/api/metrics"); + if (metrics.players === 0) break; + await delay(100); + } + assert.equal(metrics.players, 0); + assert.equal(metrics.active_worlds, 0); + checks.push("Disconnect removes players and active worlds"); + const durableEdit = await h.control("world.edit", { + world: "test_e2e_a", + expected_revision: 3, + operation_id: "test-durable-edit", + changes: [{ pos: [4, 2, 4], block: stone.id }], + }); + const durableEntity = await h.control("entity.spawn", { + world: "test_e2e_a", + kind: "minecraft:pig", + position: [5, 2, 5], + properties: { name: "DurablePig", marker: "before-sigkill" }, + }); + await h.control("arena.configure", { + world: "test_e2e_a", + mode: "creative", + spawn: [1, 3, 1], + countdown_seconds: 2, + round_seconds: 120, + elimination_y: -5, + }); + const durableData = h.data; + await h.kill("SIGKILL"); + h = await harness({ ...opts, data: durableData }); + const afterCrash = await h.control("world.read", { + world: "test_e2e_a", + min: [4, 2, 4], + max: [4, 2, 4], + }); + assert.equal(afterCrash.revision, durableEdit.revision); + assert.equal(afterCrash.blocks[0]?.block, stone.id); + const persisted = await h.control("entity.list", { world: "test_e2e_a" }); + const pig = persisted.items.find( + (entity) => entity.id === durableEntity.entity.id, + ); + assert.equal(pig?.properties.marker, "before-sigkill"); + // No fields supplied: the server returns and resaves the loaded configuration. + const config = await h.control("arena.configure", { world: "test_e2e_a" }); + assert.equal(config.countdown_seconds, 2); + assert.equal(config.round_seconds, 120); + assert.equal(config.elimination_y, -5); + assert.deepEqual(config.spawn, [1, 3, 1]); + const afterRestart = createClient(); + const restartedWelcome = await afterRestart.join( + await h.get("/api/manifest"), + "test_e2e_a", + "RestartProbe", + ); + assert.deepEqual(restartedWelcome.spawn, [1, 3, 1]); + assert.ok( + restartedWelcome.blocks.some( + (cell) => key(cell.pos) === "4,2,4" && cell.block === stone.id, + ), + ); + await afterRestart.close(); + checks.push( + "Real SIGKILL/restart preserves committed blocks, entity properties and arena configuration", + ); + metrics = await h.get("/api/metrics"); + await h.report({ passed: true, checks, metrics, binary: h.binary }); +} catch (error) { + await h.report({ + passed: false, + checks, + error: error.stack, + server_logs: h.logs(), + client_errors: clients.map((c) => + c.queue.filter((m) => m.type === "error"), + ), + }); + throw error; +} finally { + await Promise.allSettled(clients.map((c) => c.close())); + await h.stop(); +} diff --git a/scripts/compat_fixtures.py b/scripts/compat_fixtures.py new file mode 100644 index 0000000..f470d65 --- /dev/null +++ b/scripts/compat_fixtures.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +"""Generate tiny original Sponge fixtures using independent nbtlib2.0.4. + +Run with artifacts/compat-venv/bin/python after installing nbtlib==2.0.4. +The fixture contains no game assets or third-party map content. +""" +from pathlib import Path +import gzip +import io +import nbtlib as n + +ROOT = Path(__file__).resolve().parents[1] +out = ROOT / "crates/shacraft-compat/fixtures" +out.mkdir(parents=True, exist_ok=True) +metadata = n.Compound({ + "Name": n.String("Шакрафт тест"), "Byte": n.Byte(-128), + "Short": n.Short(-32768), "Long": n.Long(-9223372036854775808), + "Float": n.Float(1.25), "Double": n.Double(-2.5), + "ByteArray": n.ByteArray([-1, 0, 127]), + "IntArray": n.IntArray([-2147483648, 2147483647]), + "LongArray": n.LongArray([-9223372036854775808, 9223372036854775807]), + "EmptyLongList": n.List[n.Long]([]), + "Nested": n.Compound({"custom_unknown": n.String("keep me")}), +}) +entity = n.Compound({"Id": n.String("minecraft:armor_stand"), + "Pos": n.List[n.Double]([1.5, 1.0, 0.5]), + "Data": n.Compound({"UUID": n.IntArray([1, 2, 3, 4]), "NoGravity": n.Byte(1)})}) +blockentity = n.Compound({"Id": n.String("minecraft:chest"), + "Pos": n.IntArray([0, 0, 0]), "Data": n.Compound({ + "Items": n.List[n.Compound]([n.Compound({"Slot": n.Byte(0), + "id": n.String("minecraft:diamond"), "count": n.Int(3)})]), + "unknown_inventory_tag": n.Long(12345678901234567), + })}) +states = ["minecraft:air", "minecraft:chest[facing=north,type=single,waterlogged=false]", + "minecraft:oak_stairs[facing=east,half=bottom,shape=straight,waterlogged=false]", + "example:unknown[facing=west]", "minecraft:stone"] +indices = [1, 2, 3, 4] + [0] * 20 +schematic = n.Compound({"Version": n.Int(3), "DataVersion": n.Int(4903), + "Width": n.Short(4), "Height": n.Short(3), "Length": n.Short(2), + "Offset": n.IntArray([-17, -1, 31]), "Metadata": metadata, + "Blocks": n.Compound({"Palette": n.Compound({s: n.Int(i) for i, s in enumerate(states)}), + "Data": n.ByteArray(indices), "BlockEntities": n.List[n.Compound]([blockentity])}), + "Biomes": n.Compound({"Palette": n.Compound({"minecraft:plains": n.Int(0), "minecraft:desert": n.Int(1)}), + "Data": n.ByteArray([i % 2 for i in range(24)])}), + "Entities": n.List[n.Compound]([entity]), + "UnknownRoot": n.Compound({"opaque": n.String("preserve this")}), +}) +f = n.File({"Schematic": schematic}, root_name="") +buffer = io.BytesIO(); f.write(buffer) +(out / "sponge-v3.schem").write_bytes(gzip.compress(buffer.getvalue(), mtime=0)) +print(out / "sponge-v3.schem") diff --git a/scripts/compat_java.java b/scripts/compat_java.java new file mode 100644 index 0000000..8a04409 --- /dev/null +++ b/scripts/compat_java.java @@ -0,0 +1,136 @@ +// Copyright Shacraft contributors. MIT OR Apache-2.0. +// Generate our own tiny world metadata and validate files using public Java26.2 +// APIs. Does not start a server, open sockets, or read/accept an EULA. +import java.nio.file.*; +import java.io.*; +import java.util.*; +import com.mojang.serialization.*; +import net.minecraft.SharedConstants; +import net.minecraft.server.Bootstrap; +import net.minecraft.nbt.*; +import net.minecraft.core.*; +import net.minecraft.core.registries.*; +import net.minecraft.data.registries.VanillaRegistries; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.chunk.*; +import net.minecraft.world.level.chunk.storage.*; +import net.minecraft.world.level.levelgen.*; +import net.minecraft.world.level.levelgen.flat.*; +import net.minecraft.world.level.levelgen.presets.*; +import net.minecraft.world.level.storage.*; +import net.minecraft.world.level.gamerules.*; +import net.minecraft.world.level.biome.*; + +class compat_java { + static final NbtAccounter BUDGET=NbtAccounter.create(16*1024*1024); + static void generate(Path out, HolderLookup.Provider lookup) throws Exception { + Files.createDirectories(out); + var settings=new LevelSettings("Shacraft template",GameType.CREATIVE,LevelSettings.DifficultySettings.DEFAULT,true,WorldDataConfiguration.DEFAULT); + var level=new PrimaryLevelData(settings,PrimaryLevelData.SpecialWorldProperty.FLAT,Lifecycle.stable()); + level.setInitialized(true); + level.setSpawn(LevelData.RespawnData.of(Level.OVERWORLD,new BlockPos(0,80,0),0,0)); + var root=new CompoundTag();root.put("Data",level.createTag(null)); + NbtIo.writeCompressed(root,out.resolve("level.dat")); + var flat=new FlatLevelGeneratorSettings(Optional.of(HolderSet.direct()),lookup.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.PLAINS),List.of()); + flat.getLayersInfo().add(new FlatLayerInfo(1,Blocks.AIR));flat.updateLayers(); + var dims=lookup.lookupOrThrow(Registries.WORLD_PRESET).getOrThrow(WorldPresets.FLAT).value().createWorldDimensions().replaceOverworldGenerator(lookup,new FlatLevelSource(flat)); + var worldgen=new WorldGenSettings(new WorldOptions(0,false,false),dims); + var encoded=WorldGenSettings.CODEC.encodeStart(lookup.createSerializationContext(NbtOps.INSTANCE),worldgen).getOrThrow(); + var data=new CompoundTag();data.put("data",encoded);NbtUtils.addCurrentDataVersion(data); + Path gen=WorldGenSettings.TYPE.id().withSuffix(".dat").resolveAgainst(out.resolve("data")); + Files.createDirectories(gen.getParent());NbtIo.writeCompressed(data,gen); + var rules=new GameRules(level.enabledFeatures());rules.set(GameRules.SPAWN_MOBS,false,null);rules.set(GameRules.ADVANCE_TIME,false,null); + LevelStorageSource.writeGameRules(level,out,rules); + System.out.println("Generated metadata with public Java26.2 APIs: "+out); + } + static PalettedContainerFactory factory(HolderLookup.Provider lookup) { + var biomeRegistry=new MappedRegistry(Registries.BIOME,Lifecycle.stable()); + lookup.lookupOrThrow(Registries.BIOME).listElements().forEach(h->biomeRegistry.register(h.key(),h.value(),RegistrationInfo.BUILT_IN)); + biomeRegistry.freeze(); + return PalettedContainerFactory.create(new RegistryAccess.ImmutableRegistryAccess(List.of(biomeRegistry))); + } + static void fixture(Path out,HolderLookup.Provider lookup) throws Exception { + generate(out,lookup); + var factory=factory(lookup); + var section=new LevelChunkSection(factory); + section.setBlockState(15,15,15,Blocks.CHEST.defaultBlockState()); + section.setBlockState(14,15,15,Blocks.OAK_STAIRS.defaultBlockState()); + section.setBlockState(13,15,15,Blocks.STONE.defaultBlockState()); + var chest=new CompoundTag();chest.putString("id","minecraft:chest");chest.putInt("x",-1);chest.putInt("y",-1);chest.putInt("z",31); + var item=new CompoundTag();item.putByte("Slot",(byte)0);item.putString("id","minecraft:diamond");item.putInt("count",3); + var inventory=new ListTag();inventory.add(item);chest.put("Items",inventory);chest.putLong("unknown_inventory_tag",12345678901234567L); + var chunk=new SerializableChunkData(factory,new ChunkPos(-1,1),-4,0,0,net.minecraft.world.level.chunk.status.ChunkStatus.FULL, + null,null,UpgradeData.EMPTY,null,Map.of(),new ChunkAccess.PackedTicks(List.of(),List.of()), + new it.unimi.dsi.fastutil.shorts.ShortList[24],false, + List.of(new SerializableChunkData.SectionData(-1,section,null,null)),List.of(),List.of(chest),new CompoundTag()); + var tag=chunk.write();var unknown=new CompoundTag();unknown.putByte("Byte",(byte)-128);unknown.putShort("Short",(short)-32768); + unknown.putLong("Long",Long.MIN_VALUE);unknown.putString("Unicode","Привет🌍\u0000");unknown.putIntArray("UUID",new int[]{1,2,3,4});tag.put("UnknownRoot",unknown); + Files.createDirectories(out.resolve("region")); + try(var region=new RegionFile(new RegionStorageInfo("compat-fixture",Level.OVERWORLD,"chunk"),out.resolve("region/r.-1.0.mca"),out.resolve("region"),false)) { + try(var output=region.getChunkDataOutputStream(new ChunkPos(-1,1))){NbtIo.write(tag,output);} + } + var entity=new CompoundTag();entity.putString("id","minecraft:armor_stand");entity.putIntArray("UUID",new int[]{1,2,3,4}); + var pos=new ListTag();pos.add(DoubleTag.valueOf(-0.5));pos.add(DoubleTag.valueOf(0));pos.add(DoubleTag.valueOf(31.5));entity.put("Pos",pos);entity.putBoolean("NoGravity",true); + var entities=new ListTag();entities.add(entity);var root=new CompoundTag();root.putInt("DataVersion",4903);root.putIntArray("Position",new int[]{-1,1});root.put("Entities",entities); + Files.createDirectories(out.resolve("entities")); + try(var region=new RegionFile(new RegionStorageInfo("compat-fixture",Level.OVERWORLD,"entities"),out.resolve("entities/r.-1.0.mca"),out.resolve("entities"),false)) { + try(var output=region.getChunkDataOutputStream(new ChunkPos(-1,1))){NbtIo.write(root,output);} + } + Files.writeString(out.resolve("custom-metadata.txt"),"own fixture; retain unknown file\n"); + } + static void validate(Path world,HolderLookup.Provider lookup) throws Exception { + var levelRoot=NbtIo.readCompressed(world.resolve("level.dat"),NbtAccounter.create(16*1024*1024)); + var level=levelRoot.getCompoundOrEmpty("Data"); + if(level.getIntOr("DataVersion",-1)!=4903)throw new AssertionError("DataVersion"); + var dynamic=new Dynamic<>(NbtOps.INSTANCE,level); + var config=LevelStorageSource.readDataConfig(dynamic); + var settings=LevelSettings.parse(dynamic,config); + var parsed=PrimaryLevelData.parse(dynamic,settings,PrimaryLevelData.SpecialWorldProperty.FLAT,Lifecycle.stable()); + Path gen=WorldGenSettings.TYPE.id().withSuffix(".dat").resolveAgainst(world.resolve("data")); + var encoded=NbtIo.readCompressed(gen,NbtAccounter.create(16*1024*1024)).getCompoundOrEmpty("data"); + var worldgen=WorldGenSettings.CODEC.parse(lookup.createSerializationContext(NbtOps.INSTANCE),encoded).getOrThrow(); + if(worldgen.dimensions().dimensions().size()!=3)throw new AssertionError("dimensions"); + var factory=factory(lookup);int chunks=0,sections=0,entities=0;long nonair=0; + try(var files=Files.walk(world)) { + for(Path path:files.filter(p->p.toString().endsWith(".mca")&&Set.of("region","entities").contains(p.getParent().getFileName().toString())&&!p.toString().contains("source-sidecar")).toList()) { + boolean entityRegion=path.getParent().getFileName().toString().equals("entities"); + String[] parts=path.getFileName().toString().split("\\.");int rx=Integer.parseInt(parts[1]),rz=Integer.parseInt(parts[2]); + try(var region=new RegionFile(new RegionStorageInfo("compat-check",Level.OVERWORLD,"chunk"),path,path.getParent(),false)) { + for(int i=0;i<1024;i++) { + var pos=new ChunkPos(rx*32+i%32,rz*32+i/32); + if(!region.hasChunk(pos))continue; + try(var input=region.getChunkDataInputStream(pos)) { + var tag=NbtIo.read(input,NbtAccounter.create(16*1024*1024)); + if(entityRegion) { + int[] coordinates=tag.getIntArray("Position").orElseThrow(); + if(coordinates.length!=2||coordinates[0]!=pos.x()||coordinates[1]!=pos.z())throw new AssertionError("entity chunk Position"); + for(var value:tag.getListOrEmpty("Entities")) { + var entity=(CompoundTag)value; + if(entity.getIntArray("UUID").orElseThrow().length!=4)throw new AssertionError("entity UUID"); + if(entity.getListOrEmpty("Pos").size()!=3)throw new AssertionError("entity Pos"); + if(!BuiltInRegistries.ENTITY_TYPE.containsKey(net.minecraft.resources.Identifier.parse(entity.getString("id").orElseThrow())))throw new AssertionError("unknown vanilla entity type"); + entities++; + } + continue; + } + var chunk=SerializableChunkData.parse(LevelHeightAccessor.create(-64,384),factory,tag); + if(chunk==null||!chunk.chunkPos().equals(pos))throw new AssertionError("missing/misplaced chunk "+pos); + for(var section:chunk.sectionData()) { + if(section.chunkSection()!=null){sections++;for(int y=0;y<16;y++)for(int z=0;z<16;z++)for(int x=0;x<16;x++)if(!section.chunkSection().getBlockState(x,y,z).isAir())nonair++;} + } + chunks++; + } + } + } + } + } + System.out.println("{\"java26_2_verified\":true,\"chunks\":"+chunks+",\"sections\":"+sections+",\"entities\":"+entities+",\"nonair_blocks\":"+nonair+",\"level_name\":\""+parsed.getLevelName()+"\",\"scope\":\"NbtIo,RegionFile,SerializableChunkData,PrimaryLevelData,WorldGenSettings codecs; no server simulation\"}"); + } + public static void main(String[] args) throws Exception { + SharedConstants.tryDetectVersion();Bootstrap.bootStrap();var lookup=VanillaRegistries.createLookup(); + if(args[0].equals("generate"))generate(Path.of(args[1]),lookup); + else if(args[0].equals("fixture"))fixture(Path.of(args[1]),lookup); + else validate(Path.of(args[1]),lookup); + } +} diff --git a/scripts/compat_verify.py b/scripts/compat_verify.py new file mode 100644 index 0000000..c5e359a --- /dev/null +++ b/scripts/compat_verify.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +"""Independent interchange acceptance using nbtlib and official Java26.2 APIs. + +Run: artifacts/compat-venv/bin/python scripts/compat_verify.py +Needs nbtlib==2.0.4 and the pinned catalog-cache JAR/JDK25 from catalog generation. +Never starts MinecraftServer or accepts an EULA. Writes only artifacts/. +""" +import argparse +import hashlib +import json +import re +import sqlite3 +import subprocess +import tempfile +from pathlib import Path +import nbtlib + +ROOT=Path(__file__).resolve().parents[1] +parser=argparse.ArgumentParser() +parser.add_argument("--java-bin",type=Path,default=Path.home()/".local/share/PrismLauncher/java/java-runtime-epsilon/bin") +args=parser.parse_args() +output=Path(tempfile.mkdtemp(prefix="compat-verification-",dir=ROOT/"artifacts")) +def command(argv,**kwargs): + cwd=kwargs.pop("cwd",ROOT) + result=subprocess.run(list(map(str,argv)),cwd=cwd,text=True,capture_output=True,timeout=120,**kwargs) + if result.returncode: + raise RuntimeError(f"Command failed: {argv}\n{result.stdout}\n{result.stderr}") + return result.stdout +command(["cargo","build","-p","shacraft-compat","-p","shacraft-tools"]) +compat=ROOT/"target/debug/shacraft-compat";tools=ROOT/"target/debug/shacraft-tools" +def convert(*argv):return json.loads(command([compat,*argv])) +def tool(store,request): + result=json.loads(command([tools,"--data",store,"session"],input=json.dumps(request)+"\n")) + assert result["ok"],result + return result["result"] + +source=ROOT/"crates/shacraft-compat/fixtures/java26_2-world" +store=output/"imported" +import_report=convert("import-anvil",source,store) +exact=output/"exact" +convert("export-anvil",store,exact) +for f in source.rglob("*"): + if f.is_file():assert f.read_bytes()==(exact/f.relative_to(source)).read_bytes() +stone=tool(store,{"op":"register","state":"minecraft:stone"}) +revision=tool(store,{"op":"revision","world":"main"}) +tool(store,{"op":"edit","world":"main","expected_revision":revision,"operation_id":"independent-edit", + "changes":[{"pos":[-1,-1,31],"block":0},{"pos":[512,64,-513],"block":stone}]}) +with sqlite3.connect(store/"server.sqlite3") as db: + meta=json.loads(db.execute("select json from metadata where id=1").fetchone()[0]); entity=next(iter(meta["entities"].values())) + entity["position"]=[513.5,65.,-513.5];entity["yaw"]=1.25;entity["properties"]["Invisible"]=True + meta["revision"]+=1;db.execute("update metadata set json=? where id=1",(json.dumps(meta),)) +edited=output/"edited";edited_report=convert("export-anvil",store,edited,"--mode","best-effort") +native=output/"native" +tool(native,{"op":"create","name":"own","template":None}) +id=tool(native,{"op":"register","state":"minecraft:stone"}) +tool(native,{"op":"edit","world":"own","expected_revision":0,"operation_id":"own-build", "changes":[{"pos":[-1,63,0],"block":id},{"pos":[0,64,0],"block":id}]}) +new=output/"new-world";new_report=convert("export-anvil",native,new,"--world","own","--mode","best-effort") +schem_store=output/"schem-store";schem_source=ROOT/"crates/shacraft-compat/fixtures/sponge-v3.schem" +convert("import-schem",schem_source,schem_store) +revision=tool(schem_store,{"op":"revision","world":"main"}) +tool(schem_store,{"op":"edit","world":"main","expected_revision":revision,"operation_id":"break-chest", "changes":[{"pos":[-17,-1,31],"block":0}]}) +schem=output/"schem";convert("export-schem",schem_store,schem,"--mode","best-effort") +a=nbtlib.load(schem_source)["Schematic"];b=nbtlib.load(schem/"world.schem")["Schematic"] +def typed(tag): + if isinstance(tag,nbtlib.Compound):return ("Compound",tuple((k,typed(v)) for k,v in sorted(tag.items()))) + if isinstance(tag,nbtlib.List):return ("List",tag.subtype.__name__,tuple(typed(v) for v in tag)) + if hasattr(tag,"dtype"):return (type(tag).__name__,tuple(int(v) for v in tag)) + return (type(tag).__name__,str(tag)) +for key in ["Metadata","Biomes","Entities","Offset","UnknownRoot"]: + assert typed(a[key])==typed(b[key]),key +assert not b["Blocks"]["BlockEntities"] +assert isinstance(b["Metadata"]["Long"],nbtlib.Long) +assert isinstance(b["Metadata"]["EmptyLongList"],nbtlib.List[nbtlib.Long]) + +cache=ROOT/"artifacts/catalog-cache" +jar=cache/"server.jar" +assert hashlib.sha1(jar.read_bytes()).hexdigest()=="823e2250d24b3ddac457a60c92a6a941943fcd6a" +cp=":".join(map(str,[cache/"versions/26.2/server-26.2.jar",*cache.glob("libraries/**/*.jar")])) +classes=output/"java-classes";classes.mkdir() +command([args.java_bin/"javac","-cp",cp,"-d",classes,ROOT/"scripts/compat_java.java"]) +java_results=[] +for label,world in [("exact",exact),("edited",edited),("new",new)]: + text=command([args.java_bin/"java","-Xmx768m","-cp",str(classes)+":"+cp,"compat_java","validate",world],cwd=output) + (output/f"java-{label}.log").write_text(text) + line=next(line[line.index('{'):] for line in text.splitlines() if '"java26_2_verified"' in line) + result=json.loads(line);result["case"]=label;java_results.append(result) +assert [r["nonair_blocks"] for r in java_results]==[3,3,2] +summary={"success":True,"directory":str(output),"java":java_results,"nbtlib_version":nbtlib.__version__, + "source_jar_sha1":hashlib.sha1(jar.read_bytes()).hexdigest(),"source_jar_sha256":hashlib.sha256(jar.read_bytes()).hexdigest(), + "nbtlib_sponge_typed_roundtrip":True,"exact_source_files_identical":True, + "edited_world":edited_report,"native_world":new_report, + "limitations":"Java checks official disk/container/palette/world-metadata codecs, not running server, client renderer, light simulation or EULA acceptance."} +(output/"verification.json").write_text(json.dumps(summary,ensure_ascii=False,indent=2)+"\n") +print(json.dumps({"success":True,"report":str(output/"verification.json"),"java":java_results},indent=2)) diff --git a/scripts/make_release.py b/scripts/make_release.py new file mode 100755 index 0000000..204dcd5 --- /dev/null +++ b/scripts/make_release.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""Package a clean, committed source tree and optional Linux executables. + +No user worlds, tokens, Cargo caches, Minecraft JAR, or untracked files enter +an archive. Every extracted file is checked against the in-archive manifest. +""" +import argparse +import gzip +import hashlib +import io +import json +import subprocess +import tarfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + +def git(*args): + return subprocess.check_output(['git', *args], cwd=ROOT) + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--binaries', action='store_true') + args = parser.parse_args() + if git('status', '--porcelain').strip(): + raise SystemExit('Commit the reviewed tree before packaging.') + revision = git('rev-parse', 'HEAD').decode().strip() + epoch = int(git('show', '-s', '--format=%ct', 'HEAD')) + paths = [Path(p.decode()) for p in git('ls-files', '-z').split(b'\0') if p] + if args.binaries: + paths += [Path('target/release') / name for name in + ['shacraft-server', 'shacraft-mcp', 'shacraft-compat', 'shacraft-tools']] + files = [] + for relative in sorted(paths): + path = ROOT / relative + if path.is_symlink() or not path.is_file(): + raise SystemExit(f'Only regular files are distributable: {relative}') + if relative.name.endswith('.token') or relative.name == '.env': + raise SystemExit(f'Secret filename cannot be distributed: {relative}') + data = path.read_bytes() + files.append((relative.as_posix(), data, 0o755 if path.stat().st_mode & 0o111 else 0o644)) + manifest = {'project':'Shacraft Core','git_revision':revision,'source_epoch':epoch, + 'kind':'linux-x86_64' if args.binaries else 'source', + 'license':'MIT OR Apache-2.0', + 'files':{name:{'sha256':hashlib.sha256(data).hexdigest(),'size':len(data)} for name,data,_ in files}} + files.append(('RELEASE.json', (json.dumps(manifest,indent=2)+'\n').encode(), 0o644)) + output = ROOT / 'artifacts' / f"shacraft-core-mvp-{revision[:8]}-{manifest['kind']}.tar.gz" + output.parent.mkdir(exist_ok=True) + with output.open('wb') as raw, gzip.GzipFile(fileobj=raw,mode='wb',mtime=0) as zipped: + with tarfile.open(fileobj=zipped,mode='w') as archive: + for name,data,mode in files: + info=tarfile.TarInfo('shacraft-core/'+name) + info.size=len(data);info.mode=mode;info.mtime=epoch + archive.addfile(info,io.BytesIO(data)) + digest=hashlib.sha256(output.read_bytes()).hexdigest() + output.with_name(output.name+'.sha256').write_text(f'{digest} {output.name}\n') + with tarfile.open(output,'r:gz') as archive: + for name,data,_ in files: + actual=archive.extractfile('shacraft-core/'+name).read() + if actual!=data: + raise SystemExit(f'Archive verification failed for {name}') + print(json.dumps({'archive':str(output),'sha256':digest,'bytes':output.stat().st_size, + 'git_revision':revision,'verified_files':len(files)},indent=2)) + +if __name__=='__main__': + main() diff --git a/scripts/run.sh b/scripts/run.sh new file mode 100755 index 0000000..369da0f --- /dev/null +++ b/scripts/run.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail +shacraft_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$shacraft_root" +if [[ ! -x target/release/shacraft-server ]]; then + cargo build --release --locked -p shacraft-server -p shacraft-mcp -p shacraft-compat +fi +exec target/release/shacraft-server --client "$shacraft_root/client" --packages "$shacraft_root/packages" "$@" diff --git a/scripts/server-harness.mjs b/scripts/server-harness.mjs new file mode 100644 index 0000000..07e0790 --- /dev/null +++ b/scripts/server-harness.mjs @@ -0,0 +1,261 @@ +import assert from "node:assert/strict"; +import { spawn } from "node:child_process"; +import { mkdtemp, mkdir, readFile, writeFile } from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +export const root = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "..", +); +export const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +export function options() { + const opts = {}; + for (let i = 2; i < process.argv.length; i += 2) + opts[process.argv[i].replace(/^--/, "")] = process.argv[i + 1]; + return opts; +} +export async function harness(opts = {}) { + const port = Number(opts.port || 4001), + url = `http://127.0.0.1:${port}`; + try { + await fetch(`${url}/api/health`, { signal: AbortSignal.timeout(500) }); + throw Error( + `Port ${port} is already serving HTTP; choose an unused --port`, + ); + } catch (error) { + if (error.message?.includes("already serving")) throw error; + } + const data = opts.data + ? path.resolve(opts.data) + : await mkdtemp(path.join(os.tmpdir(), "shacraft-server-test-")); + await mkdir(data, { recursive: true }); + let stderr = ""; + const binary = path.resolve( + opts.binary || path.join(root, "target/debug/shacraft-server"), + ); + const child = spawn( + binary, + [ + "--listen", + `127.0.0.1:${port}`, + "--data", + data, + "--client", + path.join(root, "client"), + "--packages", + path.join(root, "packages"), + ], + { cwd: root, stdio: ["ignore", "pipe", "pipe"] }, + ); + child.stdout.on("data", (chunk) => (stderr += chunk)); + child.stderr.on("data", (chunk) => (stderr += chunk)); + let failure; + child.on("error", (e) => (failure = e)); + const running = () => + child.exitCode === null && child.signalCode === null && !failure; + async function kill(signal = "SIGKILL") { + if (!running()) return; + const exited = new Promise((resolve) => child.once("exit", resolve)); + async function waitForExit() { + let timer; + await Promise.race([ + exited, + new Promise((resolve) => { + timer = setTimeout(resolve, 5000); + }), + ]); + clearTimeout(timer); + } + child.kill(signal); + await waitForExit(); + if (running()) { + child.kill("SIGKILL"); + await waitForExit(); + } + if (running()) throw Error("Test server did not exit after SIGKILL"); + } + async function stop() { + await kill("SIGINT"); + } + try { + const deadline = Date.now() + 45000; + while (true) { + if (failure) throw failure; + if (!running()) throw Error(`Server exited: ${stderr}`); + try { + if ((await fetch(`${url}/api/health`)).ok) break; + } catch {} + if (Date.now() > deadline) + throw Error(`Server startup timeout: ${stderr}`); + await delay(100); + } + } catch (e) { + await stop(); + throw e; + } + const token = ( + await readFile(path.join(data, "control.token"), "utf8") + ).trim(); + async function get(route) { + const r = await fetch(url + route); + assert.equal(r.status, 200, `${route}: HTTP ${r.status}`); + return r.json(); + } + async function control(method, params = {}) { + const response = await fetch(url + "/api/control", { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ method, params }), + }); + const body = await response.json(); + if (!response.ok || body.error) + throw Error(`${method}: ${body.error || response.status}`); + return body.result; + } + return { + url, + data, + pid: child.pid, + binary, + get, + control, + stop, + kill, + logs: () => stderr, + async report(value) { + const output = opts.output + ? path.resolve(opts.output) + : path.join(data, "report.json"); + await mkdir(path.dirname(output), { recursive: true }); + await writeFile(output, JSON.stringify(value, null, 2) + "\n"); + console.log( + JSON.stringify( + { + ...value, + samples: undefined, + sample_count: value.samples?.length, + report_file: output, + data, + }, + null, + 2, + ), + ); + }, + }; +} +export class Client { + constructor(url) { + this.ws = new WebSocket(url.replace(/^http/, "ws") + "/ws"); + this.queue = []; + this.waiters = []; + this.id = null; + this.seq = 0; + this.latest = null; + this.revision = null; + this.error = null; + this.open = new Promise((resolve, reject) => { + this.ws.addEventListener("open", resolve, { once: true }); + this.ws.addEventListener( + "error", + () => reject(Error("WebSocket connection failed")), + { once: true }, + ); + }); + this.ws.addEventListener("message", (event) => { + let m; + try { + m = JSON.parse(event.data); + } catch { + return; + } + if (m.type === "state") this.latest = m; + if (m.type === "welcome") { + this.id = m.id; + this.welcome = m; + } + if (["welcome", "snapshot", "blocks"].includes(m.type)) + this.revision = m.revision; + for (let i = 0; i < this.waiters.length; i++) { + const w = this.waiters[i]; + if (w.predicate(m)) { + this.waiters.splice(i, 1); + clearTimeout(w.timer); + w.resolve(m); + return; + } + } + this.queue.push(m); + if (this.queue.length > 500) this.queue.shift(); + }); + } + send(message) { + this.ws.send(JSON.stringify(message)); + } + async join(manifest, world, name = "TestPlayer") { + await this.open; + this.send({ + type: "join", + protocol: 1, + manifest_hash: manifest.hash, + world, + name, + }); + return this.next("welcome"); + } + next(type, predicate = () => true, timeout = 10000) { + return this.wait((m) => m.type === type && predicate(m), timeout); + } + wait(predicate, timeout = 10000) { + const i = this.queue.findIndex(predicate); + if (i >= 0) return Promise.resolve(this.queue.splice(i, 1)[0]); + return new Promise((resolve, reject) => { + const w = { + predicate, + resolve, + timer: setTimeout(() => { + this.waiters = this.waiters.filter((x) => x !== w); + reject(Error(`WebSocket message timeout (${timeout} ms)`)); + }, timeout), + }; + this.waiters.push(w); + }); + } + input(fields = {}) { + const input = { + type: "input", + seq: ++this.seq, + yaw: 0, + pitch: 0, + forward: 0, + strafe: 0, + jump: false, + ...fields, + }; + this.send(input); + return input.seq; + } + async state(predicate = () => true, timeout = 10000) { + return this.next( + "state", + (m) => + predicate( + m.players.find((p) => p.id === this.id), + m, + ), + timeout, + ); + } + async close() { + if (this.ws.readyState === WebSocket.CLOSED) return; + const closed = new Promise((resolve) => + this.ws.addEventListener("close", resolve, { once: true }), + ); + this.ws.close(); + await Promise.race([closed, delay(2000)]); + } +} diff --git a/scripts/verify.sh b/scripts/verify.sh index 19c882e..bbfc4e8 100755 --- a/scripts/verify.sh +++ b/scripts/verify.sh @@ -2,8 +2,10 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")/.." cargo fmt --all -- --check +rustfmt --edition 2024 --check crates/shacraft-server/src/control.rs cargo clippy --workspace --all-targets --locked -- -D warnings cargo test --workspace --locked -cargo build -p shacraft-tools --locked +cargo build --workspace --locked python3 scripts/check_storage.py - +node --test client/tests/*.test.js +node scripts/check_server.mjs --binary target/debug/shacraft-server --port 4001 --output artifacts/server-e2e-debug.json